[Lldb-commits] [clang] [lldb] [C++20] [Modules] Support module level lookup (PR #122887)
Chuanqi Xu via lldb-commits
lldb-commits at lists.llvm.org
Tue Jan 14 06:36:41 PST 2025
================
@@ -145,12 +146,17 @@ class ExternalASTSource : public RefCountedBase<ExternalASTSource> {
/// Find all declarations with the given name in the given context,
/// and add them to the context by calling SetExternalVisibleDeclsForName
/// or SetNoExternalVisibleDeclsForName.
+ /// \param NamedModule, when this is set the external module local
+ /// declarations within the same module of \param NamedModule will be found
+ /// too. The \param NamedModule may be different than the owning module of
+ /// \param DC since the same namespace can appear in multiple module units.
----------------
ChuanqiXu9 wrote:
I updated the description.
> My understanding of modules is probably insufficient but what are "external module local declarations within the same module"?
If you're still interested, I can explain this to you with a few examples:
```
// a.cppm
export module a;
int a() { return 43; } ; // a module-local declaration.
// a-impl.cc
module a:impl;
int use() { return a(); } // valid. Since we're in the same module `a` with `a()`.
// use.cc
import a;
int get() { return a(); } // error: not in the same module with a()
```
The function `a()` in `a.cppm` has module linkage. And it is only visible to module `a`. So I called it as a `module local declaration`. And for `a-impl.cc`, from the perspective of compilation, the declaration `a()` is external. So it is `external module local declaration`. Then for `use()` in `a-impl.cc` and `a` in `a.cppm`, they are in the same module. So, for `use()` in `a-impl.cc`, `a()` is "an external module local declaration within the same module".
But given this may be confusing, I used the new description.
https://github.com/llvm/llvm-project/pull/122887
More information about the lldb-commits
mailing list