[PATCH] D126694: [C++20][Modules] Implementation of GMF decl elision.

Richard Smith - zygoloid via Phabricator via cfe-commits cfe-commits at lists.llvm.org
Fri Jul 1 18:56:54 PDT 2022


rsmith added inline comments.


================
Comment at: clang/include/clang/Sema/Sema.h:2275-2276
 
+  llvm::SmallPtrSet<const Decl *, 32> SeenDecls;
+  llvm::SmallPtrSet<const clang::Type *, 32> SeenTypes;
+
----------------
These names seem too general to live directly in `Sema`.


================
Comment at: clang/include/clang/Sema/Sema.h:2278
+
+  /// Examine a type, unwrapping ay decls that might be in the GMF.
+  void findGMFReachableDeclsForType(const Type *T);
----------------



================
Comment at: clang/lib/Sema/SemaModule.cpp:916-920
+            markGMFDeclsReachableFrom(Target, /*MakeVisible*/ true);
+          }
+        } else {
+          markGMFDeclsReachableFrom(Child, /*MakeVisible*/ true);
+        }
----------------
Do we need the special `MakeVisible` handling here? I would have thought that it would be sufficient for `Child` itself to be visible. Making the target of a using declaration visible seems like it would do the wrong thing for a case like:

```
module;
int f();
export module M;
namespace N { export using ::f; }
```

```
import M;
int a = f(); // should be an error, ::f should not be visible
int b = N::f(); // should be OK, UsingShadowDecl is visible
```

I wonder if we need any special handling here at all -- if the GMF decls are referenced by something in an `export` block, then I'd have expected they'll already be marked as used and that marking would have marked them as reachable.


================
Comment at: clang/lib/Sema/SemaModule.cpp:1024-1036
+  // Only visit each Decl once.
+  if (!SeenDecls.insert(Orig).second)
+    return;
+
+  // Do not alter the ownership unless it is ModuleDiscardable.
+  if (Orig->isModuleDiscardable()) {
+    assert(Orig->getOwningModule() &&
----------------
Instead of storing a `SeenDecls` set and checking it here, is it feasible to check whether we're transitioning this declaration from discardable to retained, and only doing the work below if so?


Repository:
  rG LLVM Github Monorepo

CHANGES SINCE LAST ACTION
  https://reviews.llvm.org/D126694/new/

https://reviews.llvm.org/D126694



More information about the cfe-commits mailing list