https://github.com/balazske created https://github.com/llvm/llvm-project/pull/108993
None From c13a4d7ed344209359ddb838b2688805ceb06304 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Bal=C3=A1zs=20K=C3=A9ri?= <balazs.k...@ericsson.com> Date: Tue, 17 Sep 2024 17:33:34 +0200 Subject: [PATCH] [clang][analyzer] FixedAddressChecker: no warning if system macro is used --- .../StaticAnalyzer/Checkers/FixedAddressChecker.cpp | 3 +++ .../test/Analysis/Inputs/system-header-simulator.h | 8 ++++++++ clang/test/Analysis/ptr-arith.c | 13 +++++++++++++ 3 files changed, 24 insertions(+) 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) { _______________________________________________ cfe-commits mailing list cfe-commits@lists.llvm.org https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits