cprover
cpp_typecheckt Class Reference

#include <cpp_typecheck.h>

Inheritance diagram for cpp_typecheckt:
[legend]
Collaboration diagram for cpp_typecheckt:
[legend]

Classes

class  instantiation_levelt
 
class  instantiationt
 
struct  method_bodyt
 

Public Member Functions

 cpp_typecheckt (cpp_parse_treet &_cpp_parse_tree, symbol_tablet &_symbol_table, const std::string &_module, message_handlert &message_handler)
 
 cpp_typecheckt (cpp_parse_treet &_cpp_parse_tree, symbol_tablet &_symbol_table1, const symbol_tablet &_symbol_table2, const std::string &_module, message_handlert &message_handler)
 
virtual ~cpp_typecheckt ()
 
virtual void typecheck ()
 typechecking main method More...
 
virtual std::string to_string (const typet &type)
 
virtual std::string to_string (const exprt &expr)
 
exprt resolve (const cpp_namet &cpp_name, const cpp_typecheck_resolvet::wantt want, const cpp_typecheck_fargst &fargs, bool fail_with_exception=true)
 
virtual void typecheck_expr (exprt &expr)
 
bool cpp_is_pod (const typet &type) const
 
codet cpp_constructor (const source_locationt &source_location, const exprt &object, const exprt::operandst &operands)
 
bool standard_conversion_lvalue_to_rvalue (const exprt &expr, exprt &new_expr) const
 Lvalue-to-rvalue conversion. More...
 
bool standard_conversion_array_to_pointer (const exprt &expr, exprt &new_expr) const
 Array-to-pointer conversion. More...
 
bool standard_conversion_function_to_pointer (const exprt &expr, exprt &new_expr) const
 Function-to-pointer conversion. More...
 
bool standard_conversion_qualification (const exprt &expr, const typet &, exprt &new_expr) const
 Qualification conversion. More...
 
bool standard_conversion_integral_promotion (const exprt &expr, exprt &new_expr) const
 Integral-promotion conversion. More...
 
bool standard_conversion_floating_point_promotion (const exprt &expr, exprt &new_expr) const
 Floating-point-promotion conversion. More...
 
bool standard_conversion_integral_conversion (const exprt &expr, const typet &type, exprt &new_expr) const
 Integral conversion. More...
 
bool standard_conversion_floating_integral_conversion (const exprt &expr, const typet &type, exprt &new_expr) const
 Floating-integral conversion. More...
 
bool standard_conversion_floating_point_conversion (const exprt &expr, const typet &type, exprt &new_expr) const
 Floating-point conversion. More...
 
bool standard_conversion_pointer (const exprt &expr, const typet &type, exprt &new_expr)
 Pointer conversion. More...
 
bool standard_conversion_pointer_to_member (const exprt &expr, const typet &type, exprt &new_expr)
 Pointer-to-member conversion. More...
 
bool standard_conversion_boolean (const exprt &expr, exprt &new_expr) const
 Boolean conversion. More...
 
bool standard_conversion_sequence (const exprt &expr, const typet &type, exprt &new_expr, unsigned &rank)
 Standard Conversion Sequence. More...
 
bool user_defined_conversion_sequence (const exprt &expr, const typet &type, exprt &new_expr, unsigned &rank)
 User-defined conversion sequence. More...
 
bool reference_related (const exprt &expr, const typet &type) const
 Reference-related. More...
 
bool reference_compatible (const exprt &expr, const typet &type, unsigned &rank) const
 Reference-compatible. More...
 
bool reference_binding (exprt expr, const typet &type, exprt &new_expr, unsigned &rank)
 Reference binding. More...
 
bool implicit_conversion_sequence (const exprt &expr, const typet &type, exprt &new_expr, unsigned &rank)
 implicit conversion sequence More...
 
bool implicit_conversion_sequence (const exprt &expr, const typet &type, unsigned &rank)
 implicit conversion sequence More...
 
bool implicit_conversion_sequence (const exprt &expr, const typet &type, exprt &new_expr)
 implicit conversion sequence More...
 
void reference_initializer (exprt &expr, const typet &type)
 A reference to type "cv1 T1" is initialized by an expression of type "cv2 T2" as follows: More...
 
virtual void implicit_typecast (exprt &expr, const typet &type)
 
void get_bases (const struct_typet &type, std::set< irep_idt > &set_bases) const
 
void get_virtual_bases (const struct_typet &type, std::list< irep_idt > &vbases) const
 
bool subtype_typecast (const struct_typet &from, const struct_typet &to) const
 
void make_ptr_typecast (exprt &expr, const typet &dest_type)
 
bool const_typecast (const exprt &expr, const typet &type, exprt &new_expr)
 
bool dynamic_typecast (const exprt &expr, const typet &type, exprt &new_expr)
 
bool reinterpret_typecast (const exprt &expr, const typet &type, exprt &new_expr, bool check_constantness=true)
 
bool static_typecast (const exprt &expr, const typet &type, exprt &new_expr, bool check_constantness=true)
 
- Public Member Functions inherited from c_typecheck_baset
 c_typecheck_baset (symbol_tablet &_symbol_table, const std::string &_module, message_handlert &_message_handler)
 
 c_typecheck_baset (symbol_tablet &_symbol_table1, const symbol_tablet &_symbol_table2, const std::string &_module, message_handlert &_message_handler)
 
virtual ~c_typecheck_baset ()
 
- Public Member Functions inherited from typecheckt
 typecheckt (message_handlert &_message_handler)
 
virtual ~typecheckt ()
 
void err_location (const source_locationt &loc)
 
void err_location (const exprt &src)
 
void err_location (const typet &src)
 
virtual bool typecheck_main ()
 
- Public Member Functions inherited from messaget
virtual void set_message_handler (message_handlert &_message_handler)
 
message_handlertget_message_handler ()
 
 messaget ()
 
 messaget (const messaget &other)
 
 messaget (message_handlert &_message_handler)
 
virtual ~messaget ()
 
mstreamtget_mstream (unsigned message_level)
 
mstreamterror ()
 
mstreamtwarning ()
 
mstreamtresult ()
 
mstreamtstatus ()
 
mstreamtstatistics ()
 
mstreamtprogress ()
 
mstreamtdebug ()
 
- Public Member Functions inherited from namespacet
 namespacet (const symbol_tablet &_symbol_table)
 
 namespacet (const symbol_tablet &_symbol_table1, const symbol_tablet &_symbol_table2)
 
 namespacet (const symbol_tablet *_symbol_table1, const symbol_tablet *_symbol_table2)
 
virtual bool lookup (const irep_idt &name, const symbolt *&symbol) const
 
virtual unsigned get_max (const std::string &prefix) const
 
const symbol_tabletget_symbol_table () const
 
- Public Member Functions inherited from namespace_baset
const symboltlookup (const irep_idt &name) const
 
const symboltlookup (const irept &irep) const
 
virtual ~namespace_baset ()
 
void follow_symbol (irept &irep) const
 
void follow_macros (exprt &expr) const
 
const typetfollow (const typet &src) const
 
const typetfollow_tag (const union_tag_typet &src) const
 
const typetfollow_tag (const struct_tag_typet &src) const
 
const typetfollow_tag (const c_enum_tag_typet &src) const
 

Protected Types

typedef std::list< instantiationtinstantiation_stackt
 
typedef std::list< method_bodytmethod_bodiest
 
- Protected Types inherited from c_typecheck_baset
typedef std::unordered_map< irep_idt, typet, irep_id_hashid_type_mapt
 
typedef std::unordered_map< irep_idt, irep_idt, irep_id_hashasm_label_mapt
 

Protected Member Functions

void convert (cpp_linkage_spect &)
 
void convert (cpp_namespace_spect &)
 
void convert (cpp_usingt &)
 
void convert (cpp_itemt &)
 
void convert (cpp_declarationt &)
 
void convert (cpp_declaratort &)
 
void convert (cpp_static_assertt &)
 
void convert_initializer (symbolt &symbol)
 Initialize an object with a value. More...
 
void convert_function (symbolt &symbol)
 
void convert_pmop (exprt &expr)
 
void convert_anonymous_union (cpp_declarationt &declaration, codet &new_code)
 
void convert_anon_struct_union_member (const cpp_declarationt &declaration, const irep_idt &access, struct_typet::componentst &components)
 
void salvage_default_arguments (const template_typet &old_type, template_typet &new_type)
 
void convert_template_declaration (cpp_declarationt &declaration)
 
void convert_non_template_declaration (cpp_declarationt &declaration)
 
void convert_template_function_or_member_specialization (cpp_declarationt &declaration)
 
void convert_class_template_specialization (cpp_declarationt &declaration)
 
void typecheck_class_template (cpp_declarationt &declaration)
 
void typecheck_function_template (cpp_declarationt &declaration)
 typecheck function templates More...
 
void typecheck_class_template_member (cpp_declarationt &declaration)
 typecheck class template members; these can be methods or static members More...
 
std::string class_template_identifier (const irep_idt &base_name, const template_typet &template_type, const cpp_template_args_non_tct &partial_specialization_args)
 
std::string function_template_identifier (const irep_idt &base_name, const template_typet &template_type, const typet &function_type)
 
cpp_template_args_tct typecheck_template_args (const source_locationt &source_location, const symbolt &template_symbol, const cpp_template_args_non_tct &template_args)
 
void show_instantiation_stack (std::ostream &)
 
const symboltclass_template_symbol (const source_locationt &source_location, const symbolt &template_symbol, const cpp_template_args_tct &specialization_template_args, const cpp_template_args_tct &full_template_args)
 
void elaborate_class_template (const typet &type)
 elaborate class template instances More...
 
const symboltinstantiate_template (const source_locationt &source_location, const symbolt &symbol, const cpp_template_args_tct &specialization_template_args, const cpp_template_args_tct &full_template_args, const typet &specialization=typet(ID_nil))
 
void elaborate_class_template (const source_locationt &source_location, const symbol_typet &type)
 
std::string template_suffix (const cpp_template_args_tct &template_args)
 
void convert_parameters (const irep_idt &mode, code_typet &function_type)
 
void convert_parameter (const irep_idt &mode, code_typet::parametert &parameter)
 
void default_ctor (const source_locationt &source_location, const irep_idt &base_name, cpp_declarationt &ctor) const
 Generate code for implicit default constructors. More...
 
void default_cpctor (const symbolt &, cpp_declarationt &cpctor) const
 Generate code for implicit default copy constructor. More...
 
void default_assignop (const symbolt &symbol, cpp_declarationt &cpctor)
 Generate declaration of the implicit default assignment operator. More...
 
void default_assignop_value (const symbolt &symbol, cpp_declaratort &declarator)
 Generate code for the implicit default assignment operator. More...
 
void default_dtor (const symbolt &symb, cpp_declarationt &dtor)
 Note: More...
 
codet dtor (const symbolt &symb)
 produces destructor code for a class object More...
 
void check_member_initializers (const irept &bases, const struct_typet::componentst &components, const irept &initializers)
 Check a constructor initialization-list. More...
 
bool check_component_access (const struct_union_typet::componentt &component, const struct_union_typet &struct_union_type)
 
void full_member_initialization (const struct_union_typet &struct_union_type, irept &initializers)
 Build the full initialization list of the constructor. More...
 
bool find_cpctor (const symbolt &symbol) const
 
bool find_assignop (const symbolt &symbol) const
 
bool find_dtor (const symbolt &symbol) const
 
bool find_parent (const symbolt &symb, const irep_idt &base_name, irep_idt &identifier)
 
bool get_component (const source_locationt &source_location, const exprt &object, const irep_idt &component_name, exprt &member)
 
void new_temporary (const source_locationt &source_location, const typet &, const exprt::operandst &ops, exprt &temporary)
 
void new_temporary (const source_locationt &source_location, const typet &, const exprt &op, exprt &temporary)
 
void static_and_dynamic_initialization ()
 Initialization of static objects: More...
 
void do_not_typechecked ()
 
void clean_up ()
 
void add_base_components (const struct_typet &from, const irep_idt &access, struct_typet &to, std::set< irep_idt > &bases, std::set< irep_idt > &vbases, bool is_virtual)
 
bool cast_away_constness (const typet &t1, const typet &t2) const
 
void do_virtual_table (const symbolt &symbol)
 
void add_method_body (symbolt *_method_symbol)
 
void typecheck_type (typet &type)
 
cpp_scopettypecheck_template_parameters (template_typet &type)
 
void typecheck_compound_type (struct_union_typet &type)
 
void check_fixed_size_array (typet &type)
 check that an array has fixed size More...
 
void typecheck_enum_type (typet &type)
 
cpp_scopettag_scope (const irep_idt &_base_name, bool has_body, bool tag_only_declaration)
 
void typecheck_compound_declarator (const symbolt &symbol, const cpp_declarationt &declaration, cpp_declaratort &declarator, struct_typet::componentst &components, const irep_idt &access, bool is_static, bool is_typedef, bool is_mutable)
 
void typecheck_friend_declaration (symbolt &symbol, cpp_declarationt &cpp_declaration)
 
void put_compound_into_scope (const struct_union_typet::componentt &component)
 
void typecheck_compound_body (symbolt &symbol)
 
void typecheck_compound_body (struct_union_typet &type)
 
void typecheck_enum_body (symbolt &symbol)
 
void typecheck_method_bodies (method_bodiest &)
 
void typecheck_compound_bases (struct_typet &type)
 
void add_anonymous_members_to_scope (const symbolt &struct_union_symbol)
 
void move_member_initializers (irept &initializers, const typet &type, exprt &value)
 
void typecheck_member_function (const irep_idt &compound_identifier, struct_typet::componentt &component, irept &initializers, const typet &method_qualifier, exprt &value)
 
void add_this_to_method_type (const irep_idt &compound_identifier, typet &method_type, const typet &method_qualifier)
 
irep_idt function_identifier (const typet &type)
 for function overloading More...
 
void zero_initializer (const exprt &object, const typet &type, const source_locationt &source_location, exprt::operandst &ops)
 
virtual void typecheck_code (codet &code)
 
virtual void typecheck_try_catch (codet &code)
 
virtual void typecheck_member_initializer (codet &code)
 
virtual void typecheck_decl (codet &code)
 
virtual void typecheck_block (codet &code)
 
virtual void typecheck_ifthenelse (code_ifthenelset &code)
 
virtual void typecheck_while (code_whilet &code)
 
virtual void typecheck_switch (code_switcht &code)
 
const struct_typetthis_struct_type ()
 
codet cpp_destructor (const source_locationt &source_location, const typet &type, const exprt &object)
 
void explicit_typecast_ambiguity (exprt &expr)
 
void typecheck_expr_main (exprt &expr)
 Called after the operands are done. More...
 
void typecheck_expr_member (exprt &expr)
 
void typecheck_expr_ptrmember (exprt &expr)
 
void typecheck_expr_throw (exprt &expr)
 
void typecheck_function_expr (exprt &expr, const cpp_typecheck_fargst &fargs)
 
void typecheck_expr_cpp_name (exprt &expr, const cpp_typecheck_fargst &fargs)
 
void typecheck_expr_member (exprt &expr, const cpp_typecheck_fargst &fargs)
 
void typecheck_expr_ptrmember (exprt &expr, const cpp_typecheck_fargst &fargs)
 
void typecheck_cast_expr (exprt &expr)
 
void typecheck_expr_trinary (if_exprt &expr)
 
void typecheck_expr_binary_arithmetic (exprt &expr)
 
void typecheck_expr_explicit_typecast (exprt &expr)
 
void typecheck_expr_explicit_constructor_call (exprt &expr)
 
void typecheck_expr_address_of (exprt &expr)
 
void typecheck_expr_dereference (exprt &expr)
 
void typecheck_expr_function_identifier (exprt &expr)
 
void typecheck_expr_reference_to (exprt &expr)
 
void typecheck_expr_this (exprt &expr)
 
void typecheck_expr_new (exprt &expr)
 
void typecheck_expr_sizeof (exprt &expr)
 
void typecheck_expr_delete (exprt &expr)
 
void typecheck_expr_side_effect (side_effect_exprt &expr)
 
void typecheck_side_effect_assignment (side_effect_exprt &expr)
 
void typecheck_side_effect_inc_dec (side_effect_exprt &expr)
 
void typecheck_expr_typecast (exprt &expr)
 
void typecheck_expr_index (exprt &expr)
 
void typecheck_expr_rel (binary_relation_exprt &expr)
 
void typecheck_expr_comma (exprt &expr)
 
void typecheck_function_call_arguments (side_effect_expr_function_callt &expr)
 
bool operator_is_overloaded (exprt &expr)
 
bool overloadable (const exprt &expr)
 
void add_implicit_dereference (exprt &expr)
 
void typecheck_side_effect_function_call (side_effect_expr_function_callt &expr)
 
void typecheck_method_application (side_effect_expr_function_callt &expr)
 
void typecheck_assign (codet &code)
 
- Protected Member Functions inherited from c_typecheck_baset
virtual void do_initializer (exprt &initializer, const typet &type, bool force_constant)
 
virtual exprt do_initializer_rec (const exprt &value, const typet &type, bool force_constant)
 initialize something of type `type' with given value `value' More...
 
virtual exprt do_initializer_list (const exprt &value, const typet &type, bool force_constant)
 
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)
 
designatort make_designator (const typet &type, const exprt &src)
 
void designator_enter (const typet &type, designatort &designator)
 
void increment_designator (designatort &designator)
 
bool gcc_vector_types_compatible (const vector_typet &, const vector_typet &)
 
virtual void implicit_typecast_arithmetic (exprt &expr)
 
virtual void implicit_typecast_arithmetic (exprt &expr1, exprt &expr2)
 
virtual void implicit_typecast_bool (exprt &expr)
 
virtual void start_typecheck_code ()
 
virtual void typecheck_asm (codet &code)
 
virtual void typecheck_break (codet &code)
 
virtual void typecheck_continue (codet &code)
 
virtual void typecheck_expression (codet &code)
 
virtual void typecheck_for (codet &code)
 
virtual void typecheck_goto (code_gotot &code)
 
virtual void typecheck_label (code_labelt &code)
 
virtual void typecheck_switch_case (code_switch_caset &code)
 
virtual void typecheck_gcc_computed_goto (codet &code)
 
virtual void typecheck_gcc_switch_case_range (codet &code)
 
virtual void typecheck_gcc_local_label (codet &code)
 
virtual void typecheck_return (codet &code)
 
virtual void typecheck_dowhile (code_dowhilet &code)
 
virtual void typecheck_start_thread (codet &code)
 
virtual void typecheck_spec_expr (codet &code, const irep_idt &spec)
 
virtual void typecheck_expr_builtin_va_arg (exprt &expr)
 
virtual void typecheck_expr_builtin_offsetof (exprt &expr)
 
virtual void typecheck_expr_cw_va_arg_typeof (exprt &expr)
 
