[clang] [Fix] Speedup -Wunsafe-buffer-usage when using clang modules. (PR #127161)

Takuto Ikuta via cfe-commits cfe-commits at lists.llvm.org
Sun Feb 16 20:56:03 PST 2025


================
@@ -2546,14 +2546,27 @@ static void flushDiagnostics(Sema &S, const sema::FunctionScopeInfo *fscope) {
 class CallableVisitor : public DynamicRecursiveASTVisitor {
 private:
   llvm::function_ref<void(const Decl *)> Callback;
+  const Module *const TUModule;
 
 public:
-  CallableVisitor(llvm::function_ref<void(const Decl *)> Callback)
-      : Callback(Callback) {
+  CallableVisitor(llvm::function_ref<void(const Decl *)> Callback,
+                  const Module *const TUModule)
+      : Callback(Callback), TUModule(TUModule) {
     ShouldVisitTemplateInstantiations = true;
     ShouldVisitImplicitCode = false;
   }
 
+  bool TraverseDecl(Decl *Node) override {
+    // For performance reasons, only validate the current translation unit's
+    // module, and not modules it depends on.
+    // See https://issues.chromium.org/issues/351909443 for details.
+    if (Node && Node->getOwningModule() == TUModule) {
+      return DynamicRecursiveASTVisitor::TraverseDecl(Node);
+    } else {
----------------
atetubou wrote:

nit: you can remove this else to reduce the nest.
```suggestion
    }
```
ref: https://testing.googleblog.com/2017/06/code-health-reduce-nesting-reduce.html

https://github.com/llvm/llvm-project/pull/127161


More information about the cfe-commits mailing list