[all-commits] [llvm/llvm-project] ce2257: [C++20] [Modules] Judge current module correctly
Chuanqi Xu via All-commits
all-commits at lists.llvm.org
Wed Apr 20 20:18:02 PDT 2022
Branch: refs/heads/main
Home: https://github.com/llvm/llvm-project
Commit: ce2257d69fd02d0c34164ce3de9ab8dbe6991e0c
https://github.com/llvm/llvm-project/commit/ce2257d69fd02d0c34164ce3de9ab8dbe6991e0c
Author: Chuanqi Xu <yedeng.yd at linux.alibaba.com>
Date: 2022-04-21 (Thu, 21 Apr 2022)
Changed paths:
M clang/include/clang/Basic/Module.h
M clang/include/clang/Sema/Sema.h
M clang/lib/Sema/SemaLookup.cpp
A clang/test/CXX/module/module.import/p2.cpp
M clang/test/Modules/cxx20-10-1-ex2.cpp
Log Message:
-----------
[C++20] [Modules] Judge current module correctly
Now the implementation would accept following code:
```
//--- impl.cppm
module M:impl;
class A {};
//--- M.cppm
export module M;
import :impl;
//--- Use.cpp
import M;
void test() {
A a; // Expected error. A is not visible here.
}
```
which is clearly wrong. The root cause is the implementation of
`isInCurrentModule` would return true if the module is a partition! So
in the above example, although Use.cpp is not a module unit,
`isInCurrentModule ` would still return true when the compiler tries to
see if the owning module of `A` is the current module. I believe this is
an oversight. This patch tries to fix this problem.
Reviewed By: iains
Differential Revision: https://reviews.llvm.org/D123837
More information about the All-commits
mailing list