virtual void typecheck_expr_operands (exprt &expr)
 
virtual void typecheck_expr_constant (exprt &expr)
 
virtual void typecheck_expr_unary_arithmetic (exprt &expr)
 
virtual void typecheck_expr_unary_boolean (exprt &expr)
 
virtual void typecheck_expr_shifts (shift_exprt &expr)
 
virtual void typecheck_expr_pointer_arithmetic (exprt &expr)
 
virtual void typecheck_arithmetic_pointer (const exprt &expr)
 
virtual void typecheck_expr_binary_boolean (exprt &expr)
 
virtual void typecheck_expr_rel_vector (binary_relation_exprt &expr)
 
virtual void adjust_float_rel (exprt &expr)
 
virtual void typecheck_expr_symbol (exprt &expr)
 
virtual void typecheck_expr_alignof (exprt &expr)
 
virtual void typecheck_side_effect_gcc_conditional_expression (side_effect_exprt &expr)
 
virtual void typecheck_side_effect_statement_expression (side_effect_exprt &expr)
 
virtual exprt do_special_functions (side_effect_expr_function_callt &expr)
 
virtual void make_index_type (exprt &expr)
 
virtual void make_constant (exprt &expr)
 
virtual void make_constant_index (exprt &expr)
 
virtual void make_constant_rec (exprt &expr)
 
virtual bool gcc_types_compatible_p (const typet &, const typet &)
 
virtual void typecheck_c_enum_type (typet &type)
 
virtual void typecheck_c_enum_tag_type (c_enum_tag_typet &type)
 
virtual void typecheck_code_type (code_typet &type)
 
virtual void typecheck_symbol_type (typet &type)
 
virtual void typecheck_c_bit_field_type (c_bit_field_typet &type)
 
virtual void typecheck_typeof_type (typet &type)
 
virtual void typecheck_array_type (array_typet &type)
 
virtual void typecheck_vector_type (vector_typet &type)
 
virtual void typecheck_custom_type (typet &type)
 
virtual void adjust_function_parameter (typet &type) const
 
virtual bool is_complete_type (const typet &type) const
 
typet enum_constant_type (const mp_integer &min, const mp_integer &max) const
 
typet enum_underlying_type (const mp_integer &min, const mp_integer &max, bool is_packed) const
 
void make_already_typechecked (typet &dest)
 
void add_argc_argv (const symbolt &main_symbol)
 
void move_symbol (symbolt &symbol, symbolt *&new_symbol)
 
void move_symbol (symbolt &symbol)
 
void typecheck_declaration (ansi_c_declarationt &)
 
void typecheck_symbol (symbolt &symbol)
 
void typecheck_new_symbol (symbolt &symbol)
 
void typecheck_redefinition_type (symbolt &old_symbol, symbolt &new_symbol)
 
void typecheck_redefinition_non_type (symbolt &old_symbol, symbolt &new_symbol)
 
void typecheck_function_body (symbolt &symbol)
 
virtual void do_initializer (symbolt &symbol)
 
void apply_asm_label (const irep_idt &asm_label, symbolt &symbol)
 

Static Protected Member Functions

static bool has_const (const typet &type)
 
static bool has_volatile (const typet &type)
 
- Static Protected Member Functions inherited from c_typecheck_baset
static void add_rounding_mode (exprt &)
 
static bool is_numeric_type (const typet &src)
 

Protected Attributes

cpp_scopest cpp_scopes
 
cpp_parse_treetcpp_parse_tree
 
irep_idt current_linkage_spec
 
instantiation_stackt instantiation_stack
 
unsigned template_counter
 
unsigned anon_counter
 
template_mapt template_map
 
method_bodiest method_bodies
 
- Protected Attributes inherited from c_typecheck_baset
symbol_tabletsymbol_table
 
const irep_idt module
 
const irep_idt mode
 
symbolt current_symbol
 
id_type_mapt parameter_map
 
bool break_is_allowed
 
bool continue_is_allowed
 
bool case_is_allowed
 
typet switch_op_type
 
typet return_type
 
std::map< irep_idt, source_locationtlabels_defined
 
std::map< irep_idt, source_locationtlabels_used
 
std::list< codetclean_code
 
asm_label_mapt asm_label_map
 
- Protected Attributes inherited from messaget
message_handlertmessage_handler
 
mstreamt mstream
 
- Protected Attributes inherited from namespacet
const symbol_tabletsymbol_table1
 
const symbol_tabletsymbol_table2
 

Private Types

typedef std::list< irep_idtdynamic_initializationst
 

Private Attributes

dynamic_initializationst dynamic_initializations
 
bool disable_access_control
 

Friends

class cpp_typecheck_resolvet
 
class cpp_declarator_convertert
 

Additional Inherited Members

- Public Types inherited from messaget
enum  message_levelt {
  M_ERROR =1, M_WARNING =2, M_RESULT =4, M_STATUS =6,
  M_STATISTICS =8, M_PROGRESS =9, M_DEBUG =10
}
 
- Static Public Member Functions inherited from messaget
static mstreamteom (mstreamt &m)
 
static mstreamtendl (mstreamt &m)
 

Detailed Description

Definition at line 44 of file cpp_typecheck.h.

Member Typedef Documentation

§ dynamic_initializationst

Definition at line 594 of file cpp_typecheck.h.

§ instantiation_stackt

Definition at line 182 of file cpp_typecheck.h.

§ method_bodiest

typedef std::list<method_bodyt> cpp_typecheckt::method_bodiest
protected

Definition at line 340 of file cpp_typecheck.h.

Constructor & Destructor Documentation

§ cpp_typecheckt() [1/2]

cpp_typecheckt::cpp_typecheckt ( cpp_parse_treet _cpp_parse_tree,
symbol_tablet _symbol_table,
const std::string &  _module,
message_handlert message_handler 
)
inline

Definition at line 47 of file cpp_typecheck.h.

§ cpp_typecheckt() [2/2]

cpp_typecheckt::cpp_typecheckt ( cpp_parse_treet _cpp_parse_tree,
symbol_tablet _symbol_table1,
const symbol_tablet _symbol_table2,
const std::string &  _module,
message_handlert message_handler 
)
inline

Definition at line 60 of file cpp_typecheck.h.

§ ~cpp_typecheckt()

virtual cpp_typecheckt::~cpp_typecheckt ( )
inlinevirtual

Definition at line 75 of file cpp_typecheck.h.

References to_string(), and typecheck().

Member Function Documentation

§ add_anonymous_members_to_scope()

§ add_base_components()

§ add_implicit_dereference()

§ add_method_body()

§ add_this_to_method_type()

§ cast_away_constness()

bool cpp_typecheckt::cast_away_constness ( const typet t1,
const typet t2 
) const
protected

§ check_component_access()

§ check_fixed_size_array()

void cpp_typecheckt::check_fixed_size_array ( typet type)
protected

§ check_member_initializers()

void cpp_typecheckt::check_member_initializers ( const irept bases,
const struct_typet::componentst components,
const irept initializers 
)
protected

Check a constructor initialization-list.

An initializer has to be a data member declared in this class or a direct-parent constructor.

Parameters
basesthe parents of the class
componentsthe components of the class
initializersthe constructor initializers
Returns
If an invalid initializer is found, then the method outputs an error message and throws a 0 exception.

Definition at line 519 of file cpp_typecheck_constructor.cpp.

References messaget::eom(), messaget::error(), irept::find(), forall_irep, irept::get(), irept::get_sub(), cpp_namet::has_template_args(), irept::id(), irept::is_not_nil(), namespacet::lookup(), symbolt::name, messaget::mstreamt::source_location, to_cpp_name(), symbolt::type, and typecheck_type().

Referenced by cpp_declarator_convertert::convert(), and typecheck_compound_body().

§ class_template_identifier()

std::string cpp_typecheckt::class_template_identifier ( const irep_idt base_name,
const template_typet template_type,
const cpp_template_args_non_tct partial_specialization_args 
)
protected

§ class_template_symbol()

§ clean_up()

§ const_typecast()

§ convert() [1/7]

void cpp_typecheckt::convert ( cpp_linkage_spect linkage_spec)
protected

§ convert() [2/7]

§ convert() [3/7]

§ convert() [4/7]

§ convert() [5/7]

§ convert() [6/7]

void cpp_typecheckt::convert ( cpp_declaratort )
protected

§ convert() [7/7]

§ convert_anon_struct_union_member()

§ convert_anonymous_union()

§ convert_class_template_specialization()

§ convert_function()

§ convert_initializer()

§ convert_non_template_declaration()

§ convert_parameter()

§ convert_parameters()

void cpp_typecheckt::convert_parameters ( const irep_idt mode,
code_typet function_type 
)
protected

Definition at line 64 of file cpp_typecheck_function.cpp.

References convert_parameter(), and code_typet::parameters().

Referenced by convert_function().

§ convert_pmop()

§ convert_template_declaration()

§ convert_template_function_or_member_specialization()

§ cpp_constructor()

codet cpp_typecheckt::cpp_constructor ( const source_locationt source_location,
const exprt object,
const exprt::operandst operands 
)

§ cpp_destructor()

§ cpp_is_pod()

§ default_assignop()

§ default_assignop_value()

void cpp_typecheckt::default_assignop_value ( const symbolt symbol,
cpp_declaratort declarator 
)
protected

§ default_cpctor()

§ default_ctor()

void cpp_typecheckt::default_ctor ( const source_locationt source_location,
const irep_idt base_name,
cpp_declarationt ctor 
) const
protected

§ default_dtor()

§ do_not_typechecked()

§ do_virtual_table()

