https://gcc.gnu.org/bugzilla/show_bug.cgi?id=118714
Bug ID: 118714
Summary: [15 regression] SIGBUS in parse.cc:unexpected_eof
Product: gcc
Version: 15.0
Status: UNCONFIRMED
Severity: normal
Priority: P3
Component: fortran
Assignee: unassigned at gcc dot gnu.org
Reporter: ro at gcc dot gnu.org
CC: sandra at gcc dot gnu.org
Target Milestone: ---
Target: sparc-sun-solaris2.11
Between 20250130 (9ba2de71815c0ea6cc940ecb50af7cc1a84579f7) and 20250131
(9e3ceed8d50912e271e84389ed80aeea47184e59),
one test regressed on Solaris/SPARC (32 and 64-bit):
+FAIL: gfortran.dg/gomp/adjust-args-9.f90 -O (internal compiler error: Bus
Error)
/vol/gcc/src/hg/master/local/gcc/testsuite/gfortran.dg/gomp/adjust-args-9.f90:22:7:
Error: āgā at (1) is not a variable
/vol/gcc/src/hg/master/local/gcc/testsuite/gfortran.dg/gomp/adjust-args-9.f90:24:4:
Error: Unexpected END statement at (1)
f951: Error: Unexpected end of file in
ā/vol/gcc/src/hg/master/local/gcc/testsuite/gfortran.dg/gomp/adjust-args-9.f90ā
f951: internal compiler error: Bus Error
0x213e1af internal_error(char const*, ...)
/vol/gcc/src/hg/master/local/gcc/diagnostic-global-context.cc:517
0x11245f7 crash_signal
/vol/gcc/src/hg/master/local/gcc/toplev.cc:322
0x89aac0 unexpected_eof
/vol/gcc/src/hg/master/local/gcc/fortran/parse.cc:3424
0x8abb53 parse_select_block
/vol/gcc/src/hg/master/local/gcc/fortran/parse.cc:4819
0x8abb53 parse_executable
/vol/gcc/src/hg/master/local/gcc/fortran/parse.cc:6576
0x8ac49b parse_progunit
/vol/gcc/src/hg/master/local/gcc/fortran/parse.cc:6949
0x8ae0a3 gfc_parse_file()
/vol/gcc/src/hg/master/local/gcc/fortran/parse.cc:7513
0x911337 gfc_be_parse_file
/vol/gcc/src/hg/master/local/gcc/fortran/f95-lang.cc:241
This can be reproduced with
$ f951 adjust-args-9.f90 -quiet -mcpu=v9 -fopenmp
gdb shows
Thread 2 received signal SIGBUS, Bus error.
[Switching to Thread 1 (LWP 1)]
0x0089aac0 in unexpected_eof ()
at /vol/gcc/src/hg/master/local/gcc/fortran/parse.cc:3424
3424 for (p = gfc_state_stack; p && p->previous && p->previous->previous;
(gdb) bt
#0 0x0089aac0 in unexpected_eof ()
at /vol/gcc/src/hg/master/local/gcc/fortran/parse.cc:3424
#1 0x008abb54 in parse_select_block ()
at /vol/gcc/src/hg/master/local/gcc/fortran/parse.cc:4819
#2 parse_executable (st=<optimized out>)
at /vol/gcc/src/hg/master/local/gcc/fortran/parse.cc:6576
#3 0x008ac49c in parse_progunit (st=ST_OMP_DISPATCH)
at /vol/gcc/src/hg/master/local/gcc/fortran/parse.cc:6949
#4 0x008ae0a4 in gfc_parse_file ()
at /vol/gcc/src/hg/master/local/gcc/fortran/parse.cc:7513
#5 0x00911338 in gfc_be_parse_file ()
at /vol/gcc/src/hg/master/local/gcc/fortran/f95-lang.cc:241
#6 0x01124bac in compile_file ()
at /vol/gcc/src/hg/master/local/gcc/toplev.cc:452
#7 0x01128a68 in do_compile ()
at /vol/gcc/src/hg/master/local/gcc/toplev.cc:2208
#8 toplev::main (this=<optimized out>, argc=<optimized out>,
argv=<optimized out>) at /vol/gcc/src/hg/master/local/gcc/toplev.cc:2368
#9 0x020f90f4 in main (argc=5, argv=0xffbfeb8c)
at /vol/gcc/src/hg/master/local/gcc/main.cc:39
gdb) p p
$1 = <optimized out>
(gdb) p gfc_state_stack
$3 = (gfc_state_data *) 0xffbfe6d0
(gdb) p $3->previous
$4 = (gfc_state_data *) 0x5e
Obviously, p->previous is invalid. This is almost certainly due to
commit 8fbccdb3425e7fc9194d3f02e4a53f3e85cd1a4e
Author: Sandra Loosemore <[email protected]>
Date: Thu Jan 30 17:03:06 2025 +0000
OpenMP: Fortran support for metadirectives and dynamic selectors