OPTLINK needs to die.
Tom S
h3r3tic at remove.mat.uni.torun.pl
Thu Feb 19 19:45:44 PST 2009
Walter Bright wrote:
> The problem appears to be that optlink cannot deal correctly with weak
> references. I've modified the compiler to not emit weak references, and
> the problem goes away. It's not a perfect fix, but it works.
With the modified compiler, does the following link? If so, is the
output correct?
----
module a;
import c;
alias C!(int) aC;
import b;
extern(C) int printf(char*, ...);
void main() {
printf("&aC.x == %x"\n, &aC.x);
printf("&bC.x == %x"\n, &bC.x);
assert (&aC.x is &bC.x);
}
----
module b;
import c;
alias C!(int) bC;
----
module c;
template C(T) {
int x;
}
----
dmd -c a.d
dmd -c b.d
dmd -c c.d
dmd a.obj b.obj c.obj
a.exe
----
I'm getting:
&aC.x == 419c30
&bC.x == 419c30
I'm afraid that it might refuse to link and then even if OPTLINK allowed
multiple strong symbols of the same name, I'd expect the assertion to
fail. Aren't weak symbols essential to properly handling templates?
Of course compiling the modules together causes only one symbol to be
emitted for the template instantiations. Yet this is not an option for a
larger project, since compilation times and memory usage can get rather
high.
--
Tomasz Stachowiak
http://h3.team0xf.com/
h3/h3r3tic on #D freenode
More information about the Digitalmars-d
mailing list