§ dtor()

§ dynamic_typecast()

§ elaborate_class_template() [1/2]

§ elaborate_class_template() [2/2]

void cpp_typecheckt::elaborate_class_template ( const source_locationt source_location,
const symbol_typet type 
)
protected

§ explicit_typecast_ambiguity()

§ find_assignop()

§ find_cpctor()

bool cpp_typecheckt::find_cpctor ( const symbolt symbol) const
protected

§ find_dtor()

bool cpp_typecheckt::find_dtor ( const symbolt symbol) const
protected

§ find_parent()

bool cpp_typecheckt::find_parent ( const symbolt symb,
const irep_idt base_name,
irep_idt identifier 
)
protected

§ full_member_initialization()

void cpp_typecheckt::full_member_initialization ( const struct_union_typet struct_union_type,
irept initializers 
)
protected

Build the full initialization list of the constructor.

First, all the direct-parent constructors are called. Second, all the non-pod data members are initialized.

Note: The initialization order follows the declaration order.

Parameters
struct_union_typethe class/struct/union
initializersthe constructor initializers
Returns
initializers is updated.

Definition at line 655 of file cpp_typecheck_constructor.cpp.

References irept::add(), exprt::add_source_location(), already_typechecked(), symbolt::base_name, struct_union_typet::components(), cpp_is_pod(), messaget::eom(), messaget::error(), irept::find(), forall_irep, Forall_irep, irept::get(), cpp_namet::get_base_name(), irept::get_sub(), get_virtual_bases(), cpp_namet::has_template_args(), irept::id(), id2string(), namespacet::lookup(), exprt::move_to_operands(), irept::move_to_sub(), symbolt::name, exprt::operands(), irept::set(), messaget::mstreamt::source_location, irept::swap(), to_cpp_name(), to_struct_type(), symbolt::type, exprt::type(), and typecheck_type().

Referenced by cpp_declarator_convertert::convert(), and typecheck_compound_body().

§ function_identifier()

§ function_template_identifier()

std::string cpp_typecheckt::function_template_identifier ( const irep_idt base_name,
const template_typet template_type,
const typet function_type 
)
protected

§ get_bases()

void cpp_typecheckt::get_bases ( const struct_typet type,
std::set< irep_idt > &  set_bases 
) const

§ get_component()

§ get_virtual_bases()

void cpp_typecheckt::get_virtual_bases ( const struct_typet type,
std::list< irep_idt > &  vbases 
) const

§ has_const()

bool cpp_typecheckt::has_const ( const typet type)
staticprotected

§ has_volatile()

bool cpp_typecheckt::has_volatile ( const typet type)
staticprotected

§ implicit_conversion_sequence() [1/3]

bool cpp_typecheckt::implicit_conversion_sequence ( const exprt expr,
const typet type,
exprt new_expr,
unsigned &  rank 
)

implicit conversion sequence

parameters: A typechecked expression 'expr', a destination
type 'type'.
Returns
True iff an implicit conversion sequence exists. The result of the conversion is stored in 'new_expr'. The rank of the sequence is stored in 'rank'

Definition at line 1453 of file cpp_typecheck_conversions.cpp.

References add_implicit_dereference(), is_reference(), reference_binding(), irept::set(), simplify_exprt::simplify(), simplify(), standard_conversion_sequence(), exprt::type(), and user_defined_conversion_sequence().

Referenced by implicit_conversion_sequence(), implicit_typecast(), cpp_typecheck_fargst::match(), reference_binding(), static_typecast(), typecheck_compound_body(), typecheck_expr_trinary(), and user_defined_conversion_sequence().

§ implicit_conversion_sequence() [2/3]

bool cpp_typecheckt::implicit_conversion_sequence ( const exprt expr,
const typet type,
unsigned &  rank 
)

implicit conversion sequence

parameters: A typechecked expression 'expr', a destination
type 'type'.
Returns
True iff an implicit conversion sequence exists. The rank of the sequence is stored in 'rank'

Definition at line 1509 of file cpp_typecheck_conversions.cpp.

References implicit_conversion_sequence().

§ implicit_conversion_sequence() [3/3]

bool cpp_typecheckt::implicit_conversion_sequence ( const exprt expr,
const typet type,
exprt new_expr 
)

implicit conversion sequence

parameters: A typechecked expression 'expr', a destination
type 'type'.
Returns
True iff an implicit conversion sequence exists. The result of the conversion is stored in 'new_expr'.

Definition at line 1495 of file cpp_typecheck_conversions.cpp.

References implicit_conversion_sequence().

§ implicit_typecast()

§ instantiate_template()

const symbolt & cpp_typecheckt::instantiate_template ( const source_locationt source_location,
const symbolt symbol,
const cpp_template_args_tct specialization_template_args,
const cpp_template_args_tct full_template_args,
const typet specialization = typet(ID_nil) 
)
protected

Definition at line 216 of file cpp_instantiate_template.cpp.

References irept::add(), typet::add_source_location(), cpp_scopet::add_using_scope(), template_mapt::apply(), cpp_template_args_baset::arguments(), symbolt::base_name, template_mapt::build(), cpp_idt::CLASS, struct_union_typet::components(), convert(), convert_non_template_declaration(), cpp_scopes, cpp_scopest::current_scope(), cpp_declarationt::declarators(), dstringt::empty(), messaget::eom(), messaget::error(), irept::find(), forall_expr, irept::get(), cpp_scopet::get_parent(), cpp_scopest::get_scope(), irept::get_sub(), cpp_scopest::go_to(), cpp_template_args_tct::has_unassigned(), irept::id(), id2string(), cpp_idt::id_class, cpp_scopest::id_map, id_set, cpp_idt::identifier, instantiation_stack, INVARIANT_STRUCTURED, cpp_storage_spect::is_auto(), cpp_idt::is_class(), cpp_storage_spect::is_extern(), cpp_storage_spect::is_mutable(), irept::is_not_nil(), cpp_storage_spect::is_register(), cpp_storage_spect::is_static(), cpp_declarationt::is_typedef(), cpp_member_spect::is_virtual(), cpp_scopet::lookup(), namespacet::lookup(), MAX_DEPTH, cpp_declarationt::member_spec(), symbolt::name, cpp_scopet::new_scope(), exprt::operands(), cpp_idt::prefix, template_mapt::print(), irept::remove(), cpp_save_scopet::restore(), cpp_scopet::SCOPE_ONLY, irept::set(), exprt::source_location(), messaget::mstreamt::source_location, cpp_declarationt::storage_spec(), cpp_idt::suffix, irept::swap(), cpp_idt::SYMBOL, c_typecheck_baset::symbol_table, symbol_tablet::symbols, template_map, cpp_idt::TEMPLATE_SCOPE, template_suffix(), cpp_declarationt::template_type(), to_cpp_declaration(), to_string(), to_struct_type(), symbolt::type, exprt::type(), typecheck_compound_declarator(), typecheck_template_parameters(), and symbolt::value.

Referenced by cpp_typecheck_resolvet::apply_template_args(), convert_class_template_specialization(), convert_template_function_or_member_specialization(), cpp_typecheck_resolvet::disambiguate_template_classes(), elaborate_class_template(), and cpp_typecheck_resolvet::guess_function_template_args().

§ make_ptr_typecast()

§ move_member_initializers()

§ new_temporary() [1/2]

§ new_temporary() [2/2]

void cpp_typecheckt::new_temporary ( const source_locationt source_location,
const typet type,
const exprt op,
exprt temporary 
)
protected

Definition at line 342 of file cpp_constructor.cpp.

References new_temporary().

§ operator_is_overloaded()

§ overloadable()

bool cpp_typecheckt::overloadable ( const exprt expr)
protected

§ put_compound_into_scope()

§ reference_binding()

bool cpp_typecheckt::reference_binding ( exprt  expr,
const typet type,
exprt new_expr,
unsigned &  rank 
)

Reference binding.

When a parameter of reference type binds directly (8.5.3) to an argument expression, the implicit conversion sequence is the identity conversion, unless the argument expression has a type that is a derived class of the parameter type, in which case the implicit conversion sequence is a derived-to-base Conversion (13.3.3.1).

If the parameter binds directly to the result of applying a conversion function to the argument expression, the implicit conversion sequence is a user-defined conversion sequence (13.3.3.1.2), with the second standard conversion sequence either an identity conversion or, if the conversion function returns an entity of a type that is a derived class of the parameter type, a derived-to-base Conversion.

When a parameter of reference type is not bound directly to an argument expression, the conversion sequence is the one required to convert the argument expression to the underlying type of the reference according to 13.3.3.1. Conceptually, this conversion sequence corresponds to copy-initializing a temporary of the underlying type with the argument expression. Any difference in top-level cv-qualification is subsumed by the initialization itself and does not constitute a conversion.

A standard conversion sequence cannot be formed if it requires binding a reference to non-const to an rvalue (except when binding an implicit object parameter; see the special rules for that case in 13.3.1).

parameters: A typechecked expression 'expr', a
reference 'type'.
Returns
True iff an the reference can be bound to the expression. The result of the conversion is stored in 'new_expr'.

Definition at line 1247 of file cpp_typecheck_conversions.cpp.

