30class BuiltinFunctionChecker :
public Checker<eval::Call> {
40 const auto *FD = dyn_cast_or_null<FunctionDecl>(
Call.getDecl());
45 const Expr *CE =
Call.getOriginExpr();
47 switch (FD->getBuiltinID()) {
51 case Builtin::BI__builtin_assume:
52 case Builtin::BI__assume: {
53 assert (
Call.getNumArgs() > 0);
62 C.generateSink(
C.getState(),
C.getPredecessor());
66 C.addTransition(state);
70 case Builtin::BI__builtin_unpredictable:
71 case Builtin::BI__builtin_expect:
72 case Builtin::BI__builtin_expect_with_probability:
73 case Builtin::BI__builtin_assume_aligned:
74 case Builtin::BI__builtin_addressof:
75 case Builtin::BI__builtin_function_start: {
81 assert (
Call.getNumArgs() > 0);
83 C.addTransition(state->BindExpr(CE, LCtx, Arg));
87 case Builtin::BI__builtin_dynamic_object_size:
88 case Builtin::BI__builtin_object_size:
89 case Builtin::BI__builtin_constant_p: {
97 llvm::APSInt Result = EVResult.
Val.
getInt();
103 if (FD->getBuiltinID() == Builtin::BI__builtin_constant_p) {
111 C.addTransition(state->BindExpr(CE, LCtx,
V));
121bool ento::shouldRegisterBuiltinFunctionChecker(
const CheckerManager &mgr) {
Defines enum values for all the target-independent builtin functions.
This represents one expression.
bool EvaluateAsInt(EvalResult &Result, const ASTContext &Ctx, SideEffectsKind AllowSideEffects=SE_NoSideEffects, bool InConstantContext=false) const
EvaluateAsInt - Return true if this is a constant which we can fold and convert to an integer,...
@ SE_NoSideEffects
Strictly evaluate the expression.
It wraps the AnalysisDeclContext to represent both the call stack with the help of StackFrameContext ...
void apply(llvm::APSInt &Value) const
Convert a given APSInt, in place, to match this type.
APSIntType getAPSIntType(QualType T) const
Returns the type of the APSInt used to store values of the given QualType.
Represents an abstract call to a function or method along a particular path.
CHECKER * registerChecker(AT &&... Args)
Used to register checkers.
BasicValueFactory & getBasicValueFactory()
nonloc::ConcreteInt makeIntVal(const IntegerLiteral *integer)
SVal - This represents a symbolic expression, which can be either an L-value or an R-value.
T castAs() const
Convert to the specified SVal type, asserting that this SVal is of the desired type.
The JSON file list parser is used to communicate input to InstallAPI.
EvalResult is a struct with detailed info about an evaluated expression.
APValue Val
Val - This is the value the expression can be folded to.