[analyzer] Add more specialized error messages for corner cases as per Jordan's code review for r179396

llvm-svn: 179571
This commit is contained in:
Anna Zaks 2013-04-15 22:37:53 +00:00
parent 1b8e76f14e
commit 0881b8882e
2 changed files with 28 additions and 14 deletions

View File

@ -526,7 +526,7 @@ PathDiagnosticPiece *FindLastStoreBRVisitor::VisitNode(const ExplodedNode *Succ,
"Initializing to ";
} else if (isa<BlockExpr>(S)) {
action = R->canPrintPretty() ? "captured by block as " :
"Capturing by block as ";
"Captured by block as ";
if (VR) {
// See if we can get the BlockVarRegion.
ProgramStateRef State = StoreSite->getState();
@ -580,7 +580,7 @@ PathDiagnosticPiece *FindLastStoreBRVisitor::VisitNode(const ExplodedNode *Succ,
}
}
else {
os << (R->canPrintPretty() ? "initialized" : "Initializing")
os << (R->canPrintPretty() ? "initialized" : "Initialized")
<< " here";
}
}
@ -626,19 +626,33 @@ PathDiagnosticPiece *FindLastStoreBRVisitor::VisitNode(const ExplodedNode *Succ,
}
}
}
if (!b) {
if (R->canPrintPretty())
os << "Null pointer value stored";
else
os << "Storing null pointer value";
}
} else if (V.isUndef()) {
if (R->canPrintPretty())
os << "Uninitialized value stored";
else
os << "Storing uninitialized value";
if (!b)
os << "Null pointer value stored";
}
else if (V.isUndef()) {
os << "Uninitialized value stored";
} else if (Optional<nonloc::ConcreteInt> CV =
V.getAs<nonloc::ConcreteInt>()) {
os << "The value " << CV->getValue() << " is assigned";
}
else
os << "Value assigned";
if (R->canPrintPretty())
os << "The value " << CV->getValue() << " is assigned";
else
os << "Assigning " << CV->getValue();
} else {
if (R->canPrintPretty())
os << "Value assigned";
else
os << "Assigning value";
}
if (R->canPrintPretty()) {
os << " to ";
R->printPretty(os);

View File

@ -208,7 +208,7 @@ void testPathNoteOnInitializer() {
int testNonPrintableAssignment(int **p) {
int *&y = *p; // expected-note {{'y' initialized here}}
y = 0; // expected-note {{Null pointer value stored}}
y = 0; // expected-note {{Storing null pointer value}}
return *y; // expected-warning {{Dereference of null pointer (loaded from variable 'y')}}
// expected-note@-1 {{Dereference of null pointer (loaded from variable 'y')}}
}
@ -3704,9 +3704,9 @@ int testNonPrintableAssignment(int **p) {
// CHECK-NEXT: </array>
// CHECK-NEXT: <key>depth</key><integer>0</integer>
// CHECK-NEXT: <key>extended_message</key>
// CHECK-NEXT: <string>Null pointer value stored</string>
// CHECK-NEXT: <string>Storing null pointer value</string>
// CHECK-NEXT: <key>message</key>
// CHECK-NEXT: <string>Null pointer value stored</string>
// CHECK-NEXT: <string>Storing null pointer value</string>
// CHECK-NEXT: </dict>
// CHECK-NEXT: <dict>
// CHECK-NEXT: <key>kind</key><string>control</string>