[cfe-dev] Modules TS: binary module interface dependencies

Boris Kolpackov via cfe-dev cfe-dev at lists.llvm.org
Tue Jun 27 02:53:05 PDT 2017


I am trying to understand how Clang's Modules TS will work so that we
have a general-enough model in the build system.

Consider these two modules and a consumer:

// module core
export module core;
export void f (int);

// module extra
export module extra;
import core;
export inline void g (int x) {f (x);}

// consumer
import extra;
int main () {g ();}

Currently, when compiling the consumer (with -fmodules-ts), Clang only
requires the binary module interface (BMI) for extra. In contrast, VC
and GCC require both extra and core (note: even though core is not
re-exported from extra).

The Clang's model is definitely more desirable from the build system's
perspective, especially for distributed compilation. So I wonder if this
is accidental and will change in the future or if this is something that
Clang is committed to, so to speak?

Here is a more interesting variant of the extra module that highlights
some of the issues to consider:

// module extra
export module extra;
import core;
export template <typename T> void g (T x) {f (x);}

Now f() can only be resolved (via ADL) when g() is instantiated.

Thanks,
Boris


More information about the cfe-dev mailing list