summaryrefslogtreecommitdiffstats
path: root/clang/lib/StaticAnalyzer
diff options
context:
space:
mode:
authorGabor Horvath <xazax.hun@gmail.com>2017-05-12 07:02:54 +0000
committerGabor Horvath <xazax.hun@gmail.com>2017-05-12 07:02:54 +0000
commit3a00b41e43cdff4544340da0ea40408e99246982 (patch)
treec91453de6a9c22dd604619cd3fa638fc54d84d12 /clang/lib/StaticAnalyzer
parent9543a4b681645f9a56e213dfc80ff38196e1f45a (diff)
downloadbcm5719-llvm-3a00b41e43cdff4544340da0ea40408e99246982.tar.gz
bcm5719-llvm-3a00b41e43cdff4544340da0ea40408e99246982.zip
[analyzer] Add modelling of __builtin_assume
Differential Revision: https://reviews.llvm.org/D33092 llvm-svn: 302880
Diffstat (limited to 'clang/lib/StaticAnalyzer')
-rw-r--r--clang/lib/StaticAnalyzer/Checkers/BuiltinFunctionChecker.cpp16
1 files changed, 16 insertions, 0 deletions
diff --git a/clang/lib/StaticAnalyzer/Checkers/BuiltinFunctionChecker.cpp b/clang/lib/StaticAnalyzer/Checkers/BuiltinFunctionChecker.cpp
index 8c2aef21b3c..48d6cd8a527 100644
--- a/clang/lib/StaticAnalyzer/Checkers/BuiltinFunctionChecker.cpp
+++ b/clang/lib/StaticAnalyzer/Checkers/BuiltinFunctionChecker.cpp
@@ -41,6 +41,22 @@ bool BuiltinFunctionChecker::evalCall(const CallExpr *CE,
default:
return false;
+ case Builtin::BI__builtin_assume: {
+ assert (CE->arg_begin() != CE->arg_end());
+ SVal ArgSVal = state->getSVal(CE->getArg(0), LCtx);
+ if (ArgSVal.isUndef())
+ return true; // Return true to model purity.
+
+ 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)
+ return true;
+
+ C.addTransition(state);
+ return true;
+ }
+
case Builtin::BI__builtin_unpredictable:
case Builtin::BI__builtin_expect:
case Builtin::BI__builtin_assume_aligned:
OpenPOWER on IntegriCloud