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