diff options
author | Iain Sandoe <iain@sandoe.co.uk> | 2023-06-12 20:38:02 +0100 |
---|---|---|
committer | Iain Sandoe <iain@sandoe.co.uk> | 2023-06-25 08:33:39 +0100 |
commit | b37233a253f30e4bd5f040d598826df443293bee (patch) | |
tree | 82d6ff3f6f8eacb0b770e8cc337decb8f3155227 /clang/lib/Sema/SemaModule.cpp | |
parent | 2a61ceddb30aaed291317795e3183371e8cf3d7a (diff) | |
download | llvm-b37233a253f30e4bd5f040d598826df443293bee.zip llvm-b37233a253f30e4bd5f040d598826df443293bee.tar.gz llvm-b37233a253f30e4bd5f040d598826df443293bee.tar.bz2 |
[C++20][Modules] Complete implementation of module.import p7.
The following test fails to compile TU b.cpp because we are not making the transitively imported modules visible (per [module.import]/p7)
```
a.cppm:
export module a;
export int foo() {
return 42;
}
b.cppm:
export module b;
import a;
export int bar();
b.cpp:
module b;
int bar() {
return foo();
}
clang++ -c -std=c++2b -fmodule-output a.cppm
clang++ -c -std=c++2b -fmodule-output -fprebuilt-module-path=. b.cppm
clang++ -c -std=c++2b -fprebuilt-module-path=. b.cpp
b.cpp:4:12: error: declaration of 'foo' must be imported from module 'a' before it is required
return foo();
```
This is fixed by the following patch (which also addresses a FIXME in basic.def.odr/p6.cppm).
Differential Revision: https://reviews.llvm.org/D152746
Diffstat (limited to 'clang/lib/Sema/SemaModule.cpp')
-rw-r--r-- | clang/lib/Sema/SemaModule.cpp | 1 |
1 files changed, 1 insertions, 0 deletions
diff --git a/clang/lib/Sema/SemaModule.cpp b/clang/lib/Sema/SemaModule.cpp index 9b2982e..2ffb0db 100644 --- a/clang/lib/Sema/SemaModule.cpp +++ b/clang/lib/Sema/SemaModule.cpp @@ -397,6 +397,7 @@ Sema::ActOnModuleDecl(SourceLocation StartLoc, SourceLocation ModuleLoc, if (Interface) { VisibleModules.setVisible(Interface, ModuleLoc); + VisibleModules.makeTransitiveImportsVisible(Interface, ModuleLoc); // Make the import decl for the interface in the impl module. ImportDecl *Import = ImportDecl::Create(Context, CurContext, ModuleLoc, |