www.digitalmars.com         C & C++   DMDScript  

digitalmars.D - GDC bug: link error with cross-module templated AA member function

reply "H. S. Teoh" <hsteoh quickfur.ath.cx> writes:
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
parent Trass3r <un known.com> writes:
report   the bitbucket project site.
Feb 15 2012