]> granicus.if.org Git - clang/commitdiff
[analyzer] Shorten the stack hint diagnostic.
authorAnna Zaks <ganna@apple.com>
Fri, 16 Mar 2012 23:44:28 +0000 (23:44 +0000)
committerAnna Zaks <ganna@apple.com>
Fri, 16 Mar 2012 23:44:28 +0000 (23:44 +0000)
Do not display the standard "Returning from 'foo'", when a stack hint is
available.

git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@152964 91177308-0d34-0410-b5e6-96231b3b80d8

include/clang/StaticAnalyzer/Core/BugReporter/PathDiagnostic.h
lib/StaticAnalyzer/Checkers/MallocChecker.cpp
lib/StaticAnalyzer/Core/PathDiagnostic.cpp
test/Analysis/malloc-plist.c

index b40bc71010960534ac977d82eacabacaa245c60f..6460124b766efdcd9fabb3be50a0a73e4d9447a9 100644 (file)
@@ -398,7 +398,7 @@ public:
   ///   'Msg via Nth parameter'
   virtual std::string getMessageForArg(const Expr *ArgE, unsigned ArgIndex);
   virtual std::string getMessageForReturn(const CallExpr *CallExpr) {
-    return Msg + " returned";
+    return Msg;
   }
   virtual std::string getMessageForSymbolNotFound() {
     return Msg;
index 2926fd5c04d35f4ecd660ea998455b0496c43803..133482fcce6b14d78e9eeacd70f2d3056b2d956b 100644 (file)
@@ -254,7 +254,7 @@ private:
         SmallString<200> buf;
         llvm::raw_svector_ostream os(buf);
 
-        os << "; reallocation of ";
+        os << "Reallocation of ";
         // Printed parameters start at 1, not 0.
         printOrdinal(++ArgIndex, os);
         os << " parameter failed";
@@ -263,7 +263,7 @@ private:
       }
 
       virtual std::string getMessageForReturn(const CallExpr *CallExpr) {
-        return "; reallocation of returned value failed";
+        return "Reallocation of returned value failed";
       }
     };
   };
@@ -1292,15 +1292,17 @@ MallocChecker::MallocBugVisitor::VisitNode(const ExplodedNode *N,
   if (Mode == Normal) {
     if (isAllocated(RS, RSPrev, S)) {
       Msg = "Memory is allocated";
-      StackHint = new StackHintGeneratorForSymbol(Sym, "; allocated memory");
+      StackHint = new StackHintGeneratorForSymbol(Sym,
+                                                  "Returned allocated memory");
     } else if (isReleased(RS, RSPrev, S)) {
       Msg = "Memory is released";
-      StackHint = new StackHintGeneratorForSymbol(Sym, "; released memory");
+      StackHint = new StackHintGeneratorForSymbol(Sym,
+                                                  "Returned released memory");
     } else if (isReallocFailedCheck(RS, RSPrev, S)) {
       Mode = ReallocationFailed;
       Msg = "Reallocation failed";
       StackHint = new StackHintGeneratorForReallocationFailed(Sym,
-                                                   "; reallocation failed");
+                                                       "Reallocation failed");
     }
 
   // We are in a special mode if a reallocation failed later in the path.
@@ -1320,7 +1322,8 @@ MallocChecker::MallocBugVisitor::VisitNode(const ExplodedNode *N,
     if (!(FunName.equals("realloc") || FunName.equals("reallocf")))
       return 0;
     Msg = "Attempt to reallocate memory";
-    StackHint = new StackHintGeneratorForSymbol(Sym, "; reallocated memory");
+    StackHint = new StackHintGeneratorForSymbol(Sym,
+                                                "Returned reallocated memory");
     Mode = Normal;
   }
 
index 2a2b9c615ea2a8615f380876c132399af0b3b849..989553e3759d9a8714ad19cf435ded95a43b7514 100644 (file)
@@ -568,12 +568,12 @@ PathDiagnosticCallPiece::getCallExitEvent() const {
     return 0;
   SmallString<256> buf;
   llvm::raw_svector_ostream Out(buf);
-  if (const NamedDecl *ND = dyn_cast_or_null<NamedDecl>(Callee))
+  if (!CallStackMessage.empty())
+    Out << CallStackMessage;
+  else if (const NamedDecl *ND = dyn_cast_or_null<NamedDecl>(Callee))
     Out << "Returning from '" << *ND << "'";
   else
     Out << "Returning to caller";
-  if (!CallStackMessage.empty())
-    Out << CallStackMessage;
   return new PathDiagnosticEventPiece(callReturn, Out.str());
 }
 
index d08ed07d184c08dec94576f3bec7c5d6d4e9267b..326161b06ab256c3c634f6f847e1ac2162efaed1 100644 (file)
@@ -87,6 +87,7 @@ void use_ret() {
     v = malloc_wrapper_ret();
 }
 
+
 // CHECK: <?xml version="1.0" encoding="UTF-8"?>
 // CHECK: <plist version="1.0">
 // CHECK: <dict>
@@ -1129,9 +1130,9 @@ void use_ret() {
 // CHECK:      </array>
 // CHECK:      <key>depth</key><integer>1</integer>
 // CHECK:      <key>extended_message</key>
-// CHECK:      <string>Returning from &apos;wrapper&apos;; allocated memory returned</string>
+// CHECK:      <string>Returned allocated memory</string>
 // CHECK:      <key>message</key>
-// CHECK: <string>Returning from &apos;wrapper&apos;; allocated memory returned</string>
+// CHECK: <string>Returned allocated memory</string>
 // CHECK:     </dict>
 // CHECK:     <dict>
 // CHECK:      <key>kind</key><string>control</string>
@@ -1568,9 +1569,9 @@ void use_ret() {
 // CHECK:      </array>
 // CHECK:      <key>depth</key><integer>2</integer>
 // CHECK:      <key>extended_message</key>
-// CHECK:      <string>Returning from &apos;my_free&apos;; released memory via 1st parameter</string>
+// CHECK:      <string>Returned released memory via 1st parameter</string>
 // CHECK:      <key>message</key>
-// CHECK: <string>Returning from &apos;my_free&apos;; released memory via 1st parameter</string>
+// CHECK: <string>Returned released memory via 1st parameter</string>
 // CHECK:     </dict>
 // CHECK:     <dict>
 // CHECK:      <key>kind</key><string>control</string>
@@ -1631,9 +1632,9 @@ void use_ret() {
 // CHECK:      </array>
 // CHECK:      <key>depth</key><integer>1</integer>
 // CHECK:      <key>extended_message</key>
-// CHECK:      <string>Returning from &apos;my_malloc_and_free&apos;; released memory via 1st parameter</string>
+// CHECK:      <string>Returned released memory via 1st parameter</string>
 // CHECK:      <key>message</key>
-// CHECK: <string>Returning from &apos;my_malloc_and_free&apos;; released memory via 1st parameter</string>
+// CHECK: <string>Returned released memory via 1st parameter</string>
 // CHECK:     </dict>
 // CHECK:     <dict>
 // CHECK:      <key>kind</key><string>control</string>
@@ -2139,9 +2140,9 @@ void use_ret() {
 // CHECK:      </array>
 // CHECK:      <key>depth</key><integer>1</integer>
 // CHECK:      <key>extended_message</key>
-// CHECK:      <string>Returning from &apos;my_realloc&apos;; reallocation of 1st parameter failed</string>
+// CHECK:      <string>Reallocation of 1st parameter failed</string>
 // CHECK:      <key>message</key>
-// CHECK: <string>Returning from &apos;my_realloc&apos;; reallocation of 1st parameter failed</string>
+// CHECK: <string>Reallocation of 1st parameter failed</string>
 // CHECK:     </dict>
 // CHECK:     <dict>
 // CHECK:      <key>kind</key><string>control</string>
@@ -2419,9 +2420,9 @@ void use_ret() {
 // CHECK:      </array>
 // CHECK:      <key>depth</key><integer>1</integer>
 // CHECK:      <key>extended_message</key>
-// CHECK:      <string>Returning from &apos;malloc_wrapper_ret&apos;; allocated memory returned</string>
+// CHECK:      <string>Returned allocated memory</string>
 // CHECK:      <key>message</key>
-// CHECK: <string>Returning from &apos;malloc_wrapper_ret&apos;; allocated memory returned</string>
+// CHECK: <string>Returned allocated memory</string>
 // CHECK:     </dict>
 // CHECK:     <dict>
 // CHECK:      <key>kind</key><string>control</string>