mirror of
https://github.com/intel/llvm.git
synced 2026-01-23 16:06:39 +08:00
[analyzer] Shorten the stack hint diagnostic.
Do not display the standard "Returning from 'foo'", when a stack hint is available. llvm-svn: 152964
This commit is contained in:
@@ -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;
|
||||
|
||||
@@ -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;
|
||||
}
|
||||
|
||||
|
||||
@@ -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());
|
||||
}
|
||||
|
||||
|
||||
@@ -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>
|
||||
|
||||
Reference in New Issue
Block a user