[clang] [alpha.webkit.NoUnretainedMemberChecker] Ignore system-header-defined ivar / property of a forward declared type (PR #133755)
via cfe-commits
cfe-commits at lists.llvm.org
Mon Mar 31 10:15:56 PDT 2025
llvmbot wrote:
<!--LLVM PR SUMMARY COMMENT-->
@llvm/pr-subscribers-clang
Author: Ryosuke Niwa (rniwa)
<details>
<summary>Changes</summary>
Prior to this PR, we were emitting warnings for Objective-C ivars and properties if the forward declaration of the type appeared first in a non-system header. This PR fixes the checker so tha we'd ignore ivars and properties defined for a forward declared type.
---
Full diff: https://github.com/llvm/llvm-project/pull/133755.diff
2 Files Affected:
- (modified) clang/lib/StaticAnalyzer/Checkers/WebKit/RawPtrRefMemberChecker.cpp (+5)
- (modified) clang/test/Analysis/Checkers/WebKit/unretained-members.mm (+2)
``````````diff
diff --git a/clang/lib/StaticAnalyzer/Checkers/WebKit/RawPtrRefMemberChecker.cpp b/clang/lib/StaticAnalyzer/Checkers/WebKit/RawPtrRefMemberChecker.cpp
index 89df1a725ab92..233bd8471bf89 100644
--- a/clang/lib/StaticAnalyzer/Checkers/WebKit/RawPtrRefMemberChecker.cpp
+++ b/clang/lib/StaticAnalyzer/Checkers/WebKit/RawPtrRefMemberChecker.cpp
@@ -133,6 +133,8 @@ class RawPtrRefMemberChecker
void visitIvarDecl(const ObjCContainerDecl *CD,
const ObjCIvarDecl *Ivar) const {
+ if (BR->getSourceManager().isInSystemHeader(Ivar->getLocation()))
+ return;
auto QT = Ivar->getType();
const Type *IvarType = QT.getTypePtrOrNull();
if (!IvarType)
@@ -154,6 +156,8 @@ class RawPtrRefMemberChecker
void visitObjCPropertyDecl(const ObjCContainerDecl *CD,
const ObjCPropertyDecl *PD) const {
+ if (BR->getSourceManager().isInSystemHeader(PD->getLocation()))
+ return;
auto QT = PD->getType();
const Type *PropType = QT.getTypePtrOrNull();
if (!PropType)
@@ -241,6 +245,7 @@ class RawPtrRefMemberChecker
BR->getSourceManager());
auto Report = std::make_unique<BasicBugReport>(Bug, Os.str(), BSLoc);
Report->addRange(Member->getSourceRange());
+ Report->setDeclWithIssue(ClassCXXRD);
BR->emitReport(std::move(Report));
}
diff --git a/clang/test/Analysis/Checkers/WebKit/unretained-members.mm b/clang/test/Analysis/Checkers/WebKit/unretained-members.mm
index 92d70a94427c0..fff1f8ede091b 100644
--- a/clang/test/Analysis/Checkers/WebKit/unretained-members.mm
+++ b/clang/test/Analysis/Checkers/WebKit/unretained-members.mm
@@ -1,5 +1,7 @@
// RUN: %clang_analyze_cc1 -analyzer-checker=alpha.webkit.NoUnretainedMemberChecker -verify %s
+ at class SystemObject;
+
#include "objc-mock-types.h"
#include "mock-system-header.h"
``````````
</details>
https://github.com/llvm/llvm-project/pull/133755
More information about the cfe-commits
mailing list