https://gcc.gnu.org/bugzilla/show_bug.cgi?id=103529
Bug ID: 103529 Summary: [12 regression] d21 SIGBUS on SPARC Product: gcc Version: 12.0 Status: UNCONFIRMED Severity: normal Priority: P3 Component: d Assignee: ibuclaw at gdcproject dot org Reporter: ro at gcc dot gnu.org Target Milestone: --- Target: sparc*-sun-solaris2.11 As mentioned in PR d/103528, the stage1 d21 dies with SIGBUS compiling a trivial test program when configuring stage1 libphobos: $ cat conftest.d module object; extern(C) int main() { return 0; } $ d21 conftest.d -quiet -dumpbase conftest.d -dumpbase-ext .d -mcpu=v9 -g -O2 -version -fno-checking -fno-druntime -iprefix /var/gcc/regression/master/11.4-gcc-gas/build/gcc/../lib/gcc/sparc-sun-solaris2.11/12.0.0/ -isystem /var/gcc/regression/master/11.4-gcc-gas/build/./gcc/include -isystem /var/gcc/regression/master/11.4-gcc-gas/build/./gcc/include-fixed -nostdinc -isystem /vol/gcc/sparc-sun-solaris2.11/include -isystem /vol/gcc/sparc-sun-solaris2.11/sys-include -I /vol/gcc/src/hg/master/local/libphobos/libdruntime -v -o conftest.s [...] predefs GNU D_Version2 BigEndian GNU_DWARF2_Exceptions GNU_StackGrowsDown GNU_InlineAsm assert D_BetterC all SPARC SPARC_V8Plus D_HardFloat SPARC_HardFloat Posix Solaris CppRuntime_Gcc parse conftest d21: internal compiler error: Bus Error 0x1abda2f crash_signal /vol/gcc/src/hg/master/local/gcc/toplev.c:322 0xf34643 _D3dmd5lexer5Lexer9endOfLineMFNaNbNiNfZv /vol/gcc/src/hg/master/local/gcc/d/dmd/lexer.d:3112 0xf34643 _D3dmd5lexer5Lexer4scanMFNbPS3dmd6tokens5TokenZv /vol/gcc/src/hg/master/local/gcc/d/dmd/lexer.d:390 0xf35e3b _D3dmd5lexer5Lexer9nextTokenMFNbZE3dmd6tokens3TOK /vol/gcc/src/hg/master/local/gcc/d/dmd/lexer.d:335 0xe36f17 _D3dmd5parse41__T6ParserTS3dmd10astcodegen10ASTCodegenZ6Parser11parseModuleMFZPS3dmd4root5array32__T5ArrayTC3dmd7dsymbol7DsymbolZ5Array /vol/gcc/src/hg/master/local/gcc/d/dmd/parse.d:441 0xe358c7 _D3dmd7dmodule6Module47__T11parseModuleTS3dmd10astcodegen10ASTCodegenZ11parseModuleMFZC3dmd7dmodule6Module /vol/gcc/src/hg/master/local/gcc/d/dmd/dmodule.d:1072 0xffcb77 d_parse_file /vol/gcc/src/hg/master/local/gcc/d/d-lang.cc:1103 gdb shows Thread 2 received signal SIGBUS, Bus error. [Switching to Thread 1 (LWP 1)] 0x00f079fc in dmd.lexer.Lexer.scan(dmd.tokens.Token*) (this=0xffbfe0c8, t=0xffbfe0f0) at /vol/gcc/src/hg/master/local/gcc/d/dmd/lexer.d:398 398 while (*(cast(uint*)p) == 0x20202020) //' ' == 0x20 (gdb) p/x p warning: can't find linker symbol for virtual table for `dmd.lexer.Lexer' value warning: found `initializer for TypeInfo_S3dmd5parse__T16PrefixAttributesTSQBh10astcodegen10ASTCodegenZQBw' instead $1 = 0xfb8d0acf (gdb) bt #0 0x00f079fc in dmd.lexer.Lexer.scan(dmd.tokens.Token*) (this=0xffbfe0c8, t=0xffbfe0f0) at /vol/gcc/src/hg/master/local/gcc/d/dmd/lexer.d:398 #1 0x00f08adc in dmd.lexer.Lexer.nextToken() (this=0xffbfe0c8) at /vol/gcc/src/hg/master/local/gcc/d/dmd/lexer.d:335 #2 0x00e0ec14 in dmd.parse.Parser!(dmd.astcodegen.ASTCodegen).Parser.parseModule() (this=0xffbfe0c8) at /vol/gcc/src/hg/master/local/gcc/d/dmd/parse.d:441 #3 0x00e0d6ec in dmd.dmodule.Module.parseModule!(dmd.astcodegen.ASTCodegen).parseModule() (this=0xfb8d9000) at /vol/gcc/src/hg/master/local/gcc/d/dmd/dmodule.d:1072 #4 0x00ffe214 in d_parse_file () at /vol/gcc/src/hg/master/local/gcc/d/d-lang.cc:1103 #5 0x01ac8050 in compile_file () at /vol/gcc/src/hg/master/local/gcc/toplev.c:452 #6 0x01accf34 in do_compile (no_backend=false) at /vol/gcc/src/hg/master/local/gcc/toplev.c:2156 #7 0x01acd4f4 in toplev::main (this=0xffbfe5aa, argc=29, argv=0xffbfe614) at /vol/gcc/src/hg/master/local/gcc/toplev.c:2308 #8 0x02e45cb8 in main (argc=29, argv=0xffbfe614) at /vol/gcc/src/hg/master/local/gcc/main.c:39 The type punning above is practically guaranteed to break badly on strict-alignment targets like SPARC. The attached patch (hack?) fixed this, restored bootstrap and provided more-or-less ok test results.