================
@@ -3912,3 +3896,56 @@ void clang::checkUnsafeBufferUsage(const Decl *D,
}
}
}
+
+void clang::checkUnsafeBufferUsage(const Decl *D,
+ UnsafeBufferUsageHandler &Handler,
+ bool EmitSuggestions) {
+#ifndef NDEBUG
+ Handler.clearDebugNotes();
+#endif
+
+ assert(D);
+
+ SmallVector<Stmt *> Stmts;
+
+ if (const auto *FD = dyn_cast<FunctionDecl>(D)) {
+ // We do not want to visit a Lambda expression defined inside a method
+ // independently. Instead, it should be visited along with the outer
method.
+ // FIXME: do we want to do the same thing for `BlockDecl`s?
+ if (const auto *MD = dyn_cast<CXXMethodDecl>(D)) {
+ if (MD->getParent()->isLambda() && MD->getParent()->isLocalClass())
+ return;
+ }
+
+ for (FunctionDecl *FReDecl : FD->redecls()) {
+ if (FReDecl->isExternC()) {
+ // Do not emit fixit suggestions for functions declared in an
+ // extern "C" block.
+ EmitSuggestions = false;
+ break;
+ }
+ }
+
+ Stmts.push_back(FD->getBody());
+
+ if (const auto *ID = dyn_cast<CXXConstructorDecl>(D)) {
----------------
ziqingluo-90 wrote:
Is this equivalent to override `traverseCXXCtorInitializer` in
`MatchDescendantVisitor` above (just like how you override `
TraverseCXXDefaultInitExpr`)?
https://github.com/llvm/llvm-project/pull/91991
_______________________________________________
cfe-commits mailing list
[email protected]
https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits