Why is mangling different for separate compilation?

Atila Neves via Digitalmars-d digitalmars-d at puremagic.com
Fri Feb 26 04:45:35 PST 2016


foo.d:
-----
void main() {
     import bar;
     foreach(ut; __traits(getUnitTests, bar)) ut();
}
-----

bar.d:
-----
unittest { assert(1 == 2); }
-----


# compile all at once
dmd -unittest foo.d bar.d # fine


# compile separately
dmd -c -unittest foo.d
dmd -c -unittest bar.d
dmd foo.o bar.o
foo.o:foo.d:function _Dmain: error: undefined reference to 
'_D3bar16__unittestL2_531FZv'
collect2: error: ld returned 1 exit status
--- errorlevel 1


objdump shows me that bar.o has a '_D3bar14__unittestL2_1FZv' 
symbol, which is nearly, but not quite, what foo.o is trying to 
call.

Huh?

Atila


More information about the Digitalmars-d mailing list