Bug 20229 – Importing a second module enables FQN sidestepping selective import

Status
NEW
Severity
normal
Priority
P3
Component
dmd
Product
D
Version
D2
Platform
x86
OS
Windows
Creation time
2019-09-19T07:38:52Z
Last change time
2024-12-13T19:05:39Z
Assigned to
No Owner
Creator
Simen Kjaeraas
Moved to GitHub: dmd#19622 →

Comments

Comment #0 by simen.kjaras — 2019-09-19T07:38:52Z
unittest { import std.complex : complex; static assert(!__traits(compiles, { alias a = std.complex.abs; })); } unittest { import std.complex : complex; import std.internal.test.uda; // module with no imports static assert(__traits(compiles, { alias a = std.complex.abs; })); } In the first block above, we can't refer to std.complex.abs, as it's not imported by the selective import statement. In the second block however, the presence of a second, non-selective, import statement makes std.complex.abs accessible again. Note that the module selected has no imports, and it's thus not a case of referring to imports in that imported module. Note also that the name of the second module is important - it needs to be in the same package as the first imported module. I tested with a module called `bar`, and the static assert correctly triggered, but renaming the module to std.bar (still an empty file) made it compile again.
Comment #1 by robert.schadek — 2024-12-13T19:05:39Z
THIS ISSUE HAS BEEN MOVED TO GITHUB https://github.com/dlang/dmd/issues/19622 DO NOT COMMENT HERE ANYMORE, NOBODY WILL SEE IT, THIS ISSUE HAS BEEN MOVED TO GITHUB