Thread overview |
---|
December 09, 2008 [Issue 2500] New: template struct methods are left unresolved if imported from multiple modules | ||||
---|---|---|---|---|
| ||||
http://d.puremagic.com/issues/show_bug.cgi?id=2500 Summary: template struct methods are left unresolved if imported from multiple modules Product: D Version: 1.037 Platform: PC OS/Version: Windows Status: NEW Severity: normal Priority: P2 Component: DMD AssignedTo: bugzilla@digitalmars.com ReportedBy: 2korden@gmail.com The smallest test case I could find that fails for both D1 and D2 follows: module A; import B; import C; public class A { T!(A) c; } void main() { A a = new A(); a.c.foo(); } // B.d module B; import A; import C; class B { T!(A) t; } // C.d module C; struct T(Type) { void foo(){} } If anyone knows a workaround *please* let me know. -- |
December 09, 2008 [Issue 2500] template struct methods are left unresolved if imported from multiple modules | ||||
---|---|---|---|---|
| ||||
Posted in reply to d-bugmail | http://d.puremagic.com/issues/show_bug.cgi?id=2500 ------- Comment #1 from 2korden@gmail.com 2008-12-08 23:44 ------- Oopps, I forgot to add some importannt information... The compilation command sequence I used is: # dmd a -c // ok # dmd b -c // ok # dmd c -c // ok # dmd a.obj b.obj c.obj // link error Error 42: Symbol Undefined _D1C12__T1TTC1A1AZ1T3fooMFZv --- errorlevel 1 -- |
December 09, 2008 [Issue 2500] template struct methods are left unresolved if imported from multiple modules | ||||
---|---|---|---|---|
| ||||
Posted in reply to d-bugmail | http://d.puremagic.com/issues/show_bug.cgi?id=2500 schveiguy@yahoo.com changed: What |Removed |Added ---------------------------------------------------------------------------- OS/Version|Windows |All ------- Comment #2 from schveiguy@yahoo.com 2008-12-09 08:30 ------- Confirmed on Linux as well. Note that the following commands work ok: dmd A.d B.d C.d or dmd -c A.d B.d C.d dmd A.o B.o C.o It seems that in the first (without -c), the symbol is defined in A.o In the second case, now B.o has the symbol defined, whereas if you compile B.d separate, it is not defined. There is definitely a bug if compiling the files into objects separately generates different code than compiling them in to objects in one line. -- |
December 11, 2008 [Issue 2500] template struct methods are left unresolved if imported from multiple modules | ||||
---|---|---|---|---|
| ||||
Posted in reply to d-bugmail | http://d.puremagic.com/issues/show_bug.cgi?id=2500 ------- Comment #3 from bugzilla@digitalmars.com 2008-12-11 02:17 ------- What's happening is A.d thinks that T!(int) is instantiated by B, and B thinks it is instantiated in A. (T!(A) can be T!(int), the A just confuses things.) The workaround is: 1. compile A and B on the same command, instead of separately. 2. structure A and B so they don't import each other. -- |
December 25, 2008 [Issue 2500] template struct methods are left unresolved if imported from multiple modules | ||||
---|---|---|---|---|
| ||||
Posted in reply to d-bugmail | http://d.puremagic.com/issues/show_bug.cgi?id=2500 bugzilla@digitalmars.com changed: What |Removed |Added ---------------------------------------------------------------------------- Status|NEW |RESOLVED Resolution| |FIXED ------- Comment #4 from bugzilla@digitalmars.com 2008-12-25 04:39 ------- Fixed dmd 1.038 amd 2.022 -- |
January 08, 2009 [Issue 2500] template struct methods are left unresolved if imported from multiple modules | ||||
---|---|---|---|---|
| ||||
Posted in reply to d-bugmail | http://d.puremagic.com/issues/show_bug.cgi?id=2500 wbaxter@gmail.com changed: What |Removed |Added ---------------------------------------------------------------------------- Status|RESOLVED |REOPENED Resolution|FIXED | ------- Comment #5 from wbaxter@gmail.com 2009-01-07 18:11 ------- Fix was reverted in 1.039 because it was causing hideously slow compile times for some code. -- |
Copyright © 1999-2021 by the D Language Foundation