summaryrefslogtreecommitdiffstats
path: root/clang
diff options
context:
space:
mode:
authorAnna Zaks <ganna@apple.com>2012-03-16 23:44:28 +0000
committerAnna Zaks <ganna@apple.com>2012-03-16 23:44:28 +0000
commita7f457a5ea4e07db01ac8c13c003d1cc43a8a9a2 (patch)
treec2e537c19fcba563618f494d39655f1bc7b7bdd2 /clang
parent44ab2103e2138802fa5ddaaaad25cb4cb6a7149e (diff)
downloadbcm5719-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')
-rw-r--r--clang/include/clang/StaticAnalyzer/Core/BugReporter/PathDiagnostic.h2
-rw-r--r--clang/lib/StaticAnalyzer/Checkers/MallocChecker.cpp15
-rw-r--r--clang/lib/StaticAnalyzer/Core/PathDiagnostic.cpp6
-rw-r--r--clang/test/Analysis/malloc-plist.c21
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 &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>
OpenPOWER on IntegriCloud