llvmbot wrote:
<!--LLVM PR SUMMARY COMMENT--> @llvm/pr-subscribers-clang Author: Mikhail R. Gadelha (mikhailramalho) <details> <summary>Changes</summary> This patch also updates safeGetName to get names from operators without hitting an assertion --- Full diff: https://github.com/llvm/llvm-project/pull/91068.diff 2 Files Affected: - (modified) clang/lib/StaticAnalyzer/Checkers/WebKit/ASTUtils.h (+6-5) - (modified) clang/lib/StaticAnalyzer/Checkers/WebKit/UncountedLocalVarsChecker.cpp (+23) ``````````diff diff --git a/clang/lib/StaticAnalyzer/Checkers/WebKit/ASTUtils.h b/clang/lib/StaticAnalyzer/Checkers/WebKit/ASTUtils.h index e35ea4ef05dd17..d9049fea897be1 100644 --- a/clang/lib/StaticAnalyzer/Checkers/WebKit/ASTUtils.h +++ b/clang/lib/StaticAnalyzer/Checkers/WebKit/ASTUtils.h @@ -67,12 +67,13 @@ template <typename T> std::string safeGetName(const T *ASTNode) { if (!ND) return ""; - // In case F is for example "operator|" the getName() method below would - // assert. - if (!ND->getDeclName().isIdentifier()) - return ""; + if (const auto *Identifier = ND->getIdentifier()) + return Identifier->getName().str(); - return ND->getName().str(); + std::string Name; + llvm::raw_string_ostream OS(Name); + ND->printName(OS); + return OS.str().empty() ? "" : OS.str(); } } // namespace clang diff --git a/clang/lib/StaticAnalyzer/Checkers/WebKit/UncountedLocalVarsChecker.cpp b/clang/lib/StaticAnalyzer/Checkers/WebKit/UncountedLocalVarsChecker.cpp index 6036ad58cf253c..2d33e63f66ad7c 100644 --- a/clang/lib/StaticAnalyzer/Checkers/WebKit/UncountedLocalVarsChecker.cpp +++ b/clang/lib/StaticAnalyzer/Checkers/WebKit/UncountedLocalVarsChecker.cpp @@ -225,11 +225,34 @@ class UncountedLocalVarsChecker } } + bool isVarIsAVMRefType(const VarDecl *V) const { + auto* type = V->getType()->getAs<LValueReferenceType>(); + if(!type) + return false; + + auto ClassDecl = type->getPointeeType()->getUnqualifiedDesugaredType()->getAsCXXRecordDecl(); + if (!ClassDecl) + return false; + + auto *NsDecl = ClassDecl->getParent(); + if (!NsDecl || !isa<NamespaceDecl>(NsDecl)) + return false; + + auto ClsNameStr = safeGetName(ClassDecl); + auto NamespaceName = safeGetName(NsDecl); + + // FIXME: These should be implemented via attributes. + return NamespaceName == "JSC" && ClsNameStr == "VM"; + } + bool shouldSkipVarDecl(const VarDecl *V) const { assert(V); if (!V->isLocalVarDecl()) return true; + if (isVarIsAVMRefType(V)) + return true; + return false; } `````````` </details> https://github.com/llvm/llvm-project/pull/91068 _______________________________________________ cfe-commits mailing list cfe-commits@lists.llvm.org https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits