https://github.com/z1nke created 
https://github.com/llvm/llvm-project/pull/112135

This patch simplifies the diagnostic message in the core.StackAddrEscape for 
stack memory associated with compound literals by removing the redundant 
"returned to caller" suffix.
Example: https://godbolt.org/z/KxM67vr7c

```c
// clang --analyze -Xanalyzer -analyzer-checker=core.StackAddressEscape
void* compound_literal() {
  return &(unsigned short){((unsigned short)0x22EF)};
}
```

warning: Address of stack memory associated with a compound literal declared on 
line 2 **returned to caller returned to caller** [core.StackAddressEscape]

>From d6c8cf687e267cfb5b1cd69e3225ca14a6e01bbe Mon Sep 17 00:00:00 2001
From: czn <iamczn....@gmail.com>
Date: Sun, 13 Oct 2024 20:49:46 +0800
Subject: [PATCH] [analyzer][StackAddressEscape] Remove redundant 'returned to
 caller' suffix for compound literal

---
 .../Checkers/StackAddrEscapeChecker.cpp              |  2 +-
 clang/test/Analysis/stack-addr-ps.c                  | 12 ++++++++----
 2 files changed, 9 insertions(+), 5 deletions(-)

diff --git a/clang/lib/StaticAnalyzer/Checkers/StackAddrEscapeChecker.cpp 
b/clang/lib/StaticAnalyzer/Checkers/StackAddrEscapeChecker.cpp
index a76639bb86b208..f4de3b500499c4 100644
--- a/clang/lib/StaticAnalyzer/Checkers/StackAddrEscapeChecker.cpp
+++ b/clang/lib/StaticAnalyzer/Checkers/StackAddrEscapeChecker.cpp
@@ -78,7 +78,7 @@ SourceRange StackAddrEscapeChecker::genName(raw_ostream &os, 
const MemRegion *R,
     const CompoundLiteralExpr *CL = CR->getLiteralExpr();
     os << "stack memory associated with a compound literal "
           "declared on line "
-       << SM.getExpansionLineNumber(CL->getBeginLoc()) << " returned to 
caller";
+       << SM.getExpansionLineNumber(CL->getBeginLoc());
     range = CL->getSourceRange();
   } else if (const auto *AR = dyn_cast<AllocaRegion>(R)) {
     const Expr *ARE = AR->getExpr();
diff --git a/clang/test/Analysis/stack-addr-ps.c 
b/clang/test/Analysis/stack-addr-ps.c
index 7d7294455f1dbe..1adcb8c48d035d 100644
--- a/clang/test/Analysis/stack-addr-ps.c
+++ b/clang/test/Analysis/stack-addr-ps.c
@@ -20,17 +20,21 @@ int* f3(int x, int *y) {
 
 void* compound_literal(int x, int y) {
   if (x)
-    return &(unsigned short){((unsigned short)0x22EF)}; // 
expected-warning{{Address of stack memory}} expected-warning{{address of stack 
memory}}
+    return &(unsigned short){((unsigned short)0x22EF)};
+  // expected-warning-re@-1{{Address of stack memory associated with a 
compound literal declared on line {{[0-9]+}} returned to caller 
[core.StackAddressEscape]}}
+  // expected-warning@-2{{address of stack memory}}
 
   int* array[] = {};
   struct s { int z; double y; int w; };
   
   if (y)
-    return &((struct s){ 2, 0.4, 5 * 8 }); // expected-warning{{Address of 
stack memory}} expected-warning{{address of stack memory}}
-    
+    return &((struct s){ 2, 0.4, 5 * 8 });
+  // expected-warning-re@-1{{Address of stack memory associated with a 
compound literal declared on line {{[0-9]+}} returned to caller 
[core.StackAddressEscape]}}
+  // expected-warning@-2{{address of stack memory}}
   
   void* p = &((struct s){ 42, 0.4, x ? 42 : 0 });
-  return p; // expected-warning{{Address of stack memory}}
+  return p;
+  // expected-warning-re@-1{{Address of stack memory associated with a 
compound literal declared on line {{[0-9]+}} returned to caller 
[core.StackAddressEscape]}}
 }
 
 void* alloca_test(void) {

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

Reply via email to