[clang] [alpha.webkit.UncountedLocalVarsChecker] Ignore local vars of JSC::VM& type (PR #91068)

2024-05-09 Thread Mikhail R. Gadelha via cfe-commits

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)

2024-05-09 Thread Mikhail R. Gadelha via cfe-commits

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)

2024-05-07 Thread Ryosuke Niwa via cfe-commits

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)

2024-05-04 Thread Mikhail R. Gadelha via cfe-commits

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)

2024-05-04 Thread Mikhail R. Gadelha via cfe-commits

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)

2024-05-04 Thread Mikhail R. Gadelha via cfe-commits

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)

2024-05-04 Thread via cfe-commits

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)

2024-05-04 Thread via cfe-commits

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)

2024-05-04 Thread Mikhail R. Gadelha via cfe-commits

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