tools icon indicating copy to clipboard operation
tools copied to clipboard

rdmd does not discover all dependencies

Open dlang-bugzilla-migration opened this issue 3 years ago • 0 comments

Transferred from: https://issues.dlang.org/show_bug.cgi?id=18079

User @marler8997 reported (2017-Dec-14 16:25:16):

Related to (https://issues.dlang.org/show_bug.cgi?id=8858). That bug was created because dmd would not discover all the imported modules when compiling a single file. However, this was closed as a "non issue" because the compiler is not "supposed" to discover all dependencies when compiling a single module. If an application wants to discover all imported modules, then they can use the "-deps" flag to force the compiler to do so.

rdmd currently uses this "import discovery" to obtain a list of all the modules it needs to compile. However, rdmd does not use the "-deps" flag when discovering dependencies which means that in some cases it will be missing modules to compile, i.e.

main.d

import foo;
void main() { printx(); }

foo.d

module foo;
void printx() { import std.stdio; import bar : x; writefln("x is %s", x); }

bar.d

module bar;
int x = 42;

rdmd main.d

this could be fixed by modifying rdmd to use the "-deps" flag, however, this has a significant performance cost. Another solution proposed is to integrate the "compile imports" feature (https://github.com/dlang/dmd/pull/7099) and modify rdmd to use that feature instead (https://github.com/dlang/tools/pull/271).

User @marler8997 responded (2018-Jan-10 03:06:04):

This bug should be fixed with this PR.

https://github.com/dlang/tools/pull/271

User @marler8997 responded (2018-Jan-16 17:39:51):

https://github.com/dlang/tools/pull/271

User @marler8997 responded (2018-Jan-20 02:04:42):

https://github.com/dlang/tools/pull/271 was reverted