https://gcc.gnu.org/bugzilla/show_bug.cgi?id=87644
Bug ID: 87644 Summary: ICE due to variable named "parameters" Product: gcc Version: 8.2.0 Status: UNCONFIRMED Severity: normal Priority: P3 Component: fortran Assignee: unassigned at gcc dot gnu.org Reporter: matthew.thompson at nasa dot gov Target Milestone: --- This is a weird ICE recently encountered using gfortran 8.2.0 on SLES11, CentOS 7, and macOS High Sierra in a large code, but I managed to whittle it down to a small reproducer below. The issue sees to be related to the fact that the variable is named 'parameters'. module test implicit none private public :: get contains subroutine initialize() integer :: parameters parameters = get() end subroutine initialize function get() result(parameters) integer :: parameters parameters = 1 end function get end module test When it's compiled: (259) $ gfortran -v -save-temps test.F90 Driving: gfortran -v -save-temps test.F90 -l gfortran -l m -shared-libgcc Using built-in specs. COLLECT_GCC=gfortran COLLECT_LTO_WRAPPER=/ford1/local/gcc/gcc-8.2.0/libexec/gcc/x86_64-pc-linux-gnu/8.2.0/lto-wrapper Target: x86_64-pc-linux-gnu Configured with: ../gcc-8.2.0/configure --prefix=/ford1/local/gcc/gcc-8.2.0 --disable-multilib Thread model: posix gcc version 8.2.0 (GCC) COLLECT_GCC_OPTIONS='-v' '-save-temps' '-shared-libgcc' '-mtune=generic' '-march=x86-64' /ford1/local/gcc/gcc-8.2.0/libexec/gcc/x86_64-pc-linux-gnu/8.2.0/f951 test.F90 -cpp=test.f90 -quiet -v test.F90 -quiet -dumpbase test.F90 -mtune=generic -march=x86-64 -auxbase test -version -fintrinsic-modules-path /ford1/local/gcc/gcc-8.2.0/lib/gcc/x86_64-pc-linux-gnu/8.2.0/finclude -o test.s GNU Fortran (GCC) version 8.2.0 (x86_64-pc-linux-gnu) compiled by GNU C version 8.2.0, GMP version 6.1.0, MPFR version 3.1.4, MPC version 1.0.3, isl version isl-0.18-GMP GGC heuristics: --param ggc-min-expand=100 --param ggc-min-heapsize=131072 ignoring nonexistent directory "/ford1/local/gcc/gcc-8.2.0/lib/gcc/x86_64-pc-linux-gnu/8.2.0/../../../../x86_64-pc-linux-gnu/include" #include "..." search starts here: #include <...> search starts here: /ford1/local/gcc/gcc-8.2.0/lib/gcc/x86_64-pc-linux-gnu/8.2.0/finclude /ford1/local/gcc/gcc-8.2.0/lib/gcc/x86_64-pc-linux-gnu/8.2.0/include /usr/local/include /ford1/local/gcc/gcc-8.2.0/include /ford1/local/gcc/gcc-8.2.0/lib/gcc/x86_64-pc-linux-gnu/8.2.0/include-fixed /usr/include End of search list. GNU Fortran2008 (GCC) version 8.2.0 (x86_64-pc-linux-gnu) compiled by GNU C version 8.2.0, GMP version 6.1.0, MPFR version 3.1.4, MPC version 1.0.3, isl version isl-0.18-GMP GGC heuristics: --param ggc-min-expand=100 --param ggc-min-heapsize=131072 f951: internal compiler error: in is_illegal_recursion, at fortran/resolve.c:1684 0x5c3d20 is_illegal_recursion ../../gcc-8.2.0/gcc/fortran/resolve.c:1684 0x6a3136 resolve_function ../../gcc-8.2.0/gcc/fortran/resolve.c:3262 0x6a006d gfc_resolve_expr(gfc_expr*) ../../gcc-8.2.0/gcc/fortran/resolve.c:6725 0x633cff gfc_reduce_init_expr(gfc_expr*) ../../gcc-8.2.0/gcc/fortran/expr.c:2773 0x636650 gfc_match_init_expr(gfc_expr**) ../../gcc-8.2.0/gcc/fortran/expr.c:2821 0x6203b4 do_parm ../../gcc-8.2.0/gcc/fortran/decl.c:8836 0x6203b4 gfc_match_parameter() ../../gcc-8.2.0/gcc/fortran/decl.c:8890 0x67f239 match_word ../../gcc-8.2.0/gcc/fortran/parse.c:65 0x67fbac decode_statement ../../gcc-8.2.0/gcc/fortran/parse.c:356 0x68357e next_free ../../gcc-8.2.0/gcc/fortran/parse.c:1234 0x68357e next_statement ../../gcc-8.2.0/gcc/fortran/parse.c:1466 0x684c2b parse_spec ../../gcc-8.2.0/gcc/fortran/parse.c:3858 0x687627 parse_progunit ../../gcc-8.2.0/gcc/fortran/parse.c:5671 0x687aaa parse_contained ../../gcc-8.2.0/gcc/fortran/parse.c:5574 0x68871c parse_module ../../gcc-8.2.0/gcc/fortran/parse.c:5944 0x688a0b gfc_parse_file() ../../gcc-8.2.0/gcc/fortran/parse.c:6247 0x6cf25f gfc_be_parse_file ../../gcc-8.2.0/gcc/fortran/f95-lang.c:204 Please submit a full bug report, with preprocessed source if appropriate. Please include the complete backtrace with any bug report. See <https://gcc.gnu.org/bugs/> for instructions. Note that if the variable 'parameters' is renamed 'p' it works: (261) $ cat testp.F90 module test implicit none private public :: get contains subroutine initialize() integer :: p p = get() end subroutine initialize function get() result(p) integer :: p p = 1 end function get end module test (262) $ gfortran testp.F90 /lib/../lib64/crt1.o: In function `_start': (.text+0x20): undefined reference to `main' collect2: error: ld returned 1 exit status