Segfault with DMD optimization switch

Stephan stephan_schiffels at mac.com
Thu Jan 24 08:03:41 PST 2013


On Thursday, 24 January 2013 at 00:01:26 UTC, Walter Bright wrote:
> On 1/23/2013 2:15 PM, Stephan wrote:
>> What would be the prototypic short program that simulates 
>> referencing an out of
>> scope stack frame? It would be great to see an example that 
>> produces a
>> deterministic segfault.
>
>
> Just return a pointer to a local (first passing it through 
> another function in order to hide what you're doing from the 
> compiler).
>
> btw, bug 8832 is an example of one.

OK, I spent quite a while to narrow it down, and I definitely can 
say that there is a compiler bug related to the optimization 
switch.
I filed an issue: (9387).

I could not anymore reproduce a seg-fault, but even worse: The 
optimization switch changes the behavior of the program!, I 
declared it as "major", since it is not clear whether this bug is 
even detectable if it doesn't cause a seg-fault. It just changes 
the behavior, so it seems to me very dangerous!

The program I attached in the bug-report is an implementation of 
a minimization routine from Numerical Recipes, 3rd edition. This 
bug is possibly caused by having a large number of local 
variables, which are somehow written out into memory before moved 
into registers or something. I looked at the assembly with a 
colleague but we couldn't find something conclusive.

I hope that you guys can reproduce the bug (simply run "rdmd -O 
brent_test.d" and compare it with "rdmd brent_test.d") on dmd 
2.061. There is nothing exotic in the source-code, only 
assignments. No pointers, no references, no structs. It must be a 
compiler bug.

Stephan



More information about the Digitalmars-d mailing list