CBMC
All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Macros Modules Pages
validate_expressions.cpp
Go to the documentation of this file.
1/*******************************************************************\
2
3Module: Validate expressions
4
5Author: Daniel Poetzl
6
7\*******************************************************************/
8
10#include "validate_helpers.h"
11
12#ifdef REPORT_UNIMPLEMENTED_EXPRESSION_CHECKS
13#include <iostream>
14#endif
15
16#include "bitvector_expr.h" // IWYU pragma: keep
17#include "pointer_expr.h" // IWYU pragma: keep
18#include "ssa_expr.h"
19
20#define CALL_ON_EXPR(expr_type) \
21 C<exprt, expr_type>()(expr, std::forward<Args>(args)...)
22
23template <template <typename, typename> class C, typename... Args>
24void call_on_expr(const exprt &expr, Args &&... args)
25{
26 if(expr.id() == ID_equal)
27 {
29 }
30 else if(expr.id() == ID_plus)
31 {
33 }
34 else if(is_ssa_expr(expr))
35 {
37 }
38 else if(expr.id() == ID_member)
39 {
41 }
42 else if(expr.id() == ID_dereference)
43 {
45 }
46 else if(expr.is_constant())
47 {
49 }
50 else if(expr.id() == ID_if)
51 {
53 }
54 else if(expr.id() == ID_update)
55 {
57 }
58 else if(expr.id() == ID_overflow_unary_minus)
59 {
61 }
62 else if(expr.id() == ID_count_leading_zeros)
63 {
65 }
66 else
67 {
68#ifdef REPORT_UNIMPLEMENTED_EXPRESSION_CHECKS
69 std::cerr << "Unimplemented well-formedness check for expression with id: "
70 << expr.id_string() std::endl;
71#endif
72
74 }
75}
76
85void check_expr(const exprt &expr, const validation_modet vm)
86{
88}
89
99 const exprt &expr,
100 const namespacet &ns,
101 const validation_modet vm)
102{
103 call_on_expr<call_validatet>(expr, ns, vm);
104}
105
115 const exprt &expr,
116 const namespacet &ns,
117 const validation_modet vm)
118{
120}
API to expression classes for bitvectors.
ait supplies three of the four components needed: an abstract interpreter (in this case handling func...
Definition ai.h:562
A constant literal expression.
Definition std_expr.h:3117
The count leading zeros (counting the number of zero bits starting from the most-significant bit) exp...
Operator to dereference a pointer.
Equality.
Definition std_expr.h:1366
Base class for all expressions.
Definition expr.h:56
bool is_constant() const
Return whether the expression is a constant.
Definition expr.h:212
The trinary if-then-else operator.
Definition std_expr.h:2497
const std::string & id_string() const
Definition irep.h:391
const irep_idt & id() const
Definition irep.h:388
Extract member of struct or union.
Definition std_expr.h:2971
A namespacet is essentially one or two symbol tables bound together, to allow for symbol lookups in t...
Definition namespace.h:91
The plus expression Associativity is not specified.
Definition std_expr.h:1002
Expression providing an SSA-renamed symbol of expressions.
Definition ssa_expr.h:17
A Boolean expression returning true, iff negation would result in an overflow when applied to the (si...
Operator to update elements in structs and arrays.
Definition std_expr.h:2782
API to expression classes for Pointers.
bool is_ssa_expr(const exprt &expr)
Definition ssa_expr.h:125
void check_expr(const exprt &expr, const validation_modet vm)
Check that the given expression is well-formed (shallow checks only, i.e., subexpressions and its typ...
void validate_full_expr(const exprt &expr, const namespacet &ns, const validation_modet vm)
Check that the given expression is well-formed (full check, including checks of all subexpressions an...
void validate_expr(const exprt &expr, const namespacet &ns, const validation_modet vm)
Check that the given expression is well-formed, assuming that its subexpression and type have already...
void call_on_expr(const exprt &expr, Args &&... args)
#define CALL_ON_EXPR(expr_type)
validation_modet