From: Anna Zaks Date: Mon, 15 Apr 2013 22:37:53 +0000 (+0000) Subject: [analyzer] Add more specialized error messages for corner cases as per Jordan's code... X-Git-Url: https://granicus.if.org/sourcecode?a=commitdiff_plain;h=82dd4396fcd2517d06382b7170f393d1b6351c7f;p=clang [analyzer] Add more specialized error messages for corner cases as per Jordan's code review for r179396 git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@179571 91177308-0d34-0410-b5e6-96231b3b80d8 --- diff --git a/lib/StaticAnalyzer/Core/BugReporterVisitors.cpp b/lib/StaticAnalyzer/Core/BugReporterVisitors.cpp index 4fbaec5d5f..18994ca0d0 100644 --- a/lib/StaticAnalyzer/Core/BugReporterVisitors.cpp +++ b/lib/StaticAnalyzer/Core/BugReporterVisitors.cpp @@ -526,7 +526,7 @@ PathDiagnosticPiece *FindLastStoreBRVisitor::VisitNode(const ExplodedNode *Succ, "Initializing to "; } else if (isa(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 CV = V.getAs()) { - 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); diff --git a/test/Analysis/inlining/path-notes.cpp b/test/Analysis/inlining/path-notes.cpp index d13bb5446c..5393fa2fcb 100644 --- a/test/Analysis/inlining/path-notes.cpp +++ b/test/Analysis/inlining/path-notes.cpp @@ -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: // CHECK-NEXT: depth0 // CHECK-NEXT: extended_message -// CHECK-NEXT: Null pointer value stored +// CHECK-NEXT: Storing null pointer value // CHECK-NEXT: message -// CHECK-NEXT: Null pointer value stored +// CHECK-NEXT: Storing null pointer value // CHECK-NEXT: // CHECK-NEXT: // CHECK-NEXT: kindcontrol