[C++20][Modules] Introduce an implementation module.
We need to be able to distinguish individual TUs from the same module in cases where TU-local entities either need to be hidden (or, for some cases of ADL in template instantiation, need to be detected as exposures). This creates a module type for the implementation which implicitly imports its primary module interface per C++20: [module.unit/8] 'A module-declaration that contains neither an export-keyword nor a module-partition implicitly imports the primary module interface unit of the module as if by a module-import-declaration. Implementation modules are never serialized (-emit-module-interface for an implementation unit is diagnosed and rejected). Differential Revision: https://reviews.llvm.org/D126959
This commit is contained in:
@@ -548,6 +548,8 @@ void CodeGenModule::Release() {
|
||||
GlobalTopLevelStmtBlockInFlight = {nullptr, nullptr};
|
||||
}
|
||||
|
||||
// Module implementations are initialized the same way as a regular TU that
|
||||
// imports one or more modules.
|
||||
if (CXX20ModuleInits && Primary && Primary->isInterfaceOrPartition())
|
||||
EmitCXXModuleInitFunc(Primary);
|
||||
else
|
||||
|
||||
Reference in New Issue
Block a user