Unexpected behavior of dmd -H switch
    Sergey Gromov 
    snake.scaly at gmail.com
       
    Sat Aug 23 16:19:52 PDT 2008
    
    
  
I'm getting strange results when using -H switch with DMD 2.018.  
Consider an example:
---- begin test.d
uint foo(uint x) { return x & 0xE000_0000; }
---- end test.d
Nothing complex.  Now, compile it using "dmd -c -H test.d".  The 
resulting .di is:
---- begin test.di
// D import file generated from 'test.d'
uint foo(uint x)
{
return x & -536870912u;
}
---- end test.di
Things start getting funny.  A negative unsigned literal?  OK I'm going 
to test if this compiles.  The test file is:
---- begin test2.d
import test;
import std.stdio;
void main() { writeln(foo(0xb000_0000)); }
---- end test2.d
Compile it using "dmd test2.d" and get "Error 42: Symbol Undefined 
_D4test3fooFkZk".  But the .di contains the full function body.  Isn't 
it for inlining?  Well, the "dmd test2.d test.o" compiles fine and 
executable gives the correct answer.  So the compiler is OK with a 
negative unsigned literal...
I expect that:
1. the constant should be 3758096384u
2. there should be no need in test.obj, or there should be no body for 
foo()
Could anybody clarify this?
-- 
SnakE
    
    
More information about the Digitalmars-d-learn
mailing list