diff options
| author | Anna Zaks <ganna@apple.com> | 2012-03-16 23:44:28 +0000 |
|---|---|---|
| committer | Anna Zaks <ganna@apple.com> | 2012-03-16 23:44:28 +0000 |
| commit | a7f457a5ea4e07db01ac8c13c003d1cc43a8a9a2 (patch) | |
| tree | c2e537c19fcba563618f494d39655f1bc7b7bdd2 /clang | |
| parent | 44ab2103e2138802fa5ddaaaad25cb4cb6a7149e (diff) | |
| download | bcm5719-llvm-a7f457a5ea4e07db01ac8c13c003d1cc43a8a9a2.tar.gz bcm5719-llvm-a7f457a5ea4e07db01ac8c13c003d1cc43a8a9a2.zip | |
[analyzer] Shorten the stack hint diagnostic.
Do not display the standard "Returning from 'foo'", when a stack hint is
available.
llvm-svn: 152964
Diffstat (limited to 'clang')
4 files changed, 24 insertions, 20 deletions
diff --git a/clang/include/clang/StaticAnalyzer/Core/BugReporter/PathDiagnostic.h b/clang/include/clang/StaticAnalyzer/Core/BugReporter/PathDiagnostic.h index b40bc710109..6460124b766 100644 --- a/clang/include/clang/StaticAnalyzer/Core/BugReporter/PathDiagnostic.h +++ b/clang/include/clang/StaticAnalyzer/Core/BugReporter/PathDiagnostic.h @@ -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; diff --git a/clang/lib/StaticAnalyzer/Checkers/MallocChecker.cpp b/clang/lib/StaticAnalyzer/Checkers/MallocChecker.cpp index 2926fd5c04d..133482fcce6 100644 --- a/clang/lib/StaticAnalyzer/Checkers/MallocChecker.cpp +++ b/clang/lib/StaticAnalyzer/Checkers/MallocChecker.cpp @@ -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; } diff --git a/clang/lib/StaticAnalyzer/Core/PathDiagnostic.cpp b/clang/lib/StaticAnalyzer/Core/PathDiagnostic.cpp index 2a2b9c615ea..989553e3759 100644 --- a/clang/lib/StaticAnalyzer/Core/PathDiagnostic.cpp +++ b/clang/lib/StaticAnalyzer/Core/PathDiagnostic.cpp @@ -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()); } diff --git a/clang/test/Analysis/malloc-plist.c b/clang/test/Analysis/malloc-plist.c index d08ed07d184..326161b06ab 100644 --- a/clang/test/Analysis/malloc-plist.c +++ b/clang/test/Analysis/malloc-plist.c @@ -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 'wrapper'; allocated memory returned</string> +// CHECK: <string>Returned allocated memory</string> // CHECK: <key>message</key> -// CHECK: <string>Returning from 'wrapper'; 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 'my_free'; released memory via 1st parameter</string> +// CHECK: <string>Returned released memory via 1st parameter</string> // CHECK: <key>message</key> -// CHECK: <string>Returning from 'my_free'; 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 'my_malloc_and_free'; released memory via 1st parameter</string> +// CHECK: <string>Returned released memory via 1st parameter</string> // CHECK: <key>message</key> -// CHECK: <string>Returning from 'my_malloc_and_free'; 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 'my_realloc'; reallocation of 1st parameter failed</string> +// CHECK: <string>Reallocation of 1st parameter failed</string> // CHECK: <key>message</key> -// CHECK: <string>Returning from 'my_realloc'; 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 'malloc_wrapper_ret'; allocated memory returned</string> +// CHECK: <string>Returned allocated memory</string> // CHECK: <key>message</key> -// CHECK: <string>Returning from 'malloc_wrapper_ret'; allocated memory returned</string> +// CHECK: <string>Returned allocated memory</string> // CHECK: </dict> // CHECK: <dict> // CHECK: <key>kind</key><string>control</string> |

