mirror of
https://github.com/capstone-engine/llvm-capstone.git
synced 2024-12-14 19:49:36 +00:00
[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:
parent
1b8e76f14e
commit
0881b8882e
@ -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);
|
||||
|
@ -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>
|
||||
|
Loading…
Reference in New Issue
Block a user