Author: z1nke
Date: 2024-10-23T10:46:36+02:00
New Revision: 684c26c89b8994fc31d1c4be0cf70d6cc6f2b7ca

URL: 
https://github.com/llvm/llvm-project/commit/684c26c89b8994fc31d1c4be0cf70d6cc6f2b7ca
DIFF: 
https://github.com/llvm/llvm-project/commit/684c26c89b8994fc31d1c4be0cf70d6cc6f2b7ca.diff

LOG: [analyzer] Remove redundant "returned to caller" suffix for compound 
literal in StackAddressEscape

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]

Added: 
    

Modified: 
    clang/lib/StaticAnalyzer/Checkers/StackAddrEscapeChecker.cpp
    clang/test/Analysis/stack-addr-ps.c

Removed: 
    


################################################################################
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