digitalmars.D - GDC bug: link error with cross-module templated AA member function
- H. S. Teoh (33/33) Feb 15 2012 I've found a bug in GDC; just wanted to check on the forum to see if the
- Trass3r (1/1) Feb 15 2012 report @ the bitbucket project site.
I've found a bug in GDC; just wanted to check on the forum to see if the bug has already been reported. Here's the minimal test case: ----abc.d---- int[string] map; void func(bool B)(string x) { map.get(x, 0); } ----test.d---- import std.stdio; import abc; void main() { func!true("abc"); } The linker complains (in encrypted Klingon ;-)) that it can't find map.get(): $ gdc-4.6 *.d /tmp/ccprmf4H.o: In function `_D3abc12__T4funcVb1Z4funcFAyaZv': test.d:(.text._D3abc12__T4funcVb1Z4funcFAyaZv[_D3abc12__T4funcVb1 4funcFAyaZv]+0x54): undefined reference to `_D6object28__T16AssociativeArrayTAyaTiZ16AssociativeArray3getMFAyaLiZi' collect2: ld returned 1 exit status $ gdc-4.6 --version gdc-4.6 (Debian 4.6.2-4) 4.6.2 Copyright (C) 2011 Free Software Foundation, Inc. This is free software; see the source for copying conditions. There is NO warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. The problem doesn't happen if the compile-time argument to func() is removed, or if map and func is put in the same module as main(). It doesn't happen if map[x] is used instead of map.get(x,0). It seems that something is being overlooked when instantiating a template imported from another module that references an AA method. This problem doesn't happen with dmd. T -- Curiosity kills the cat. Moral: don't be the cat.
Feb 15 2012