[clang] [clang][analyzer] FixedAddressChecker: no warning if system macro is used (PR #108993)
via cfe-commits
cfe-commits at lists.llvm.org
Tue Sep 17 08:37:57 PDT 2024
llvmbot wrote:
<!--LLVM PR SUMMARY COMMENT-->
@llvm/pr-subscribers-clang-static-analyzer-1
@llvm/pr-subscribers-clang
Author: Balázs Kéri (balazske)
<details>
<summary>Changes</summary>
---
Full diff: https://github.com/llvm/llvm-project/pull/108993.diff
3 Files Affected:
- (modified) clang/lib/StaticAnalyzer/Checkers/FixedAddressChecker.cpp (+3)
- (modified) clang/test/Analysis/Inputs/system-header-simulator.h (+8)
- (modified) clang/test/Analysis/ptr-arith.c (+13)
``````````diff
diff --git a/clang/lib/StaticAnalyzer/Checkers/FixedAddressChecker.cpp b/clang/lib/StaticAnalyzer/Checkers/FixedAddressChecker.cpp
index 7aefcdc6d358aa..e7fde3edc7f9ee 100644
--- a/clang/lib/StaticAnalyzer/Checkers/FixedAddressChecker.cpp
+++ b/clang/lib/StaticAnalyzer/Checkers/FixedAddressChecker.cpp
@@ -48,6 +48,9 @@ void FixedAddressChecker::checkPreStmt(const BinaryOperator *B,
if (!RV.isConstant() || RV.isZeroConstant())
return;
+ if (C.getSourceManager().isInSystemMacro(B->getRHS()->getBeginLoc()))
+ return;
+
if (ExplodedNode *N = C.generateNonFatalErrorNode()) {
// FIXME: improve grammar in the following strings:
constexpr llvm::StringLiteral Msg =
diff --git a/clang/test/Analysis/Inputs/system-header-simulator.h b/clang/test/Analysis/Inputs/system-header-simulator.h
index 8fd51449ecc0a4..fadc09f65d5365 100644
--- a/clang/test/Analysis/Inputs/system-header-simulator.h
+++ b/clang/test/Analysis/Inputs/system-header-simulator.h
@@ -154,3 +154,11 @@ void _Exit(int status) __attribute__ ((__noreturn__));
#define EOF (-1)
#define offsetof(t, d) __builtin_offsetof(t, d)
+
+struct sigaction {
+ void (*sa_handler)(int);
+};
+#define SIGINT 2
+#define SIG_IGN (void (*)(int))1
+
+int sigaction(int, const struct sigaction *restrict, struct sigaction *restrict);
diff --git a/clang/test/Analysis/ptr-arith.c b/clang/test/Analysis/ptr-arith.c
index f99dfabb073666..020a5006292306 100644
--- a/clang/test/Analysis/ptr-arith.c
+++ b/clang/test/Analysis/ptr-arith.c
@@ -1,6 +1,8 @@
// RUN: %clang_analyze_cc1 -analyzer-checker=alpha.core.FixedAddr,alpha.core.PointerArithm,debug.ExprInspection -Wno-pointer-to-int-cast -verify -triple x86_64-apple-darwin9 -Wno-tautological-pointer-compare -analyzer-config eagerly-assume=false %s
// RUN: %clang_analyze_cc1 -analyzer-checker=alpha.core.FixedAddr,alpha.core.PointerArithm,debug.ExprInspection -Wno-pointer-to-int-cast -verify -triple i686-apple-darwin9 -Wno-tautological-pointer-compare -analyzer-config eagerly-assume=false %s
+#include "Inputs/system-header-simulator.h"
+
void clang_analyzer_eval(int);
void clang_analyzer_dump(int);
@@ -35,9 +37,20 @@ domain_port (const char *domain_b, const char *domain_e,
return port;
}
+#define FIXED_VALUE (int*) 0x1111
+
void f4(void) {
int *p;
p = (int*) 0x10000; // expected-warning{{Using a fixed address is not portable because that address will probably not be valid in all environments or platforms}}
+ long x = 0x10100;
+ x += 10;
+ p = (int*) x; // expected-warning{{Using a fixed address is not portable because that address will probably not be valid in all environments or platforms}}
+
+ struct sigaction sa;
+ sa.sa_handler = SIG_IGN; // no warning (exclude macros defined in system header)
+ sigaction(SIGINT, &sa, NULL);
+
+ p = FIXED_VALUE; // expected-warning{{Using a fixed address is not portable because that address will probably not be valid in all environments or platforms}}
}
void f5(void) {
``````````
</details>
https://github.com/llvm/llvm-project/pull/108993
More information about the cfe-commits
mailing list