]> granicus.if.org Git - clang/commitdiff
[analyzer] Add more specialized error messages for corner cases as per Jordan's code...
authorAnna Zaks <ganna@apple.com>
Mon, 15 Apr 2013 22:37:53 +0000 (22:37 +0000)
committerAnna Zaks <ganna@apple.com>
Mon, 15 Apr 2013 22:37:53 +0000 (22:37 +0000)
git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@179571 91177308-0d34-0410-b5e6-96231b3b80d8

lib/StaticAnalyzer/Core/BugReporterVisitors.cpp
test/Analysis/inlining/path-notes.cpp

index 4fbaec5d5ffc441f5123f7665d98a6ea0968015d..18994ca0d02c19fca1ddac635748aa81d6b3e6fe 100644 (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);
index d13bb5446c1777bf916ea6ff9577f9dfa06c2592..5393fa2fcb1906e7f3f3ff6475a1a03a369d54f1 100644 (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>