Bug 2402 – [module] Type is not found if accessed via renamed import

Status
RESOLVED
Resolution
WORKSFORME
Severity
normal
Priority
P2
Component
dmd
Product
D
Version
D2
Platform
x86
OS
Windows
Creation time
2008-10-08T15:10:00Z
Last change time
2015-06-09T01:20:16Z
Keywords
diagnostic
Assigned to
nobody
Creator
2korden

Comments

Comment #0 by 2korden — 2008-10-08T15:10:27Z
module m1; struct Foo { int x; } module m2; struct Foo { int x; int y; } module m; import M1 = m1; import M2 = x2; // line 4 import M2 = m2; // line 5 M2.Foo convert(M1.Foo foo) { M2.Foo result = void; result.x = foo.x; result.y = foo.y; return result; } m.d(7): Error: identifier 'Foo' of 'M2.Foo' is not defined m.d(7): Error: M2.Foo is used as a type Note that swapping lines 4 and 5 workarounds the issue. But there appears another issue: m.d(11): Error: no property 'y' for type 'Foo' Which one? Error should mention be M1.Foo instead of just Foo. (Shall I move it into separate enhancement issue?)
Comment #1 by smjg — 2008-11-24T10:35:33Z
The first thing it complains about should be that x2 is not found. Or if it is, that M2 is defined twice. I agree about your last comment. It should probably be (and might already be, but I'm not sure) filed as a separate issue.
Comment #2 by code — 2012-02-14T05:35:41Z
cat > m1.d << CODE module m1; struct Foo { int x; } CODE cat > m2.d << CODE module m2; struct Foo { int x; int y; } CODE cat > m.d << CODE module m; import M1 = m1; import M2 = x2; // line 4 import M2 = m2; // line 5 M2.Foo convert(M1.Foo foo) { M2.Foo result = void; result.x = foo.x; result.y = foo.y; return result; } CODE dmd -c m.d ---------- With dmd2.057: m.d(4): Error: module x2 is in file 'x2.d' which cannot be read