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

Reply via email to