Bug 18079 – rdmd does not discover all dependencies

Status
RESOLVED
Resolution
MOVED
Severity
normal
Priority
P1
Component
tools
Product
D
Version
D2
Platform
All
OS
All
Creation time
2017-12-14T16:25:16Z
Last change time
2021-01-09T11:11:47Z
Assigned to
No Owner
Creator
Jonathan Marler

Comments

Comment #0 by johnnymarler — 2017-12-14T16:25:16Z
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).
Comment #1 by johnnymarler — 2018-01-10T03:06:04Z
This bug should be fixed with this PR. https://github.com/dlang/tools/pull/271
Comment #2 by johnnymarler — 2018-01-16T17:39:51Z
Comment #3 by johnnymarler — 2018-01-20T02:04:42Z
Comment #4 by pro.mathias.lang — 2021-01-09T11:11:47Z