Go to the documentation of this file.
12 #ifndef CPROVER_ANSI_C_C_TYPECHECK_BASE_H
13 #define CPROVER_ANSI_C_C_TYPECHECK_BASE_H
33 const std::string &_module,
49 const std::string &_module,
102 const exprt &initializer_list,
103 exprt::operandst::const_iterator init_it,
104 bool force_constant);
158 const std::function<
void(
exprt &)> typecheck_target,
159 const std::string &clause_type);
233 const std::string &)
const;
263 bool is_packed)
const;
289 return src.
id()==ID_complex ||
290 src.
id()==ID_unsignedbv ||
291 src.
id()==ID_signedbv ||
292 src.
id()==ID_floatbv ||
293 src.
id()==ID_fixedbv ||
294 src.
id()==ID_c_bool ||
296 src.
id()==ID_c_enum_tag ||
297 src.
id()==ID_c_bit_field ||
298 src.
id()==ID_integer ||
364 #endif // CPROVER_ANSI_C_C_TYPECHECK_BASE_H
virtual void do_initializer(exprt &initializer, const typet &type, bool force_constant)
virtual void typecheck_expr_side_effect(side_effect_exprt &expr)
dstringt has one field, an unsigned integer no which is an index into a static table of strings.
void typecheck_new_symbol(symbolt &symbol)
A codet representing sequential composition of program statements.
virtual void implicit_typecast_arithmetic(exprt &expr)
codet representation of a switch-case, i.e. a case statement within a switch.
virtual void typecheck_vector_type(typet &type)
virtual exprt::operandst::const_iterator do_designated_initializer(exprt &result, designatort &designator, const exprt &initializer_list, exprt::operandst::const_iterator init_it, bool force_constant)
bool gcc_vector_types_compatible(const vector_typet &, const vector_typet &)
virtual void typecheck_spec_loop_invariant(codet &code)
virtual void typecheck_array_type(array_typet &type)
codet representing a while statement.
virtual void typecheck_expr_builtin_offsetof(exprt &expr)
virtual void typecheck_spec_condition(exprt &condition)
virtual void typecheck_expr_shifts(shift_exprt &expr)
virtual void typecheck_while(code_whilet &code)
codet representation of an inline assembler statement.
virtual exprt do_special_functions(side_effect_expr_function_callt &expr)
The type of an expression, extends irept.
already_typechecked_exprt & to_already_typechecked_expr(exprt &expr)
typet enum_constant_type(const mp_integer &min, const mp_integer &max) const
void typecheck_declaration(ansi_c_declarationt &)
virtual void typecheck_break(codet &code)
virtual std::string to_string(const exprt &expr)
virtual void adjust_float_rel(binary_relation_exprt &)
Base type for structs and unions.
A side_effect_exprt representation of a function call side effect.
The trinary if-then-else operator.
static void add_rounding_mode(exprt &)
virtual void typecheck_function_call_arguments(side_effect_expr_function_callt &expr)
Typecheck the parameters in a function call expression, and where necessary, make implicit casts arou...
virtual void typecheck_spec_assigns_target(exprt &target)
void disallow_subexpr_by_id(const exprt &, const irep_idt &, const std::string &) const
virtual void typecheck_side_effect_statement_expression(side_effect_exprt &expr)
virtual void typecheck_expr_symbol(exprt &expr)
bitvector_typet enum_underlying_type(const mp_integer &min, const mp_integer &max, bool is_packed) const
Base class for all expressions.
virtual void typecheck_expr_pointer_arithmetic(exprt &expr)
std::unordered_map< irep_idt, irep_idt > asm_label_mapt
A base class for binary expressions.
virtual void typecheck_expr_address_of(exprt &expr)
virtual void typecheck_expr_alignof(exprt &expr)
void move_symbol(symbolt &symbol, symbolt *&new_symbol)
codet representation of a switch-case, i.e. a case statement within a switch.
virtual void typecheck_type(typet &type)
virtual void typecheck_side_effect_function_call(side_effect_expr_function_callt &expr)
Type with a single subtype.
virtual void typecheck_c_bit_field_type(c_bit_field_typet &type)
virtual void typecheck_expr_binary_arithmetic(exprt &expr)
Expression to hold a symbol (variable)
virtual void typecheck_expr_binary_boolean(exprt &expr)
codet representation of an if-then-else statement.
std::list< codet > clean_code
already_typechecked_typet & to_already_typechecked_type(typet &type)
virtual void make_constant(exprt &expr)
virtual exprt do_initializer_list(const exprt &value, const typet &type, bool force_constant)
virtual void typecheck_expr_operands(exprt &expr)
virtual void typecheck_typed_target_call(side_effect_expr_function_callt &expr)
void typecheck_redefinition_non_type(symbolt &old_symbol, symbolt &new_symbol)
virtual void typecheck_expr_member(exprt &expr)
A namespacet is essentially one or two symbol tables bound together, to allow for symbol lookups in t...
already_typechecked_exprt(exprt expr)
virtual void typecheck_continue(codet &code)
asm_label_mapt asm_label_map
codet representation of a do while statement.
virtual void typecheck_expr_rel(binary_relation_exprt &expr)
mstreamt & result() const
virtual void typecheck_asm(code_asmt &code)
virtual void typecheck_expr_unary_arithmetic(exprt &expr)
static void make_already_typechecked(exprt &expr)
void typecheck_function_body(symbolt &symbol)
Type for C bit fields These are both 'bitvector_typet' (they have a width) and 'type_with_subtypet' (...
virtual void implicit_typecast_bool(exprt &expr)
virtual code_blockt instantiate_gcc_polymorphic_builtin(const irep_idt &identifier, const symbol_exprt &function_symbol)
virtual void typecheck_expr_function_identifier(exprt &expr)
virtual void typecheck_label(code_labelt &code)
virtual void typecheck_expr_dereference(exprt &expr)
codet representation of a goto statement.
void move_symbol(symbolt &symbol)
codet representation of a label for branch targets.
#define PRECONDITION(CONDITION)
void typecheck_symbol(symbolt &symbol)
exprt typecheck_saturating_arithmetic(const side_effect_expr_function_callt &expr)
virtual void typecheck_spec_decreases(codet &code)
virtual bool is_complete_type(const typet &type) const
virtual void typecheck_c_enum_tag_type(c_enum_tag_typet &type)
virtual void throw_on_side_effects(const exprt &expr)
virtual void typecheck_expression(codet &code)
virtual void typecheck_conditional_targets(exprt::operandst &targets, const std::function< void(exprt &)> typecheck_target, const std::string &clause_type)
virtual void typecheck_expr_unary_boolean(exprt &expr)
virtual optionalt< symbol_exprt > typecheck_gcc_polymorphic_builtin(const irep_idt &identifier, const exprt::operandst &arguments, const source_locationt &source_location)
symbol_tablet & symbol_table
virtual bool gcc_types_compatible_p(const typet &, const typet &)
already_typechecked_typet(typet type)
virtual void typecheck_goto(code_gotot &code)
virtual void typecheck_code(codet &code)
virtual void typecheck_side_effect_gcc_conditional_expression(side_effect_exprt &expr)
virtual void typecheck_arithmetic_pointer(const exprt &expr)
virtual void make_constant_index(exprt &expr)
virtual exprt typecheck_shuffle_vector(const side_effect_expr_function_callt &expr)
const irep_idt & id() const
virtual void typecheck_expr_trinary(if_exprt &expr)
virtual void typecheck_typedef_type(typet &type)
std::vector< exprt > operandst
virtual void typecheck_typeof_type(typet &type)
void typecheck_redefinition_type(symbolt &old_symbol, symbolt &new_symbol)
virtual void typecheck_switch(codet &code)
nonstd::optional< T > optionalt
virtual void typecheck_side_effect_assignment(side_effect_exprt &expr)
id_type_mapt parameter_map
virtual void typecheck_expr_rel_vector(binary_exprt &expr)
virtual void typecheck_dowhile(code_dowhilet &code)
void designator_enter(const typet &type, designatort &designator)
std::map< irep_idt, source_locationt > labels_used
virtual void typecheck_expr_ptrmember(exprt &expr)
virtual void typecheck_expr(exprt &expr)
codet representation of a "return from a function" statement.
virtual void typecheck_for(codet &code)
A base class for shift and rotate operators.
virtual void typecheck_spec_function_pointer_obeys_contract(exprt &expr)
c_typecheck_baset(symbol_tablet &_symbol_table, const std::string &_module, message_handlert &_message_handler)
C enum tag type, i.e., c_enum_typet with an identifier.
virtual void typecheck_decl(codet &code)
virtual exprt do_initializer_rec(const exprt &value, const typet &type, bool force_constant)
initialize something of type ‘type’ with given value ‘value’
virtual void typecheck_gcc_switch_case_range(code_gcc_switch_case_ranget &)
static bool is_numeric_type(const typet &src)
exprt typecheck_builtin_overflow(side_effect_expr_function_callt &expr, const irep_idt &arith_op)
virtual void typecheck_expr_main(exprt &expr)
virtual void typecheck()=0
Base class of fixed-width bit-vector types.
designatort make_designator(const typet &type, const exprt &src)
std::map< irep_idt, source_locationt > labels_defined
void add_parameters_to_symbol_table(symbolt &symbol)
Create symbols for parameter of the code-typed symbol symbol.
virtual void typecheck_expr_cw_va_arg_typeof(exprt &expr)
A base class for relations, i.e., binary predicates whose two operands have the same type.
virtual void typecheck_assign(codet &expr)
virtual void typecheck_expr_constant(exprt &expr)
virtual ~c_typecheck_baset()
virtual void typecheck_custom_type(typet &type)
virtual void typecheck_start_thread(codet &code)
virtual void typecheck_return(code_frontend_returnt &)
const typet & subtype() const
static void make_already_typechecked(typet &type)
virtual void typecheck_ifthenelse(code_ifthenelset &code)
virtual void check_history_expr_return_value(const exprt &expr, std::string &clause_type)
Checks that no history expr or return_value exists in expr.
virtual void typecheck_spec_assigns(exprt::operandst &targets)
virtual void typecheck_c_enum_type(typet &type)
void increment_designator(designatort &designator)
virtual void start_typecheck_code()
virtual void typecheck_switch_case(code_switch_caset &code)
virtual void typecheck_compound_type(struct_union_typet &type)
virtual void typecheck_gcc_computed_goto(codet &code)
virtual void typecheck_code_type(code_typet &type)
virtual void typecheck_expr_sizeof(exprt &expr)
virtual void typecheck_gcc_local_label(codet &code)
std::unordered_map< irep_idt, typet > id_type_mapt
c_typecheck_baset(symbol_tablet &_symbol_table1, const symbol_tablet &_symbol_table2, const std::string &_module, message_handlert &_message_handler)
void apply_asm_label(const irep_idt &asm_label, symbolt &symbol)
An expression containing a side effect.
virtual void typecheck_compound_body(struct_union_typet &type)
virtual void typecheck_expr_index(exprt &expr)
Base class for all expressions.
virtual void make_index_type(exprt &expr)
virtual void typecheck_block(code_blockt &code)
virtual void typecheck_expr_builtin_va_arg(exprt &expr)
virtual void implicit_typecast(exprt &expr, const typet &type)
virtual void adjust_function_parameter(typet &type) const
Data structure for representing an arbitrary statement in a program.
virtual void typecheck_expr_comma(exprt &expr)
virtual void typecheck_expr_typecast(exprt &expr)