Compiler bug?

Steven Schveighoffer schveiguy at yahoo.com
Wed Jul 16 12:24:48 PDT 2008


"Jarrett Billingsley"wrote
> "Steven Schveighoffer" wrote
>>I think I found a bug in the compiler.  This bug seems to have affected 
>>the two versions I tried of dmd (1.024 and 1.033), so it's been in there a 
>>while.
>>
>> However, it's a very weird bug.
>>
>> I have a function that looks like this (for those who are interested, 
>> this is from tango.io.Path):
>>
>> Time modified (char[] name)
>> {
>>        return timeStamps(name).modified;
>> }
>>
>> the timeStamps function returns a collection of 3 Time structs, which 
>> indicate the modified, created, and accessed time for a file named 
>> 'name'.
>>
>> However, the result is corrupt.  I know this because I'm printing the 
>> time in the timeStamps function, and it is different than the time 
>> returned.
>>
>> In examining the entire flow of the code, I can find nothing wrong.
>>
>> This only happens with the -inline switch of dmd.
>>
>> If I rewrite the function in the following way, the problem goes away(!):
>>
>> Time modified (char[] name)
>> {
>>  auto ts = timeStamps(name);
>>        return ts.modified;
>> }
>>
>> Now, I wanted to create a minimal case (without all of Tango that this 
>> program uses), but I'm having difficulty.  So I wanted to inspect the 
>> assembly, but I'm on windows, and there is no obj2asm in the dmd 
>> directory. So I can't figure out what the compiler is doing differently. 
>> I'm not sure where to begin.  Walter, is this enough info for you to look 
>> into this?  I can send you the object file and source file if you want to 
>> see how dmd generated the code.
>
> You have to buy the EUP to get the windows version of obj2asm, lol.

sweet deal :)  So if Walter wants me to debug this, maybe he can send me a 
copy of obj2asm for free :)

>
> Another way to disassemble is to compile in debug info with -g, and step 
> through in a debugger, like WinDbg (shudder), ddbg (OK), or VS6 (yay). 
> I'm not sure how -g behaves with -inline though.

Yeah, I had lots of trouble with the debugger.  But the printout alone is 
proof that it is failing.

>
> But if it makes you feel any better (?), this is definitely a 
> ug.  -inline should *never* change the behavior of code.  Bugzilla it if 
> it hasn't been already.

OK, so should I just attach all tango source used to the bug report? :P

I suppose I could try and whittle it down.

I'm just really surprised this is the first case.  It makes me think that 
there is something really 'moons-are-aligned-properly' about the way 
everything is compiled.

-Steve 




More information about the Digitalmars-d-learn mailing list