References irept::add(), add_implicit_dereference(), exprt::add_source_location(), struct_union_typet::components(), exprt::copy_to_operands(), irept::find(), namespace_baset::follow(), from_type(), side_effect_expr_function_callt::function(), irept::get(), irept::get_bool(), irept::get_sub(), irept::id(), implicit_conversion_sequence(), is_reference(), make_ptr_typecast(), exprt::make_typecast(), exprt::move_to_operands(), new_temporary(), address_of_exprt::object(), exprt::op0(), code_typet::parameters(), pointer_type(), c_qualifierst::read(), reference_compatible(), irept::remove(), code_typet::return_type(), irept::set(), exprt::source_location(), standard_conversion_sequence(), typet::subtype(), irept::swap(), to_code_type(), to_struct_type(), exprt::type(), typecheck_side_effect_function_call(), user_defined_conversion_sequence(), and c_qualifierst::write().

Referenced by implicit_conversion_sequence(), reference_initializer(), static_typecast(), and typecheck_compound_body().

§ reference_compatible()

bool cpp_typecheckt::reference_compatible ( const exprt expr,
const typet type,
unsigned &  rank 
) const

Reference-compatible.

parameters: A typechecked expression 'expr', a
reference 'type'.
Returns
True iff an the reference 'type' is reference-compatible to 'expr'.

Definition at line 1184 of file cpp_typecheck_conversions.cpp.

References is_reference(), c_qualifierst::is_subset_of(), c_qualifierst::read(), reference_related(), typet::subtype(), and exprt::type().

Referenced by reference_binding(), and typecheck_compound_body().

§ reference_initializer()

void cpp_typecheckt::reference_initializer ( exprt expr,
const typet type 
)

A reference to type "cv1 T1" is initialized by an expression of type "cv2 T2" as follows:

  • If the initializer expression

    • is an lvalue (but is not a bit-field), and "cv1 T1" is reference-compatible with "cv2 T2," or
    • has a class type (i.e., T2 is a class type) and can be implicitly converted to an lvalue of type "cv3 T3," where "cv1 T1" is reference-compatible with "cv3 T3" 92) (this conversion is selected by enumerating the applicable conversion functions (13.3.1.6) and choosing the best one through overload resolution (13.3)),

    then the reference is bound directly to the initializer expression lvalue in the first case, and the reference is bound to the lvalue result of the conversion in the second case. In these cases the reference is said to bind directly to the initializer expression.

  • Otherwise, the reference shall be to a non-volatile const type
    • If the initializer expression is an rvalue, with T2 a class type, and "cv1 T1" is reference-compatible with "cv2 T2," the reference is bound in one of the following ways (the choice is implementation-defined):

      • The reference is bound to the object represented by the rvalue (see 3.10) or to a sub-object within that object.
      • A temporary of type "cv1 T2" [sic] is created, and a constructor is called to copy the entire rvalue object into the temporary. The reference is bound to the temporary or to a sub-object within the temporary.

      The constructor that would be used to make the copy shall be callable whether or not the copy is actually done.

      Otherwise, a temporary of type "cv1 T1" is created and initialized from the initializer expression using the rules for a non-reference copy initialization (8.5). The reference is then bound to the temporary. If T1 is reference-related to T2, cv1 must be the same cv-qualification as, or greater cvqualification than, cv2; otherwise, the program is ill-formed.

Definition at line 1579 of file cpp_typecheck_conversions.cpp.

References add_implicit_dereference(), messaget::eom(), messaget::error(), exprt::find_source_location(), is_reference(), reference_binding(), messaget::mstreamt::source_location, and irept::swap().

Referenced by convert_initializer(), typecheck_compound_body(), and typecheck_member_initializer().

§ reference_related()

bool cpp_typecheckt::reference_related ( const exprt expr,
const typet type 
) const

Reference-related.

parameters: A typechecked expression 'expr',
a reference 'type'.
Returns
True iff an the reference 'type' is reference-related to 'expr'.

Definition at line 1147 of file cpp_typecheck_conversions.cpp.

References namespace_baset::follow(), irept::get(), irept::get_bool(), irept::id(), is_reference(), typet::subtype(), subtype_typecast(), to_struct_type(), and exprt::type().

Referenced by reference_compatible(), and typecheck_compound_body().

§ reinterpret_typecast()

§ resolve()

§ salvage_default_arguments()

void cpp_typecheckt::salvage_default_arguments ( const template_typet old_type,
template_typet new_type 
)
protected

§ show_instantiation_stack()

§ standard_conversion_array_to_pointer()

bool cpp_typecheckt::standard_conversion_array_to_pointer ( const exprt expr,
exprt new_expr 
) const

Array-to-pointer conversion.

An lvalue or rvalue of type "array of N T" or "array of unknown bound of T" can be converted to an rvalue of type "pointer to T." The result is a pointer to the first element of the array.

parameters: An array expression
Returns
True iff the array-to-pointer conversion is possible. The result of the conversion is stored in 'new_expr'.

Definition at line 70 of file cpp_typecheck_conversions.cpp.

References from_integer(), irept::id(), index_type(), and exprt::type().

Referenced by const_typecast(), reinterpret_typecast(), standard_conversion_sequence(), typecheck_compound_body(), and typecheck_expr_trinary().

§ standard_conversion_boolean()

bool cpp_typecheckt::standard_conversion_boolean ( const exprt expr,
exprt new_expr 
) const

Boolean conversion.

An rvalue of arithmetic, enumeration, pointer, or pointer to member type can be converted to an rvalue of type bool. A zero value, null pointer value, or null member pointer value is converted to false; any other value is converted to true.

parameters: A typechecked expression 'expr'
Returns
True iff the boolean conversion is possible. The result of the conversion is stored in 'new_expr'.

Definition at line 629 of file cpp_typecheck_conversions.cpp.

References irept::get_bool(), irept::id(), exprt::make_typecast(), c_qualifierst::read(), exprt::type(), and c_qualifierst::write().

Referenced by standard_conversion_sequence(), and typecheck_compound_body().

§ standard_conversion_floating_integral_conversion()

bool cpp_typecheckt::standard_conversion_floating_integral_conversion ( const exprt expr,
const typet type,
exprt new_expr 
) const

Floating-integral conversion.

An rvalue of a floating point type can be converted to an rvalue of an integer type. The conversion truncates; that is, the fractional part is discarded. The behavior is undefined if the truncated value cannot be represented in the destination type. [Note: If the destination type is bool, see 4.12. ]

An rvalue of an integer type or of an enumeration type can be converted to an rvalue of a floating point type. The result is exact if possible. Otherwise, it is an implementation-defined choice of either the next lower or higher representable value. [Note: loss of precision occurs if the integral value cannot be represented exactly as a value of the floating type. ] If the source type is bool, the value false is converted to zero and the value true is converted to one.

parameters: A typechecked expression 'expr'
Returns
True iff the conversion is possible. The result of the conversion is stored in 'new_expr'.

Definition at line 341 of file cpp_typecheck_conversions.cpp.

References irept::get_bool(), irept::id(), exprt::make_typecast(), c_qualifierst::read(), exprt::type(), and c_qualifierst::write().

Referenced by standard_conversion_sequence(), and typecheck_compound_body().

§ standard_conversion_floating_point_conversion()

bool cpp_typecheckt::standard_conversion_floating_point_conversion ( const exprt expr,
const typet type,
exprt new_expr 
) const

Floating-point conversion.

An rvalue of floating point type can be converted to an rvalue of another floating point type. If the source value can be exactly represented in the destination type, the result of the conversion is that exact representation. If the source value is between two adjacent destination values, the result of the conversion is an implementation-defined choice of either of those values. Otherwise, the behavior is undefined.

The conversions allowed as floating point promotions are excluded from the set of floating point conversions.

parameters: A typechecked expression 'expr', a destination
type 'type'
Returns
True iff the floating-point conversion is possible. The result of the conversion is stored in 'new_expr'.

Definition at line 393 of file cpp_typecheck_conversions.cpp.

References irept::get_bool(), irept::id(), exprt::make_typecast(), c_qualifierst::read(), exprt::type(), and c_qualifierst::write().

Referenced by standard_conversion_sequence(), and typecheck_compound_body().

§ standard_conversion_floating_point_promotion()

bool cpp_typecheckt::standard_conversion_floating_point_promotion ( const exprt expr,
exprt new_expr 
) const

Floating-point-promotion conversion.

An rvalue of type float can be converted to an rvalue of type double. The value is unchanged.

parameters: A typechecked expression 'expr'
Returns
True iff the integral promotion is possible. The result of the conversion is stored in 'new_expr'.

Definition at line 240 of file cpp_typecheck_conversions.cpp.

References configt::ansi_c, config, double_type(), float_type(), irept::get_bool(), exprt::make_typecast(), c_qualifierst::read(), configt::ansi_ct::single_width, to_floatbv_type(), exprt::type(), and c_qualifierst::write().

Referenced by standard_conversion_sequence(), and typecheck_compound_body().

§ standard_conversion_function_to_pointer()

bool cpp_typecheckt::standard_conversion_function_to_pointer ( const exprt expr,
exprt new_expr 
) const

Function-to-pointer conversion.

An lvalue of function type T can be converted to an rvalue of type "pointer to T." The result is a pointer to the function.50)

parameters: A function expression
Returns
True iff the array-to-pointer conversion is possible. The result of the conversion is stored in 'new_expr'.

Definition at line 94 of file cpp_typecheck_conversions.cpp.

References irept::get_bool().

Referenced by const_typecast(), reinterpret_typecast(), standard_conversion_sequence(), typecheck_compound_body(), and typecheck_expr_trinary().

§ standard_conversion_integral_conversion()

bool cpp_typecheckt::standard_conversion_integral_conversion ( const exprt expr,
const typet type,
exprt new_expr 
) const

Integral conversion.

An rvalue of type char, signed char, unsigned char, short int, An rvalue of an integer type can be converted to an rvalue of another integer type. An rvalue of an enumeration type can be converted to an rvalue of an integer type.

If the destination type is unsigned, the resulting value is the least unsigned integer congruent to the source integer (modulo 2n where n is the number of bits used to represent the unsigned type). [Note: In a two's complement representation, this conversion is conceptual and there is no change in the bit pattern (if there is no truncation). ]

If the destination type is signed, the value is unchanged if it can be represented in the destination type (and bit-field width); otherwise, the value is implementation-defined.

If the destination type is bool, see 4.12. If the source type is bool, the value false is converted to zero and the value true is converted to one.

The conversions allowed as integral promotions are excluded from the set of integral conversions.

parameters: A typechecked expression 'expr', a destination
type 'type'
Returns
True iff the integral promotion is possible. The result of the conversion is stored in 'new_expr'.

Definition at line 295 of file cpp_typecheck_conversions.cpp.

References irept::get_bool(), irept::id(), exprt::make_typecast(), c_qualifierst::read(), exprt::type(), and c_qualifierst::write().

Referenced by standard_conversion_sequence(), and typecheck_compound_body().

§ standard_conversion_integral_promotion()

bool cpp_typecheckt::standard_conversion_integral_promotion ( const exprt expr,
exprt new_expr 
) const

Integral-promotion conversion.

An rvalue of type char, signed char, unsigned char, short int, or unsigned short int can be converted to an rvalue of type int if int can represent all the values of the source type; otherwise, the source rvalue can be converted to an rvalue of type unsigned int.

An rvalue of type wchar_t (3.9.1) or an enumeration type (7.2) can be converted to an rvalue of the first of the following types that can represent all the values of its underlying type: int, unsigned int, long, or unsigned long.

An rvalue for an integral bit-field (9.6) can be converted to an rvalue of type int if int can represent all the values of the bit-field; otherwise, it can be converted to unsigned int if unsigned int can represent all the values of the bit-field. If the bit-field is larger yet, no integral promotion applies to it. If the bit-field has an enumerated type, it is treated as any other value of that type for promotion purposes.

An rvalue of type bool can be converted to an rvalue of type int, with false becoming zero and true becoming one.

parameters: A typechecked expression 'expr'
Returns
True iff the integral promotion is possible. The result of the conversion is stored in 'new_expr'.

Definition at line 188 of file cpp_typecheck_conversions.cpp.

References configt::ansi_c, config, irept::get_bool(), irept::id(), configt::ansi_ct::int_width, exprt::make_typecast(), c_qualifierst::read(), signed_int_type(), to_signedbv_type(), to_unsignedbv_type(), exprt::type(), and c_qualifierst::write().

Referenced by standard_conversion_sequence(), and typecheck_compound_body().

§ standard_conversion_lvalue_to_rvalue()

bool cpp_typecheckt::standard_conversion_lvalue_to_rvalue ( const exprt expr,
exprt new_expr 
) const

Lvalue-to-rvalue conversion.

An lvalue (3.10) of a non-function, non-array type T can be converted to an rvalue. If T is an incomplete type, a program that necessitates this conversion is ill-formed. If the object to which the lvalue refers is not an object of type T and is not an object of a type derived from T, or if the object is uninitialized, a program that necessitates this conversion has undefined behavior. If T is a non-class type, the type of the rvalue is the cv-unqualified version of T. Otherwise, the type of the rvalue is T.

The value contained in the object indicated by the lvalue is the rvalue result. When an lvalue-to-rvalue conversion occurs within the operand of sizeof (5.3.3) the value contained in the referenced object is not accessed, since that operator does not evaluate its operand.

parameters: A typechecked lvalue expression
Returns
True iff the lvalue-to-rvalue conversion is possible. 'new_type' contains the result of the conversion.

Definition at line 45 of file cpp_typecheck_conversions.cpp.

References irept::get_bool(), irept::id(), irept::remove(), and exprt::type().

Referenced by const_typecast(), dynamic_typecast(), reinterpret_typecast(), standard_conversion_sequence(), static_typecast(), typecheck_compound_body(), and typecheck_expr_trinary().

§ standard_conversion_pointer()

bool cpp_typecheckt::standard_conversion_pointer ( const exprt expr,
const typet type,
exprt new_expr 
)

Pointer conversion.

A null pointer constant is an integral constant expression (5.19) rvalue of integer type that evaluates to zero. A null pointer constant can be converted to a pointer type; the result is the null pointer value of that type and is distinguishable from every other value of pointer to object or pointer to function type. Two null pointer values of the same type shall compare equal. The conversion of a null pointer constant to a pointer to cv-qualified type is a single conversion, and not the sequence of a pointer conversion followed by a qualification conversion (4.4).

An rvalue of type "pointer to cv T," where T is an object type, can be converted to an rvalue of type "pointer to cv void." The result of converting a "pointer to cv T" to a "pointer to cv void" points to the start of the storage location where the object of type T resides, as if the object is a most derived object (1.8) of type T (that is, not a base class subobject).

An rvalue of type "pointer to cv D," where D is a class type, can be converted to an rvalue of type "pointer to cv B," where B is a base class (clause 10) of D. If B is an inaccessible (clause 11) or ambiguous (10.2) base class of D, a program that necessitates this conversion is ill-formed. The result of the conversion is a pointer to the base class sub-object of the derived class object. The null pointer value is converted to the null pointer value of the destination type.

parameters: A typechecked expression 'expr', a destination
type 'type'
Returns
True iff the pointer conversion is possible. The result of the conversion is stored in 'new_expr'.

Definition at line 451 of file cpp_typecheck_conversions.cpp.

References irept::find(), namespace_baset::follow(), irept::get_bool(), irept::id(), irept::is_not_nil(), is_reference(), exprt::is_zero(), make_ptr_typecast(), exprt::make_typecast(), c_qualifierst::read(), irept::set(), simplify_expr(), typet::subtype(), subtype_typecast(), to_struct_type(), exprt::type(), and c_qualifierst::write().

Referenced by standard_conversion_sequence(), and typecheck_compound_body().

§ standard_conversion_pointer_to_member()

bool cpp_typecheckt::standard_conversion_pointer_to_member ( const exprt expr,
const typet type,
exprt new_expr 
)

Pointer-to-member conversion.

A null pointer constant (4.10) can be converted to a pointer to member type; the result is the null member pointer value of that type and is distinguishable from any pointer to member not created from a null pointer constant. Two null member pointer values of the same type shall compare equal. The conversion of a null pointer constant to a pointer to member of cv-qualified type is a single conversion, and not the sequence of a pointer to member conversion followed by a qualification conversion (4.4).

An rvalue of type "pointer to member of B of type cv T," where B is a class type, can be converted to an rvalue of type "pointer to member of D of type cv T," where D is a derived class (clause 10) of B. If B is an inaccessible (clause 11), ambiguous (10.2) or virtual (10.1) base class of D, a program that necessitates this conversion is ill-formed. The result of the conversion refers to the same member as the pointer to member before the conversion took place, but it refers to the base class member as if it were a member of the derived class. The result refers to the member in D"s instance of B. Since the result has type "pointer to member of D of type cv T," it can be dereferenced with a D object. The result is the same as if the pointer to member of B were dereferenced with the B sub-object of D. The null member pointer value is converted to the null member pointer value of the destination type.52)

parameters: A typechecked expression 'expr', a destination
type 'type'
Returns
True iff the pointer-to-member conversion is possible. The result of the conversion is stored in 'new_expr'.

Definition at line 547 of file cpp_typecheck_conversions.cpp.

References irept::find(), namespace_baset::follow(), irept::get(), irept::get_bool(), irept::id(), irept::is_nil(), is_reference(), exprt::make_typecast(), code_typet::parameters(), typet::subtype(), subtype_typecast(), to_code_type(), to_struct_type(), and exprt::type().

Referenced by standard_conversion_sequence(), and typecheck_compound_body().

§ standard_conversion_qualification()

bool cpp_typecheckt::standard_conversion_qualification ( const exprt expr,
const typet type,
exprt new_expr 
) const

Qualification conversion.

parameters: A typechecked expression 'expr', a destination
type 'type'
Returns
True iff the qualification conversion is possible. The result of the conversion is stored in 'new_expr'.

Definition at line 110 of file cpp_typecheck_conversions.cpp.

References irept::get_bool(), irept::id(), c_qualifierst::is_constant, is_reference(), c_qualifierst::is_subset_of(), typet::subtype(), irept::swap(), and exprt::type().

Referenced by cast_away_constness(), standard_conversion_sequence(), and typecheck_compound_body().

§ standard_conversion_sequence()

bool cpp_typecheckt::standard_conversion_sequence ( const exprt expr,
const typet type,
exprt new_expr,
unsigned &  rank 
)

Standard Conversion Sequence.

A standard conversion sequence is a sequence of standard conversions in the following order:

  • Zero or one conversion from the following set: lvalue-to-rvalue conversion, array-to-pointer conversion, and function-to-pointer conversion.
  • Zero or one conversion from the following set: integral promotions, floating point promotion, integral conversions, floating point conversions, floating-integral conversions, pointer conversions, pointer to member conversions, and boolean conversions.
  • Zero or one qualification conversion.
    parameters: A typechecked expression 'expr', a destination
    type 'type'.
    Returns
    True iff a standard conversion sequence exists. The result of the conversion is stored in 'new_expr'. The reference 'rank' is incremented.

Definition at line 672 of file cpp_typecheck_conversions.cpp.

References irept::find(), namespace_baset::follow(), irept::get(), irept::id(), is_reference(), exprt::make_typecast(), c_qualifierst::read(), standard_conversion_array_to_pointer(), standard_conversion_boolean(), standard_conversion_floating_integral_conversion(), standard_conversion_floating_point_conversion(), standard_conversion_floating_point_promotion(), standard_conversion_function_to_pointer(), standard_conversion_integral_conversion(), standard_conversion_integral_promotion(), standard_conversion_lvalue_to_rvalue(), standard_conversion_pointer(), standard_conversion_pointer_to_member(), standard_conversion_qualification(), typet::subtype(), irept::swap(), and exprt::type().

Referenced by implicit_conversion_sequence(), reference_binding(), typecheck_compound_body(), and user_defined_conversion_sequence().

§ static_and_dynamic_initialization()

void cpp_typecheckt::static_and_dynamic_initialization ( )
protected

Initialization of static objects:

"Objects with static storage duration (3.7.1) shall be zero-initialized (8.5) before any other initialization takes place. Zero-initialization and initialization with a constant expression are collectively called static initialization; all other initialization is dynamic initialization. Objects of POD types (3.9) with static storage duration initialized with constant expressions (5.19) shall be initialized before any dynamic initialization takes place. Objects with static storage duration defined in namespace scope in the same translation unit and dynamically initialized shall be initialized in the order in which their definition appears in the translation unit. [Note: 8.5.1 describes the order in which aggregate members are initialized. The initialization of local static objects is described in 6.7. ]"

Definition at line 148 of file cpp_typecheck.cpp.

References irept::add(), symbolt::base_name, exprt::copy_to_operands(), cpp_constructor(), cpp_is_pod(), cpp_symbol_expr(), disable_access_control, dynamic_initializations, irept::id(), id2string(), symbolt::is_extern, symbolt::is_macro, irept::is_not_nil(), symbolt::is_static_lifetime, symbolt::is_type, symbolt::location, irept::make_nil(), symbolt::mode, symbolt::module, c_typecheck_baset::module, symbol_tablet::move(), exprt::move_to_operands(), symbolt::name, irept::swap(), c_typecheck_baset::symbol_table, symbol_tablet::symbols, symbolt::type, and symbolt::value.

Referenced by typecheck().

§ static_typecast()

§ subtype_typecast()

§ tag_scope()

cpp_scopet & cpp_typecheckt::tag_scope ( const irep_idt _base_name,
bool  has_body,
bool  tag_only_declaration 
)
protected

§ template_suffix()

§ this_struct_type()

§ to_string() [1/2]

§ to_string() [2/2]

std::string cpp_typecheckt::to_string ( const exprt expr)
virtual

Reimplemented from c_typecheck_baset.

Definition at line 76 of file cpp_typecheck.cpp.

References expr2cpp().

§ typecheck()

void cpp_typecheckt::typecheck ( )
virtual

§ typecheck_assign()

§ typecheck_block()

void cpp_typecheckt::typecheck_block ( codet code)
protectedvirtual

§ typecheck_cast_expr()

§ typecheck_class_template()

§ typecheck_class_template_member()

§ typecheck_code()

§ typecheck_compound_bases()

§ typecheck_compound_body() [1/2]

void cpp_typecheckt::typecheck_compound_body ( symbolt symbol)
protected

§ typecheck_compound_body() [2/2]

void cpp_typecheckt::typecheck_compound_body ( struct_union_typet type)
inlineprotectedvirtual

Reimplemented from c_typecheck_baset.

Definition at line 383 of file cpp_typecheck.h.

References add_anonymous_members_to_scope(), add_implicit_dereference(), add_this_to_method_type(), const_typecast(), cpp_destructor(), dynamic_typecast(), explicit_typecast_ambiguity(), function_identifier(), get_bases(), get_virtual_bases(), has_const(), has_volatile(), implicit_conversion_sequence(), implicit_typecast(), make_ptr_typecast(), move_member_initializers(), operator_is_overloaded(), overloadable(), reference_binding(), reference_compatible(), reference_initializer(), reference_related(), reinterpret_typecast(), standard_conversion_array_to_pointer(), standard_conversion_boolean(), standard_conversion_floating_integral_conversion(), standard_conversion_floating_point_conversion(), standard_conversion_floating_point_promotion(), standard_conversion_function_to_pointer(), standard_conversion_integral_conversion(), standard_conversion_integral_promotion(), standard_conversion_lvalue_to_rvalue(), standard_conversion_pointer(), standard_conversion_pointer_to_member(), standard_conversion_qualification(), standard_conversion_sequence(), static_typecast(), subtype_typecast(), this_struct_type(), typecheck_assign(), typecheck_block(), typecheck_cast_expr(), typecheck_code(), typecheck_compound_bases(), typecheck_decl(), typecheck_enum_body(), typecheck_expr_address_of(), typecheck_expr_binary_arithmetic(), typecheck_expr_comma(), typecheck_expr_cpp_name(), typecheck_expr_delete(), typecheck_expr_dereference(), typecheck_expr_explicit_constructor_call(), typecheck_expr_explicit_typecast(), typecheck_expr_function_identifier(), typecheck_expr_index(), typecheck_expr_main(), typecheck_expr_member(), typecheck_expr_new(), typecheck_expr_ptrmember(), typecheck_expr_reference_to(), typecheck_expr_rel(), typecheck_expr_side_effect(), typecheck_expr_sizeof(), typecheck_expr_this(), typecheck_expr_throw(), typecheck_expr_trinary(), typecheck_expr_typecast(), typecheck_function_call_arguments(), typecheck_function_expr(), typecheck_ifthenelse(), typecheck_member_function(), typecheck_member_initializer(), typecheck_method_application(), typecheck_method_bodies(), typecheck_side_effect_assignment(), typecheck_side_effect_function_call(), typecheck_side_effect_inc_dec(), typecheck_switch(), typecheck_try_catch(), typecheck_while(), user_defined_conversion_sequence(), and zero_initializer().

§ typecheck_compound_declarator()

void cpp_typecheckt::typecheck_compound_declarator ( const symbolt symbol,
const cpp_declarationt declaration,
cpp_declaratort declarator,
struct_typet::componentst components,
const irep_idt access,
bool  is_static,
bool  is_typedef,
bool  is_mutable 
)
protected

Definition at line 254 of file cpp_typecheck_compound_type.cpp.

References irept::add(), exprt::add_source_location(), code_function_callt::arguments(), side_effect_expr_function_callt::arguments(), symbolt::base_name, check_fixed_size_array(), cpp_constructor(), cpp_is_pod(), cpp_scopes, cpp_type2name(), cpp_scopest::current_scope(), c_typecheck_baset::do_initializer(), dynamic_initializations, elaborate_class_template(), dstringt::empty(), messaget::eom(), messaget::error(), irept::find(), code_function_callt::function(), side_effect_expr_function_callt::function(), function_identifier(), irept::get(), cpp_namet::get_base_name(), code_typet::parametert::get_base_name(), irept::get_bool(), struct_union_typet::componentt::get_name(), irept::get_string(), irept::get_sub(), has_const(), has_volatile(), irept::id(), id2string(), cpp_declarationt::is_constructor(), cpp_declarationt::is_destructor(), cpp_member_spect::is_explicit(), symbolt::is_extern, cpp_member_spect::is_inline(), symbolt::is_lvalue, symbolt::is_macro, irept::is_nil(), irept::is_not_nil(), cpp_namet::is_operator(), cpp_namet::is_simple_name(), symbolt::is_static_lifetime, symbolt::is_type, cpp_member_spect::is_virtual(), symbolt::location, namespacet::lookup(), irept::make_nil(), cpp_declaratort::member_initializers(), cpp_declarationt::member_spec(), cpp_declaratort::merge_type(), symbolt::mode, symbolt::module, c_typecheck_baset::module, symbol_tablet::move(), cpp_declaratort::name(), symbolt::name, namespacet::namespacet(), exprt::op0(), code_typet::parameters(), pointer_type(), cpp_idt::prefix, symbolt::pretty_name, put_compound_into_scope(), c_typecheck_baset::return_type, code_typet::return_type(), irept::set(), symbol_exprt::set_identifier(), struct_union_typet::componentt::set_name(), simplify(), cpp_namet::source_location(), exprt::source_location(), messaget::mstreamt::source_location, typet::subtype(), irept::swap(), c_typecheck_baset::symbol_table, symbol_tablet::symbols, to_code_type(), to_integer(), to_struct_type(), symbolt::type, exprt::type(), typecheck_member_function(), typecheck_type(), symbolt::value, and cpp_declaratort::value().

Referenced by add_method_body(), instantiate_template(), and typecheck_compound_body().

§ typecheck_compound_type()

§ typecheck_decl()

§ typecheck_enum_body()

§ typecheck_enum_type()

§ typecheck_expr()

§ typecheck_expr_address_of()

§ typecheck_expr_binary_arithmetic()

§ typecheck_expr_comma()

§ typecheck_expr_cpp_name()

§ typecheck_expr_delete()

§ typecheck_expr_dereference()

§ typecheck_expr_explicit_constructor_call()

void cpp_typecheckt::typecheck_expr_explicit_constructor_call ( exprt expr)
protected

§ typecheck_expr_explicit_typecast()

§ typecheck_expr_function_identifier()

void cpp_typecheckt::typecheck_expr_function_identifier ( exprt expr)
protectedvirtual

§ typecheck_expr_index()

void cpp_typecheckt::typecheck_expr_index ( exprt expr)
protectedvirtual

Reimplemented from c_typecheck_baset.

Definition at line 2791 of file cpp_typecheck_expr.cpp.

References c_typecheck_baset::typecheck_expr_index().

Referenced by typecheck_compound_body().

§ typecheck_expr_main()

§ typecheck_expr_member() [1/2]

void cpp_typecheckt::typecheck_expr_member ( exprt expr)
protectedvirtual

§ typecheck_expr_member() [2/2]

§ typecheck_expr_new()

§ typecheck_expr_ptrmember() [1/2]

void cpp_typecheckt::typecheck_expr_ptrmember ( exprt expr)
protectedvirtual

§ typecheck_expr_ptrmember() [2/2]

§ typecheck_expr_reference_to()

void cpp_typecheckt::typecheck_expr_reference_to ( exprt expr)
protected

Referenced by typecheck_compound_body().

§ typecheck_expr_rel()

void cpp_typecheckt::typecheck_expr_rel ( binary_relation_exprt expr)
protectedvirtual

Reimplemented from c_typecheck_baset.

Definition at line 2813 of file cpp_typecheck_expr.cpp.

References c_typecheck_baset::typecheck_expr_rel().

Referenced by typecheck_compound_body().

§ typecheck_expr_side_effect()

void cpp_typecheckt::typecheck_expr_side_effect ( side_effect_exprt expr)
protectedvirtual

§ typecheck_expr_sizeof()

§ typecheck_expr_this()

§ typecheck_expr_throw()

§ typecheck_expr_trinary()

§ typecheck_expr_typecast()

void cpp_typecheckt::typecheck_expr_typecast ( exprt expr)
protectedvirtual

Reimplemented from c_typecheck_baset.

Definition at line 1063 of file cpp_typecheck_expr.cpp.

References irept::pretty().

Referenced by typecheck_compound_body().

§ typecheck_friend_declaration()

§ typecheck_function_call_arguments()

void cpp_typecheckt::typecheck_function_call_arguments ( side_effect_expr_function_callt expr)
protectedvirtual

§ typecheck_function_expr()

§ typecheck_function_template()

§ typecheck_ifthenelse()

void cpp_typecheckt::typecheck_ifthenelse ( code_ifthenelset code)
protectedvirtual

§ typecheck_member_function()

§ typecheck_member_initializer()

§ typecheck_method_application()

§ typecheck_method_bodies()

§ typecheck_side_effect_assignment()

§ typecheck_side_effect_function_call()

void cpp_typecheckt::typecheck_side_effect_function_call ( side_effect_expr_function_callt expr)
protectedvirtual

Reimplemented from c_typecheck_baset.

Definition at line 1914 of file cpp_typecheck_expr.cpp.

References irept::add(), add_implicit_dereference(), add_method_body(), exprt::add_source_location(), side_effect_expr_function_callt::arguments(), struct_union_typet::components(), exprt::copy_to_operands(), cpp_is_pod(), c_typecheck_baset::do_special_functions(), messaget::eom(), messaget::error(), irept::find(), exprt::find_source_location(), namespace_baset::follow(), namespace_baset::follow_symbol(), side_effect_expr_function_callt::function(), irept::get(), irept::get_bool(), struct_union_typet::get_component(), get_component(), irept::get_string(), irept::get_sub(), irept::id(), irept::is_nil(), irept::is_not_nil(), cpp_namet::is_qualified(), exprt::move_to_operands(), exprt::op0(), exprt::op1(), exprt::operands(), pointer_type(), irept::remove(), c_typecheck_baset::return_type, irept::set(), exprt::source_location(), messaget::mstreamt::source_location, typet::subtype(), irept::swap(), c_typecheck_baset::symbol_table, symbol_tablet::symbols, to_code_type(), to_cpp_name(), to_string(), to_struct_type(), exprt::type(), typecheck_cast_expr(), typecheck_expr(), typecheck_expr_explicit_typecast(), typecheck_function_call_arguments(), typecheck_function_expr(), and typecheck_method_application().

Referenced by cpp_constructor(), cpp_destructor(), operator_is_overloaded(), reference_binding(), typecheck_compound_body(), typecheck_expr_explicit_typecast(), typecheck_function_expr(), typecheck_side_effect_assignment(), typecheck_side_effect_inc_dec(), and user_defined_conversion_sequence().

§ typecheck_side_effect_inc_dec()

§ typecheck_switch()

§ typecheck_template_args()

§ typecheck_template_parameters()

§ typecheck_try_catch()

§ typecheck_type()

void cpp_typecheckt::typecheck_type ( typet type)
protectedvirtual

Reimplemented from c_typecheck_baset.

Definition at line 23 of file cpp_typecheck_type.cpp.

References irept::add(), cpp_typecheck_resolvet::BOTH, cpp_convert_plain_type(), dstringt::empty(), messaget::eom(), messaget::error(), irept::find(), irept::get_bool(), irept::get_sub(), irept::id(), implicit_typecast(), c_qualifierst::is_constant, irept::is_nil(), irept::is_not_nil(), code_typet::parameters(), pointer_type(), irept::pretty(), resolve(), code_typet::return_type(), irept::set(), simplify(), array_typet::size(), typet::source_location(), messaget::mstreamt::source_location, typet::subtype(), irept::swap(), to_array_type(), to_c_bit_field_type(), to_code_type(), to_cpp_name(), to_struct_union_type(), cpp_typecheck_resolvet::TYPE, exprt::type(), c_typecheck_baset::typecheck_c_bit_field_type(), typecheck_compound_type(), typecheck_enum_type(), typecheck_expr(), and c_qualifierst::write().

Referenced by add_method_body(), check_member_initializers(), cpp_declarator_convertert::convert(), convert_initializer(), convert_non_template_declaration(), full_member_initialization(), cpp_typecheck_resolvet::guess_function_template_args(), operator_is_overloaded(), cpp_typecheck_resolvet::resolve_scope(), typecheck_cast_expr(), typecheck_compound_body(), typecheck_compound_declarator(), typecheck_decl(), typecheck_enum_type(), typecheck_expr_cpp_name(), typecheck_expr_explicit_constructor_call(), typecheck_expr_explicit_typecast(), typecheck_expr_main(), typecheck_expr_new(), and typecheck_template_args().

§ typecheck_while()

void cpp_typecheckt::typecheck_while ( code_whilet code)
protectedvirtual

§ user_defined_conversion_sequence()

§ zero_initializer()

Friends And Related Function Documentation

§ cpp_declarator_convertert

friend class cpp_declarator_convertert
friend

Definition at line 85 of file cpp_typecheck.h.

§ cpp_typecheck_resolvet

friend class cpp_typecheck_resolvet
friend

Definition at line 84 of file cpp_typecheck.h.

Member Data Documentation

§ anon_counter

unsigned cpp_typecheckt::anon_counter
protected

§ cpp_parse_tree

cpp_parse_treet& cpp_typecheckt::cpp_parse_tree
protected

Definition at line 110 of file cpp_typecheck.h.

Referenced by cpp_typecheck(), and typecheck().

§ cpp_scopes

cpp_scopest cpp_typecheckt::cpp_scopes
protected

Definition at line 108 of file cpp_typecheck.h.

Referenced by add_anonymous_members_to_scope(), cpp_typecheck_resolvet::apply_template_args(), check_component_access(), class_template_identifier(), class_template_symbol(), cpp_declarator_convertert::convert(), convert(), convert_anon_struct_union_member(), convert_anonymous_union(), convert_class_template_specialization(), convert_function(), cpp_typecheck_resolvet::convert_identifier(), cpp_declarator_convertert::convert_new_symbol(), convert_parameter(), convert_template_function_or_member_specialization(), cpp_constructor(), cpp_destructor(), cpp_typecheck_resolvet::disambiguate_template_classes(), cpp_typecheck_resolvet::do_builtin(), cpp_typecheck_resolvet::filter_for_named_scopes(), cpp_typecheck_resolvet::guess_function_template_args(), cpp_typecheck_resolvet::guess_template_args(), instantiate_template(), operator_is_overloaded(), put_compound_into_scope(), cpp_typecheck_resolvet::resolve(), cpp_typecheck_resolvet::resolve_namespace(), cpp_typecheck_resolvet::resolve_scope(), cpp_typecheck_resolvet::resolve_with_arguments(), tag_scope(), this_struct_type(), typecheck_block(), typecheck_class_template(), typecheck_class_template_member(), typecheck_compound_bases(), typecheck_compound_body(), typecheck_compound_declarator(), typecheck_compound_type(), typecheck_enum_body(), typecheck_enum_type(), typecheck_expr_cpp_name(), typecheck_expr_member(), typecheck_expr_this(), typecheck_friend_declaration(), typecheck_function_template(), typecheck_member_function(), typecheck_member_initializer(), typecheck_template_args(), and typecheck_template_parameters().

§ current_linkage_spec

irep_idt cpp_typecheckt::current_linkage_spec
protected

Definition at line 111 of file cpp_typecheck.h.

Referenced by convert(), and typecheck().

§ disable_access_control

bool cpp_typecheckt::disable_access_control
private

§ dynamic_initializations

dynamic_initializationst cpp_typecheckt::dynamic_initializations
private

§ instantiation_stack

instantiation_stackt cpp_typecheckt::instantiation_stack
protected

§ method_bodies

method_bodiest cpp_typecheckt::method_bodies
protected

Definition at line 341 of file cpp_typecheck.h.

Referenced by convert().

§ template_counter

unsigned cpp_typecheckt::template_counter
protected

Definition at line 226 of file cpp_typecheck.h.

Referenced by typecheck_template_parameters().

§ template_map


The documentation for this class was generated from the following files: