r305991 - [analyzer] Do not continue to analyze a path if the constraints contradict with builtin assume

Gabor Horvath via cfe-commits cfe-commits at lists.llvm.org
Thu Jun 22 03:09:40 PDT 2017


Author: xazax
Date: Thu Jun 22 05:09:40 2017
New Revision: 305991

URL: http://llvm.org/viewvc/llvm-project?rev=305991&view=rev
Log:
[analyzer] Do not continue to analyze a path if the constraints contradict with builtin assume

Differential Revision: https://reviews.llvm.org/D34502

Removed:
    cfe/trunk/test/Analysis/builtin-assume.c
Modified:
    cfe/trunk/lib/StaticAnalyzer/Checkers/BuiltinFunctionChecker.cpp
    cfe/trunk/test/Analysis/builtin-functions.cpp

Modified: cfe/trunk/lib/StaticAnalyzer/Checkers/BuiltinFunctionChecker.cpp
URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/lib/StaticAnalyzer/Checkers/BuiltinFunctionChecker.cpp?rev=305991&r1=305990&r2=305991&view=diff
==============================================================================
--- cfe/trunk/lib/StaticAnalyzer/Checkers/BuiltinFunctionChecker.cpp (original)
+++ cfe/trunk/lib/StaticAnalyzer/Checkers/BuiltinFunctionChecker.cpp Thu Jun 22 05:09:40 2017
@@ -50,8 +50,10 @@ bool BuiltinFunctionChecker::evalCall(co
     state = state->assume(ArgSVal.castAs<DefinedOrUnknownSVal>(), true);
     // FIXME: do we want to warn here? Not right now. The most reports might
     // come from infeasible paths, thus being false positives.
-    if (!state)
+    if (!state) {
+      C.generateSink(C.getState(), C.getPredecessor());
       return true;
+    }
 
     C.addTransition(state);
     return true;

Removed: cfe/trunk/test/Analysis/builtin-assume.c
URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/test/Analysis/builtin-assume.c?rev=305990&view=auto
==============================================================================
--- cfe/trunk/test/Analysis/builtin-assume.c (original)
+++ cfe/trunk/test/Analysis/builtin-assume.c (removed)
@@ -1,8 +0,0 @@
-// RUN: %clang_analyze_cc1 -analyzer-checker=core,debug.ExprInspection -verify %s
-
-void clang_analyzer_eval(int);
-
-void f(int i) {
-  __builtin_assume(i < 10);
-  clang_analyzer_eval(i < 15); // expected-warning {{TRUE}}
-}

Modified: cfe/trunk/test/Analysis/builtin-functions.cpp
URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/test/Analysis/builtin-functions.cpp?rev=305991&r1=305990&r2=305991&view=diff
==============================================================================
--- cfe/trunk/test/Analysis/builtin-functions.cpp (original)
+++ cfe/trunk/test/Analysis/builtin-functions.cpp Thu Jun 22 05:09:40 2017
@@ -1,6 +1,7 @@
 // RUN: %clang_analyze_cc1 -triple x86_64-apple-darwin10 -analyzer-checker=core,debug.ExprInspection %s -std=c++11 -verify
 
 void clang_analyzer_eval(bool);
+void clang_analyzer_warnIfReached();
 
 void testAddressof(int x) {
   clang_analyzer_eval(&x == __builtin_addressof(x)); // expected-warning{{TRUE}}
@@ -50,3 +51,16 @@ void test_assume_aligned_4(char *p) {
   q = (char*) __builtin_assume_aligned(p + 1, 16);
   clang_analyzer_eval(p == q); // expected-warning{{FALSE}}
 }
+
+void f(int i) {
+  __builtin_assume(i < 10);
+  clang_analyzer_eval(i < 15); // expected-warning {{TRUE}}
+}
+
+void g(int i) {
+  if (i > 5) {
+    __builtin_assume(i < 5);
+    clang_analyzer_warnIfReached(); // Assumtion contradicts constraints.
+                                    // We give up the analysis on this path.
+  }
+}




More information about the cfe-commits mailing list