ESBMC
Efficient SMT-based Context-Bounded Model Checker
Loading...
Searching...
No Matches
clang_c_adjust.h
Go to the documentation of this file.
1#ifndef CLANG_C_FRONTEND_CLANG_C_ADJUST_H_
2#define CLANG_C_FRONTEND_CLANG_C_ADJUST_H_
3
9
21{
22public:
23 explicit clang_c_adjust(contextt &_context);
24 virtual ~clang_c_adjust() = default;
25
26 bool adjust();
27
36 const symbol_exprt &callee,
37 const exprt::operandst &arguments,
38 const locationt &call_location,
40
46 {
47 irep2_owns_arms = true;
48 }
49
50protected:
51 bool irep2_owns_arms = false;
54 symbol_generator tmp_symbol{"clang_c_adjust::"};
55
61 const side_effect_expr_function_callt &expr) const;
62
65 bool
66 shadows_user_definition(const irep_idt &identifier, const exprt &f_op) const;
67
68 virtual void adjust_symbol(symbolt &symbol);
69
73 void adjust_type(typet &type);
74
79 void adjust_expr(exprt &expr);
80 void adjust_base_to_derived(exprt &expr);
81 void adjust_derived_to_base(exprt &expr, const irep_idt &base_id);
82 void adjust_call_argument(exprt &arg);
83 void adjust_struct(exprt &expr);
84 void adjust_ptr_mem(exprt &expr);
86 virtual void
89 virtual void adjust_member(member_exprt &expr);
97 void bind_sideeffect_operands(exprt &expr, code_blockt &block);
98 void finish_complex_lowering(exprt &expr, exprt &result, code_blockt &block);
99 void adjust_expr_shifts(exprt &expr);
102 virtual void adjust_expr_rel(exprt &expr);
103 void adjust_float_arith(exprt &expr);
104 void adjust_index(index_exprt &index);
105 void adjust_dereference(exprt &deref);
106 void adjust_address_of(exprt &expr);
107 void adjust_sizeof(exprt &expr);
108 virtual void adjust_side_effect(side_effect_exprt &expr);
109 void adjust_symbol(exprt &expr);
110 void adjust_comma(exprt &expr);
111 void adjust_builtin_va_arg(exprt &expr);
112 virtual void
115 void adjust_operands(exprt &expr);
116 void adjust_if(exprt &expr);
117
122 virtual void adjust_code(codet &code);
123 virtual void adjust_ifthenelse(codet &code);
124 virtual void adjust_while(codet &code);
125 virtual void adjust_for(codet &code);
126 virtual void adjust_switch(codet &code);
127 void adjust_assign(codet &code);
128 void adjust_decl(codet &code);
129 // For class instantiation in C++, we need to adjust the side-effect of
130 // constructor
131 virtual void adjust_decl_block(codet &code);
132
134 const irep_idt &identifier,
135 const exprt::operandst &arguments);
136
138 const irep_idt &identifier,
139 const symbol_exprt &function_symbol,
141
146 exprt &f_op,
148
149 virtual void adjust_reference(exprt &expr);
150};
151
155void declare_argc_argv(contextt &context, const symbolt &main_symbol);
156
157#endif /* CLANG_C_FRONTEND_CLANG_C_ADJUST_H_ */
void declare_argc_argv(contextt &context, const symbolt &main_symbol)
The argc'/argv'/envp' symbols clang_c_main looks up unconditionally when main takes arguments.
Definition clang_c_adjust_expr.cpp:1821
virtual void adjust_side_effect_function_call(side_effect_expr_function_callt &expr)
Definition clang_c_adjust_expr.cpp:1173
void set_irep2_owns_arms()
Hand the index rewrite to the IREP2 adjuster.
Definition clang_c_adjust.h:45
bool irep2_owns_arms
Definition clang_c_adjust.h:51
void adjust_derived_to_base(exprt &expr, const irep_idt &base_id)
Definition clang_c_adjust_expr.cpp:292
void do_special_functions(side_effect_expr_function_callt &expr)
Definition clang_c_adjust_expr.cpp:1409
void adjust_comma(exprt &expr)
Definition clang_c_adjust_expr.cpp:1893
bool adjust()
Definition clang_c_adjust_expr.cpp:27
void adjust_side_effect_assignment(exprt &expr)
Definition clang_c_adjust_expr.cpp:1122
virtual void adjust_for(codet &code)
Definition clang_c_adjust_code.cpp:148
virtual void adjust_code(codet &code)
methods for code (codet) adjustment and other IRs derived from codet
Definition clang_c_adjust_code.cpp:37
virtual ~clang_c_adjust()=default
void adjust_float_arith(exprt &expr)
Definition clang_c_adjust_expr.cpp:847
clang_c_adjust(contextt &_context)
Definition clang_c_adjust_expr.cpp:22
bool lower_complex_binary_arithmetic(exprt &expr)
Rewrite a binary arithmetic expression over complex operands into the component-level form,...
Definition clang_c_adjust_expr.cpp:614
void adjust_index(index_exprt &index)
Definition clang_c_adjust_expr.cpp:769
contextt & context
Definition clang_c_adjust.h:52
void adjust_struct(exprt &expr)
Definition clang_c_adjust_expr.cpp:227
void adjust_side_effect_statement_expression(side_effect_exprt &expr)
Definition clang_c_adjust_expr.cpp:1741
virtual void adjust_member(member_exprt &expr)
Definition clang_c_adjust_expr.cpp:486
virtual void adjust_switch(codet &code)
Definition clang_c_adjust_code.cpp:193
void adjust_decl(codet &code)
Definition clang_c_adjust_code.cpp:112
virtual void adjust_expr_rel(exprt &expr)
Definition clang_c_adjust_expr.cpp:835
void adjust_ptr_mem(exprt &expr)
Definition clang_c_adjust_expr.cpp:253
virtual void adjust_ifthenelse(codet &code)
Definition clang_c_adjust_code.cpp:132
void adjust_builtin_va_arg(exprt &expr)
Definition clang_c_adjust_expr.cpp:1910
void adjust_operands(exprt &expr)
Definition clang_c_adjust_expr.cpp:1954
static exprt declare_gcc_polymorphic_builtin(const symbol_exprt &callee, const exprt::operandst &arguments, const locationt &call_location, contextt &context)
Declare the concrete instance of the GCC __sync_* / C11 __c11_atomic_* polymorphic builtin that calle...
Definition clang_c_adjust_polymorphic_functions.cpp:1169
void adjust_call_argument(exprt &arg)
Definition clang_c_adjust_code.cpp:29
virtual void adjust_decl_block(codet &code)
Definition clang_c_adjust_code.cpp:106
virtual void adjust_side_effect(side_effect_exprt &expr)
Definition clang_c_adjust_expr.cpp:440
virtual void adjust_function_call_arguments(side_effect_expr_function_callt &expr)
Definition clang_c_adjust_expr.cpp:1290
virtual void align_se_function_call_return_type(exprt &f_op, side_effect_expr_function_callt &expr)
ancillary methods to support the expr/code adjustments above
Definition clang_c_adjust_expr.cpp:1980
void adjust_address_of(exprt &expr)
Definition clang_c_adjust_expr.cpp:893
void adjust_expr_unary_boolean(exprt &expr)
Definition clang_c_adjust_expr.cpp:1801
bool shadows_user_definition(const irep_idt &identifier, const exprt &f_op) const
True when a name-matched builtin lowering would discard a definition the program supplies,...
Definition clang_c_adjust_expr.cpp:1388
bool has_single_arithmetic_argument(const side_effect_expr_function_callt &expr) const
methods for symbol adjustment
Definition clang_c_adjust_expr.cpp:1379
bool lower_complex_compound_assignment(exprt &expr)
A compound assignment over a complex operand has to be expanded here.
Definition clang_c_adjust_expr.cpp:1093
void adjust_expr_unary_complex(exprt &expr)
Definition clang_c_adjust_expr.cpp:740
void adjust_type(typet &type)
methods for type (typet) adjustment
Definition clang_c_adjust_expr.cpp:1025
static code_blockt instantiate_gcc_polymorphic_builtin(const irep_idt &identifier, const symbol_exprt &function_symbol, contextt &context)
Definition clang_c_adjust_polymorphic_functions.cpp:805
void adjust_sizeof(exprt &expr)
Definition clang_c_adjust_expr.cpp:995
void bind_sideeffect_operands(exprt &expr, code_blockt &block)
Definition clang_c_adjust_expr.cpp:568
void adjust_assign(codet &code)
Definition clang_c_adjust_code.cpp:201
void adjust_expr_binary_boolean(exprt &expr)
Definition clang_c_adjust_expr.cpp:1811
void adjust_base_to_derived(exprt &expr)
Definition clang_c_adjust_expr.cpp:348
symbol_generator tmp_symbol
Definition clang_c_adjust.h:54
namespacet ns
Definition clang_c_adjust.h:53
void finish_complex_lowering(exprt &expr, exprt &result, code_blockt &block)
Definition clang_c_adjust_expr.cpp:597
static exprt is_gcc_polymorphic_builtin(const irep_idt &identifier, const exprt::operandst &arguments)
Definition clang_c_adjust_polymorphic_functions.cpp:256
void adjust_expr_shifts(exprt &expr)
Definition clang_c_adjust_expr.cpp:511
void adjust_expr(exprt &expr)
methods for expression (exprt) adjustment and other IRs derived from exprt
Definition clang_c_adjust_expr.cpp:105
void adjust_dereference(exprt &deref)
Definition clang_c_adjust_expr.cpp:960
virtual void adjust_while(codet &code)
Definition clang_c_adjust_code.cpp:140
void adjust_if(exprt &expr)
Definition clang_c_adjust_expr.cpp:1963
void adjust_expr_binary_arithmetic(exprt &expr)
Definition clang_c_adjust_expr.cpp:711
virtual void adjust_symbol(symbolt &symbol)
Definition clang_c_adjust_expr.cpp:76
virtual void adjust_reference(exprt &expr)
Definition clang_c_adjust_expr.cpp:1987
Definition std_code.h:49
Definition std_code.h:8
Definition context.h:57
Definition expr.h:34
std::vector< exprt > operandst
Definition expr.h:39
Definition std_expr.h:319
Definition irep_idt.h:12
Definition location.h:7
Definition std_expr.h:949
Definition namespace.h:10
Definition std_code.h:905
Definition std_code.h:854
Definition std_expr.h:58
Definition symbol_generator.h:7
Definition symbol.h:12
Definition type.h:9
@ identifier
Definition nested_func_transform.cpp:62