[clang] [alpha.webkit.UncountedLocalVarsChecker] Ignore local vars of JSC::VM& type (PR #91068)
mikhailramalho wrote: I opened this PR before we spoke offline, I'm closing it now 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
[clang] [alpha.webkit.UncountedLocalVarsChecker] Ignore local vars of JSC::VM& type (PR #91068)
https://github.com/mikhailramalho closed 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
[clang] [alpha.webkit.UncountedLocalVarsChecker] Ignore local vars of JSC::VM& type (PR #91068)
rniwa wrote: I'm not certain that we want to ignore all instances of VM& like this. It's certainly possible for some use of VM& to be unsafe. It might be better to suppress the warning explicitly instead. 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
[clang] [alpha.webkit.UncountedLocalVarsChecker] Ignore local vars of JSC::VM& type (PR #91068)
https://github.com/mikhailramalho updated https://github.com/llvm/llvm-project/pull/91068 >From a770060da101720ffddc033fd37db790eaa17710 Mon Sep 17 00:00:00 2001 From: "Mikhail R. Gadelha" Date: Sat, 4 May 2024 13:08:32 -0300 Subject: [PATCH] [alpha.webkit.UncountedLocalVarsChecker] Ignore local vars of JSC::VM& type This patch also updates safeGetName to get names from operators without hitting an assertion --- .../StaticAnalyzer/Checkers/WebKit/ASTUtils.h | 11 .../WebKit/UncountedLocalVarsChecker.cpp | 25 +++ 2 files changed, 31 insertions(+), 5 deletions(-) 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 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..2f5e8e139709f6 100644 --- a/clang/lib/StaticAnalyzer/Checkers/WebKit/UncountedLocalVarsChecker.cpp +++ b/clang/lib/StaticAnalyzer/Checkers/WebKit/UncountedLocalVarsChecker.cpp @@ -225,11 +225,36 @@ class UncountedLocalVarsChecker } } + bool isVarIsAVMRefType(const VarDecl *V) const { +auto *type = V->getType()->getAs(); +if (!type) + return false; + +auto ClassDecl = type->getPointeeType() + ->getUnqualifiedDesugaredType() + ->getAsCXXRecordDecl(); +if (!ClassDecl) + return false; + +auto *NsDecl = ClassDecl->getParent(); +if (!NsDecl || !isa(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; } ___ cfe-commits mailing list cfe-commits@lists.llvm.org https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits
[clang] [alpha.webkit.UncountedLocalVarsChecker] Ignore local vars of JSC::VM& type (PR #91068)
https://github.com/mikhailramalho updated https://github.com/llvm/llvm-project/pull/91068 >From dde31272c1599a699c49117c1612ae72d0491384 Mon Sep 17 00:00:00 2001 From: "Mikhail R. Gadelha" Date: Sat, 4 May 2024 13:08:32 -0300 Subject: [PATCH] [alpha.webkit.UncountedLocalVarsChecker] Ignore local vars of JSC::VM& type This patch also updates safeGetName to get names from operators without hitting an assertion --- .../StaticAnalyzer/Checkers/WebKit/ASTUtils.h | 11 + .../WebKit/UncountedLocalVarsChecker.cpp | 23 +++ 2 files changed, 29 insertions(+), 5 deletions(-) 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 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(); +if(!type) + return false; + +auto ClassDecl = type->getPointeeType()->getUnqualifiedDesugaredType()->getAsCXXRecordDecl(); +if (!ClassDecl) + return false; + +auto *NsDecl = ClassDecl->getParent(); +if (!NsDecl || !isa(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; } ___ cfe-commits mailing list cfe-commits@lists.llvm.org https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits
[clang] [alpha.webkit.UncountedLocalVarsChecker] Ignore local vars of JSC::VM& type (PR #91068)
mikhailramalho wrote: Hey @rniwa, if you want I can send the `safeGetName` changes in a separate patch. I was planning to unify this with `isMethodOnWTFContainerType` so there is some duplicated code here. I'll update the PR next week with some tests. 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
[clang] [alpha.webkit.UncountedLocalVarsChecker] Ignore local vars of JSC::VM& type (PR #91068)
github-actions[bot] wrote: :warning: C/C++ code formatter, clang-format found issues in your code. :warning: You can test this locally with the following command: ``bash git-clang-format --diff 76aa042dde6ba9ba57c680950f5818259ee02690 7f59654193385e78e1635c9bb2a627522f888b8d -- clang/lib/StaticAnalyzer/Checkers/WebKit/ASTUtils.h clang/lib/StaticAnalyzer/Checkers/WebKit/UncountedLocalVarsChecker.cpp `` View the diff from clang-format here. ``diff diff --git a/clang/lib/StaticAnalyzer/Checkers/WebKit/UncountedLocalVarsChecker.cpp b/clang/lib/StaticAnalyzer/Checkers/WebKit/UncountedLocalVarsChecker.cpp index 2d33e63f66..2f5e8e1397 100644 --- a/clang/lib/StaticAnalyzer/Checkers/WebKit/UncountedLocalVarsChecker.cpp +++ b/clang/lib/StaticAnalyzer/Checkers/WebKit/UncountedLocalVarsChecker.cpp @@ -226,11 +226,13 @@ public: } bool isVarIsAVMRefType(const VarDecl *V) const { -auto* type = V->getType()->getAs(); -if(!type) +auto *type = V->getType()->getAs(); +if (!type) return false; -auto ClassDecl = type->getPointeeType()->getUnqualifiedDesugaredType()->getAsCXXRecordDecl(); +auto ClassDecl = type->getPointeeType() + ->getUnqualifiedDesugaredType() + ->getAsCXXRecordDecl(); if (!ClassDecl) return false; `` 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
[clang] [alpha.webkit.UncountedLocalVarsChecker] Ignore local vars of JSC::VM& type (PR #91068)
llvmbot wrote: @llvm/pr-subscribers-clang Author: Mikhail R. Gadelha (mikhailramalho) Changes 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 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(); +if(!type) + return false; + +auto ClassDecl = type->getPointeeType()->getUnqualifiedDesugaredType()->getAsCXXRecordDecl(); +if (!ClassDecl) + return false; + +auto *NsDecl = ClassDecl->getParent(); +if (!NsDecl || !isa(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; } `` 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
[clang] [alpha.webkit.UncountedLocalVarsChecker] Ignore local vars of JSC::VM& type (PR #91068)
https://github.com/mikhailramalho created https://github.com/llvm/llvm-project/pull/91068 This patch also updates safeGetName to get names from operators without hitting an assertion >From 7f59654193385e78e1635c9bb2a627522f888b8d Mon Sep 17 00:00:00 2001 From: "Mikhail R. Gadelha" Date: Sat, 4 May 2024 13:08:32 -0300 Subject: [PATCH] [alpha.webkit.UncountedLocalVarsChecker] Ignore local vars of JSC::VM& type This patch also updates safeGetName to get names from operators without hitting an assertion --- .../StaticAnalyzer/Checkers/WebKit/ASTUtils.h | 11 + .../WebKit/UncountedLocalVarsChecker.cpp | 23 +++ 2 files changed, 29 insertions(+), 5 deletions(-) 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 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(); +if(!type) + return false; + +auto ClassDecl = type->getPointeeType()->getUnqualifiedDesugaredType()->getAsCXXRecordDecl(); +if (!ClassDecl) + return false; + +auto *NsDecl = ClassDecl->getParent(); +if (!NsDecl || !isa(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; } ___ cfe-commits mailing list cfe-commits@lists.llvm.org https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits