https://github.com/rniwa updated 
https://github.com/llvm/llvm-project/pull/133804

>From f5d2ab90f34cf2d7323e9c3c2e37680c35f411d6 Mon Sep 17 00:00:00 2001
From: Ryosuke Niwa <rn...@webkit.org>
Date: Mon, 31 Mar 2025 14:38:22 -0700
Subject: [PATCH 1/2] [alpha.webkit.ForwardDeclChecker] Ignore forward declared
 struct.

There are some system libraries such as sqlite3 which forward declare a struct
then use a pointer to that forward declared type in various APIs.
Ignore these types ForwardDeclChecker like other pointer types.
---
 .../Checkers/WebKit/ForwardDeclChecker.cpp             | 10 +++++-----
 .../Analysis/Checkers/WebKit/forward-decl-checker.mm   |  4 ++++
 2 files changed, 9 insertions(+), 5 deletions(-)

diff --git a/clang/lib/StaticAnalyzer/Checkers/WebKit/ForwardDeclChecker.cpp 
b/clang/lib/StaticAnalyzer/Checkers/WebKit/ForwardDeclChecker.cpp
index a524593b0119b..399ae9e0a6874 100644
--- a/clang/lib/StaticAnalyzer/Checkers/WebKit/ForwardDeclChecker.cpp
+++ b/clang/lib/StaticAnalyzer/Checkers/WebKit/ForwardDeclChecker.cpp
@@ -108,17 +108,16 @@ class ForwardDeclChecker : public 
Checker<check::ASTDecl<TranslationUnitDecl>> {
     RTC.visitTypedef(TD);
     auto QT = TD->getUnderlyingType().getCanonicalType();
     if (BR->getSourceManager().isInSystemHeader(TD->getBeginLoc())) {
-      if (auto *Type = QT.getTypePtrOrNull(); Type && QT->isPointerType())
+      if (auto *Type = QT.getTypePtrOrNull())
         SystemTypes.insert(Type);
     }
   }
 
   bool isUnknownType(QualType QT) const {
-    auto *Type = QT.getTypePtrOrNull();
-    if (!Type)
-      return false;
     auto *CanonicalType = QT.getCanonicalType().getTypePtrOrNull();
-    auto PointeeQT = Type->getPointeeType();
+    if (!CanonicalType)
+      return false;
+    auto PointeeQT = CanonicalType->getPointeeType();
     auto *PointeeType = PointeeQT.getTypePtrOrNull();
     if (!PointeeType)
       return false;
@@ -128,6 +127,7 @@ class ForwardDeclChecker : public 
Checker<check::ASTDecl<TranslationUnitDecl>> {
     auto Name = R->getName();
     return !R->hasDefinition() && !RTC.isUnretained(QT) &&
            !SystemTypes.contains(CanonicalType) &&
+           !SystemTypes.contains(PointeeType) &&
            !Name.starts_with("Opaque") && Name != "_NSZone";
   }
 
diff --git a/clang/test/Analysis/Checkers/WebKit/forward-decl-checker.mm 
b/clang/test/Analysis/Checkers/WebKit/forward-decl-checker.mm
index 151cbe2affa92..64100d60c4867 100644
--- a/clang/test/Analysis/Checkers/WebKit/forward-decl-checker.mm
+++ b/clang/test/Analysis/Checkers/WebKit/forward-decl-checker.mm
@@ -25,6 +25,8 @@
 
 Obj* provide_obj_ptr();
 void receive_obj_ptr(Obj* p = nullptr);
+sqlite3* open_db();
+void close_db(sqlite3*);
 
 Obj* ptr(Obj* arg) {
   receive_obj_ptr(provide_obj_ptr());
@@ -34,6 +36,8 @@
   receive_obj_ptr(arg);
   receive_obj_ptr(nullptr);
   receive_obj_ptr();
+  auto* db = open_db();
+  close_db(db);
   return obj;
 }
 

>From 1881a58526572cfaa1f8532b252c57fe9df70908 Mon Sep 17 00:00:00 2001
From: Ryosuke Niwa <rn...@webkit.org>
Date: Mon, 31 Mar 2025 15:00:57 -0700
Subject: [PATCH 2/2] Fix formatting.

---
 .../lib/StaticAnalyzer/Checkers/WebKit/ForwardDeclChecker.cpp | 4 ++--
 1 file changed, 2 insertions(+), 2 deletions(-)

diff --git a/clang/lib/StaticAnalyzer/Checkers/WebKit/ForwardDeclChecker.cpp 
b/clang/lib/StaticAnalyzer/Checkers/WebKit/ForwardDeclChecker.cpp
index 399ae9e0a6874..2c63224df129a 100644
--- a/clang/lib/StaticAnalyzer/Checkers/WebKit/ForwardDeclChecker.cpp
+++ b/clang/lib/StaticAnalyzer/Checkers/WebKit/ForwardDeclChecker.cpp
@@ -127,8 +127,8 @@ class ForwardDeclChecker : public 
Checker<check::ASTDecl<TranslationUnitDecl>> {
     auto Name = R->getName();
     return !R->hasDefinition() && !RTC.isUnretained(QT) &&
            !SystemTypes.contains(CanonicalType) &&
-           !SystemTypes.contains(PointeeType) &&
-           !Name.starts_with("Opaque") && Name != "_NSZone";
+           !SystemTypes.contains(PointeeType) && !Name.starts_with("Opaque") &&
+           Name != "_NSZone";
   }
 
   void visitRecordDecl(const RecordDecl *RD, const Decl *DeclWithIssue) const {

_______________________________________________
cfe-commits mailing list
cfe-commits@lists.llvm.org
https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits

Reply via email to