https://gcc.gnu.org/bugzilla/show_bug.cgi?id=104811

            Bug ID: 104811
           Summary: maxloc/minloc cannot accept character arguments
                    without `dim` optional argument.
           Product: gcc
           Version: 11.0
            Status: UNCONFIRMED
          Severity: normal
          Priority: P3
         Component: fortran
          Assignee: unassigned at gcc dot gnu.org
          Reporter: a.shahmoradi at gmail dot com
  Target Milestone: ---

The following code appears to be standard-conforming. 

```
character(1) :: str(3)
str = ["a", "c", "a"]
print *, maxloc(str) ! requires dim = 1 argument to function.
print *, minloc(str) ! requires dim = 1 argument to function.
end
```

However, gfortran 11 or newer versions generate code that crashes with a
segfault error at runtime,

```
Program received signal SIGSEGV: Segmentation fault - invalid memory reference.

Backtrace for this error:
#0  0x7faba0a82642 in ???
#1  0x7faba0a81815 in ???
#2  0x7faba070020f in ???
#3  0x7faba0c70caa in ???
#4  0x40125b in MAIN__
        at /app/example.f90:3
#5  0x4010bc in main
        at /app/example.f90:5
```

The above code snippet can be readily tested here to reproduce the segfault:
https://godbolt.org/z/jGchG7zq3

If we add `dim = 1` to the maxloc/minloc calls, then the error is resolved. But
the dim argument is optional and should not be needed. Intel ifort compiles and
generates a correct answer with the above code.

Reply via email to