Go to the documentation of this file.
9 #ifndef CPROVER_ANSI_C_C_EXPR_H
10 #define CPROVER_ANSI_C_C_EXPR_H
78 return base.
id() == ID_shuffle_vector;
127 {std::move(_lhs), std::move(_rhs), std::move(_result)},
167 if(base.
id() != ID_side_effect)
171 return statement == ID_overflow_plus || statement == ID_overflow_mult ||
172 statement == ID_overflow_minus;
186 side_effect_expr.get_statement() == ID_overflow_plus ||
187 side_effect_expr.get_statement() == ID_overflow_mult ||
188 side_effect_expr.get_statement() == ID_overflow_minus);
197 side_effect_expr.get_statement() == ID_overflow_plus ||
198 side_effect_expr.get_statement() == ID_overflow_mult ||
199 side_effect_expr.get_statement() == ID_overflow_minus);
248 "conditional target expression must have two operands");
252 expr.
operands()[1].id() == ID_expression_list,
253 "conditional target second operand must be an ID_expression_list "
254 "expression, found " +
295 return base.
id() == ID_conditional_target_group;
331 exprt _function_pointer,
346 "function pointer obeys contract expression must have two operands");
397 return base.
id() == ID_function_pointer_obeys_contract;
425 #endif // CPROVER_ANSI_C_C_EXPR_H
dstringt has one field, an unsigned integer no which is an index into a static table of strings.
A base class for multi-ary expressions Associativity is not specified.
#define DATA_CHECK(vm, condition, message)
This macro takes a condition which denotes a well-formedness criterion on goto programs,...
bool can_cast_expr< function_pointer_obeys_contract_exprt >(const exprt &base)
const side_effect_expr_overflowt & to_side_effect_expr_overflow(const exprt &expr)
Cast an exprt to a side_effect_expr_overflowt.
static void validate(const exprt &expr, const namespacet &, const validation_modet vm=validation_modet::INVARIANT)
const history_exprt & to_history_expr(const exprt &expr, const irep_idt &id)
exprt & address_of_contract()
Shuffle elements of one or two vectors, modelled after Clang's __builtin_shufflevector.
void validate_operands(const exprt &value, exprt::operandst::size_type number, const char *message, bool allow_more=false)
const exprt & lhs() const
Base class for all expressions.
Generic base class for unary expressions.
const vector_typet & type() const
Vector constructor from list of elements.
side_effect_exprt & to_side_effect_expr(exprt &expr)
Expression to hold a symbol (variable)
const exprt & vector2() const
void validate_expr(const shuffle_vector_exprt &value)
A namespacet is essentially one or two symbol tables bound together, to allow for symbol lookups in t...
typet & type()
Return the type of the expression.
const std::string & id2string(const irep_idt &d)
const exprt & function_pointer() const
const exprt & address_of_contract() const
#define PRECONDITION(CONDITION)
symbol_exprt & contract_symbol_expr()
static void check(const exprt &expr, const validation_modet vm=validation_modet::INVARIANT)
side_effect_expr_overflowt(const irep_idt &kind, exprt _lhs, exprt _rhs, exprt _result, const source_locationt &loc)
conditional_target_group_exprt(exprt _condition, exprt _target_list)
const symbol_exprt & to_symbol_expr(const exprt &expr)
Cast an exprt to a symbol_exprt.
const shuffle_vector_exprt & to_shuffle_vector_expr(const exprt &expr)
Cast an exprt to a shuffle_vector_exprt.
const irep_idt & id() const
std::vector< exprt > operandst
static void validate(const exprt &expr, const namespacet &, const validation_modet vm=validation_modet::INVARIANT)
const conditional_target_group_exprt & to_conditional_target_group_expr(const exprt &expr)
Cast an exprt to a conditional_target_group_exprt.
nonstd::optional< T > optionalt
A class for an expression that represents a conditional target or a list of targets sharing a common ...
bool can_cast_expr< shuffle_vector_exprt >(const exprt &base)
A class for expressions representing a requires_contract(fptr, contract) clause or an ensures_contrac...
const exprt & condition() const
const exprt::operandst & targets() const
vector_exprt lower() const
const irep_idt & get_statement() const
exprt::operandst & indices()
bool can_cast_expr< side_effect_expr_overflowt >(const exprt &base)
const exprt::operandst & indices() const
A class for an expression that indicates a history variable.
static void check(const exprt &expr, const validation_modet vm=validation_modet::INVARIANT)
void add_to_operands(const exprt &expr)
Add the given argument to the end of exprt's operands.
function_pointer_obeys_contract_exprt(exprt _function_pointer, exprt _contract)
const exprt & vector1() const
history_exprt(exprt variable, const irep_idt &id)
A Boolean expression returning true, iff the result of performing operation kind on operands a and b ...
bool can_cast_expr< conditional_target_group_exprt >(const exprt &base)
const exprt & rhs() const
const symbol_exprt & contract_symbol_expr() const
bool has_two_input_vectors() const
exprt & function_pointer()
exprt::operandst & targets()
const exprt & expression() const
const exprt & result() const
shuffle_vector_exprt(exprt vector1, optionalt< exprt > vector2, exprt::operandst indices)
An expression containing a side effect.
const function_pointer_obeys_contract_exprt & to_function_pointer_obeys_contract_expr(const exprt &expr)
Cast an exprt to a function_pointer_obeys_contract_exprt.