Thread overview
Repost: Linker bug still causing headaches (many test cases)
May 27, 2004
Daniel Horn
May 31, 2004
Walter
May 31, 2004
hellcatv
May 31, 2004
Andy Friesen
May 31, 2004
hellcatv
May 27, 2004
Too many functions or too many member functions or too many template
instantiations of a single class crash the linker (Unexpected OPTLINK Termination at EIP=0044C37B)

In this case merely increasing the number of template instantiations breaks the linker--so I could have my vector definition in one file then instantiate it too many places in another file, and it would not let me compile my (tiny) instantiator file and crash.

The program I'm trying to compile is a Cg compatability lib, and when I add a new instantiation I have to always make sure my program doesn use one of the other instantiations, and it's really depressing to be required disable doubles just to be able to use rationals to maintain dmd compatability (gdc always works):

http://graphics.stanford.edu/~danielrh/vec.d

you can stop the crash by taking out useful aliases by setting

dmd -version=DontCrash vec.d


the following is the most simple crash:
http://graphics.stanford.edu/~danielrh/manyfuncs.d

the following one is a struct with only a few thousand member functions (my last post showed that member functions and normal functions can both cause such a linker crash--so it's not just because I have a heinous number of members).
http://graphics.stanford.edu/~danielrh/close.d

setting version=DontCrash on the following one will stop the crash
http://graphics.stanford.edu/~danielrh/sclass.d
in sclass you can move the int main() into another file and watch it crash depending on how many of the template instantiations you make.

May 31, 2004
This happens when there are more than 16,000 fixups in a single .obj. Unfortunately, this isn't fixable at the moment.


May 31, 2004
In article <c9eajd$1sgn$2@digitaldaemon.com>, Walter says...
>
>This happens when there are more than 16,000 fixups in a single .obj. Unfortunately, this isn't fixable at the moment.
>
>
is there a way you could make the compiler generate more than 1 obj per file
(i.e. for multiple template instantiations)
I suspect mixins would have the same problem... basically I want to generate too
much code per struct


May 31, 2004
hellcatv@hotmail.com wrote:
> In article <c9eajd$1sgn$2@digitaldaemon.com>, Walter says...
> 
>>This happens when there are more than 16,000 fixups in a single .obj.
>>Unfortunately, this isn't fixable at the moment.
>>
>>
> 
> is there a way you could make the compiler generate more than 1 obj per file
> (i.e. for multiple template instantiations)
> I suspect mixins would have the same problem... basically I want to generate too
> much code per struct

Maybe try using the OpenWatcom linker instead.

http://cmeerw.org/prog/owtools/

 -- andy
May 31, 2004
In article <c9ejdd$297m$1@digitaldaemon.com>, Andy Friesen says...
>
>hellcatv@hotmail.com wrote:
>> In article <c9eajd$1sgn$2@digitaldaemon.com>, Walter says...
>> 
>>>This happens when there are more than 16,000 fixups in a single .obj. Unfortunately, this isn't fixable at the moment.
>>>
>>>
>> 
>> is there a way you could make the compiler generate more than 1 obj per file
>> (i.e. for multiple template instantiations)
>> I suspect mixins would have the same problem... basically I want to generate too
>> much code per struct
>
>Maybe try using the OpenWatcom linker instead.
>
>http://cmeerw.org/prog/owtools/
>
>  -- andy

thanks for the pointer, but no go:

yet
Open Watcom Linker Version 1.1(DMC)
Portions Copyright (c) 1985-2002 Sybase, Inc. All Rights Reserved.
Source code is available under the Sybase Open Watcom Public License.
See http://www.openwatcom.org/ for details.
WLINK>loading object files
searching libraries
Error! E3002: ** internal ** - format not decided

does that mean anything to you?