Excerpts from Iain Buclaw's message of September 6, 2022 11:41 pm:
> Excerpts from Iain Buclaw's message of September 6, 2022 7:02 pm:
>> Excerpts from Rainer Orth's message of September 6, 2022 4:25 pm:
>>> Hi Iain,
>>>
>>>>> there is indeed ;-) The previous d21 emits
>>>>>
>>>>> binary ./266566/gcc/d21
>>>>> version v2.100.1
>>>>>
>>>>> predefs GNU D_Version2 LittleEndian GNU_DWARF2_Exceptions
>>>>> GNU_StackGrowsDown GNU_InlineAsm assert D_PreConditions D_PostConditions
>>>>> D_Invariants D_ModuleInfo D_Exceptions D_TypeInfo all X86 D_HardFloat
>>>>> Posix Solaris CppRuntime_Gcc
>>>>>
>>>>> while the patched one gives
>>>>>
>>>>> core.exception.ArrayIndexError@/var/gcc/reghunt/master/gcc/d/dmd/root/stringtable.d(291):
>>>>> index [3530971477] is out of bounds for array of length 0
>>>>> gcc.deh(505): uncaught exception
>>>>> <built-in>: internal compiler error: Abort
>>>>> 0x96d5b6c crash_signal
>>>>> /var/gcc/reghunt/master/gcc/toplev.cc:314
>>>>>
>>>>
>>>> Excellent, and the stage1 compiler?
>>>
>>> binary ./prev-gcc/d21
>>> version v2.100.1
>>>
>>> predefs GNU D_Version2 LittleEndian GNU_DWARF2_Exceptions
>>> GNU_StackGrowsDown GNU_InlineAsm assert D_PreConditions D_PostConditions
>>> D_Invariants D_ModuleInfo D_Exceptions D_TypeInfo all X86 D_HardFloat Posix
>>> Solaris CppRuntime_Gcc
>>>
>>> So identical to the pre-patch one.
>>>
>>> Just in case, here's the stacktrace of the crashing d21, filtered
>>> through c++filt -s dlang:
>>>
>>> Thread 2 received signal SIGABRT, Aborted.
>>> [Switching to Thread 1 (LWP 1)]
>>> 0xfe1be2e5 in __lwp_sigqueue () from /lib/libc.so.1
>>> (gdb) bt
>>> #0 0xfe1be2e5 in __lwp_sigqueue () from /lib/libc.so.1
>>> #1 0xfe1b62cf in thr_kill () from /lib/libc.so.1
>>> #2 0xfe0ed662 in raise () from /lib/libc.so.1
>>> #3 0xfe0bae74 in abort () from /lib/libc.so.1
>>> #4 0x0a8e786d in gcc.deh.terminate(immutable(char)[], uint) (msg=...,
>>> line=<optimized out>) at
>>> /var/gcc/reghunt/master/libphobos/libdruntime/gcc/deh.d:414
>>> #5 0x0a8e7ab3 in _d_throw (object=<optimized out>) at
>>> /var/gcc/reghunt/master/libphobos/libdruntime/gcc/deh.d:505
>>> #6 0x0a8edf02 in onArrayIndexError (index=<optimized out>,
>>> length=<optimized out>, file=..., line=<optimized out>) at
>>> /var/gcc/reghunt/master/libphobos/libdruntime/core/exception.d:650
>>> #7 0x0a8edf3d in _d_arraybounds_indexp (file=<optimized out>,
>>> line=<optimized out>, index=<optimized out>, length=<optimized out>) at
>>> /var/gcc/reghunt/master/libphobos/libdruntime/core/exception.d:848
>>> #8 0x08ffc17a in
>>> dmd.root.stringtable.StringTable!(dmd.identifier.Identifier).StringTable.findSlot(uint,
>>> scope const(char)[]) const (this=..., hash=<optimized out>, str=...) at
>>> /var/gcc/reghunt/master/gcc/d/dmd/root/stringtable.d:291
>>
>> Yeah, I don't see how that could trigger, as the value of `i` is always
>> adjusted to `i &= (table.length - 1)` (it uses quadratic probing to search
>> the hash table).
>>
>> The logic of the compiler doesn't appear to have changed, but the data
>> layout may have, so I'm suspecting an issue that was always there has
>> now surfaced to the fore.
>>
>
> Yes, this is data related. The DSO registry picks up nothing in the
> miscompiled stage2 compiler, leaving all data uninitialized. The stage1
> compiler works, and runs all module constructors ahead of compilation.
>
Ohh, backtrack on that, analysis is correct, but it is a compiler regression.
The TARGET_D_MINFO_SECTION macros are in elfos.h, which of course no
longer get pulled in to sol2-d.cc after I removed the tm.h include.
Re-adding these two ought to fix the bootstrap for you.
#include "tm.h"
#include "memmodel.h"
Iain