cprover
cpp_typecheck.h
Go to the documentation of this file.
1 /*******************************************************************\
2 
3 Module: C++ Language Type Checking
4 
5 Author: Daniel Kroening, kroening@cs.cmu.edu
6 
7 \*******************************************************************/
8 
11 
12 #ifndef CPROVER_CPP_CPP_TYPECHECK_H
13 #define CPROVER_CPP_CPP_TYPECHECK_H
14 
15 #include <list>
16 #include <map>
17 #include <set>
18 #include <unordered_set>
19 
20 #include <util/std_code.h>
21 #include <util/std_types.h>
22 
24 
25 #include "cpp_parse_tree.h"
26 #include "cpp_scopes.h"
27 #include "cpp_typecheck_resolve.h"
28 #include "template_map.h"
29 #include "cpp_member_spec.h"
30 #include "cpp_template_type.h"
31 #include "cpp_util.h"
32 
33 bool cpp_typecheck(
34  cpp_parse_treet &cpp_parse_tree,
35  symbol_tablet &symbol_table,
36  const std::string &module,
37  message_handlert &message_handler);
38 
39 bool cpp_typecheck(
40  exprt &expr,
41  message_handlert &message_handler,
42  const namespacet &ns);
43 
45 {
46 public:
48  cpp_parse_treet &_cpp_parse_tree,
49  symbol_tablet &_symbol_table,
50  const std::string &_module,
52  c_typecheck_baset(_symbol_table, _module, message_handler),
53  cpp_parse_tree(_cpp_parse_tree),
55  anon_counter(0),
57  {
58  }
59 
61  cpp_parse_treet &_cpp_parse_tree,
62  symbol_tablet &_symbol_table1,
63  const symbol_tablet &_symbol_table2,
64  const std::string &_module,
66  c_typecheck_baset(_symbol_table1, _symbol_table2,
67  _module, message_handler),
68  cpp_parse_tree(_cpp_parse_tree),
70  anon_counter(0),
72  {
73  }
74 
75  ~cpp_typecheckt() override
76  {
77  }
78 
79  void typecheck() override;
80 
81  // overload to use C++ syntax
82  std::string to_string(const typet &) override;
83  std::string to_string(const exprt &) override;
84 
85  friend class cpp_typecheck_resolvet;
87 
89  const cpp_namet &cpp_name,
91  const cpp_typecheck_fargst &fargs,
92  bool fail_with_exception=true)
93  {
94  cpp_typecheck_resolvet cpp_typecheck_resolve(*this);
95  return cpp_typecheck_resolve.resolve(
96  cpp_name, want, fargs, fail_with_exception);
97  }
98 
99  void typecheck_expr(exprt &) override;
100 
101  bool cpp_is_pod(const typet &type) const;
102 
104  const source_locationt &source_location,
105  const exprt &object,
106  const exprt::operandst &operands);
107 
108 protected:
110 
113 
114  void convert(cpp_linkage_spect &);
116  void convert(cpp_usingt &);
117  void convert(cpp_itemt &);
118  void convert(cpp_declarationt &);
120  void convert(cpp_static_assertt &);
121 
122  void convert_initializer(symbolt &symbol);
123  void convert_function(symbolt &symbol);
124 
125  void convert_pmop(exprt &expr);
126 
128 
130  const cpp_declarationt &declaration,
131  const irep_idt &access,
132  struct_typet::componentst &components);
133 
134  //
135  // Templates
136  //
138  const template_typet &old_type,
139  template_typet &new_type);
140 
142 
144 
146  cpp_declarationt &declaration);
147 
149  cpp_declarationt &declaration);
150 
151  void typecheck_class_template(cpp_declarationt &declaration);
152 
154 
156 
157  std::string class_template_identifier(
158  const irep_idt &base_name,
159  const template_typet &template_type,
160  const cpp_template_args_non_tct &partial_specialization_args);
161 
162  std::string function_template_identifier(
163  const irep_idt &base_name,
164  const template_typet &template_type,
165  const typet &function_type);
166 
168  const source_locationt &source_location,
169  const symbolt &template_symbol,
170  const cpp_template_args_non_tct &template_args);
171 
172  // template instantiations
174  {
175  public:
179  };
180 
181  typedef std::list<instantiationt> instantiation_stackt;
183 
184  void show_instantiation_stack(std::ostream &);
185 
187  {
188  public:
190  instantiation_stackt &_instantiation_stack):
191  instantiation_stack(_instantiation_stack)
192  {
193  instantiation_stack.push_back(instantiationt());
194  }
195 
197  {
198  instantiation_stack.pop_back();
199  }
200 
201  private:
203  };
204 
206  const source_locationt &source_location,
207  const symbolt &template_symbol,
208  const cpp_template_args_tct &specialization_template_args,
209  const cpp_template_args_tct &full_template_args);
210 
212  const typet &type);
213 
215  const source_locationt &source_location,
216  const symbolt &symbol,
217  const cpp_template_args_tct &specialization_template_args,
218  const cpp_template_args_tct &full_template_args,
219  const typet &specialization = uninitialized_typet{});
220 
222  const source_locationt &source_location,
223  const struct_tag_typet &type);
224 
226  unsigned anon_counter;
227 
229 
230  std::string template_suffix(
231  const cpp_template_args_tct &template_args);
232 
234  cpp_scopet &template_scope,
235  const std::string &suffix);
236 
237  void
238  convert_parameters(const irep_idt &current_mode, code_typet &function_type);
239 
240  void convert_parameter(
241  const irep_idt &current_mode,
242  code_typet::parametert &parameter);
243 
244  //
245  // Misc
246  //
247 
248  void default_ctor(
249  const source_locationt &source_location,
250  const irep_idt &base_name,
251  cpp_declarationt &ctor) const;
252 
253  void default_cpctor(
254  const symbolt&, cpp_declarationt &cpctor) const;
255 
256  void default_assignop(
257  const symbolt &symbol, cpp_declarationt &cpctor);
258 
260  const symbolt &symbol, cpp_declaratort &declarator);
261 
262  void default_dtor(const symbolt &symb, cpp_declarationt &dtor);
263 
264  codet dtor(const symbolt &symb, const symbol_exprt &this_expr);
265 
267  const struct_typet::basest &bases,
268  const struct_typet::componentst &components,
269  const irept &initializers);
270 
273  const struct_union_typet &struct_union_type);
274 
276  const struct_union_typet &struct_union_type,
277  irept &initializers);
278 
279  bool find_cpctor(const symbolt &symbol)const;
280  bool find_assignop(const symbolt &symbol)const;
281  bool find_dtor(const symbolt &symbol)const;
282 
283  bool find_parent(
284  const symbolt &symb,
285  const irep_idt &base_name,
286  irep_idt &identifier);
287 
288  bool get_component(
289  const source_locationt &source_location,
290  const exprt &object,
291  const irep_idt &component_name,
292  exprt &member);
293 
294  void new_temporary(const source_locationt &source_location,
295  const typet &,
296  const exprt::operandst &ops,
297  exprt &temporary);
298 
299  void new_temporary(const source_locationt &source_location,
300  const typet &,
301  const exprt &op,
302  exprt &temporary);
303 
305  void do_not_typechecked();
306  void clean_up();
307 
308  void add_base_components(
309  const struct_typet &from,
310  const irep_idt &access,
311  struct_typet &to,
312  std::set<irep_idt> &bases,
313  std::set<irep_idt> &vbases,
314  bool is_virtual);
315 
316  bool cast_away_constness(const typet &t1,
317  const typet &t2) const;
318 
319  void do_virtual_table(const symbolt &symbol);
320 
321  // we need to be able to delay the typechecking
322  // of method bodies to handle methods with
323  // bodies in the class definition
325  {
326  public:
328  symbolt *_method_symbol,
329  const template_mapt &_template_map,
330  const instantiation_stackt &_instantiation_stack):
331  method_symbol(_method_symbol),
332  template_map(_template_map),
333  instantiation_stack(_instantiation_stack)
334  {
335  }
336 
340  };
341 
342  typedef std::list<method_bodyt> method_bodiest;
343  std::set<irep_idt> methods_seen;
345 
346  void add_method_body(symbolt *_method_symbol);
347 
348  bool builtin_factory(const irep_idt &);
349 
350  // types
351 
352  void typecheck_type(typet &) override;
353 
355  template_typet &type);
356 
358  void check_fixed_size_array(typet &type);
359  void typecheck_enum_type(typet &type);
360 
361  // determine the scope into which a tag goes
362  // (enums, structs, union, classes)
364  const irep_idt &_base_name,
365  bool has_body,
366  bool tag_only_declaration);
367 
369  const symbolt &symbol,
370  const cpp_declarationt &declaration,
371  cpp_declaratort &declarator,
372  struct_typet::componentst &components,
373  const irep_idt &access,
374  bool is_static,
375  bool is_typedef,
376  bool is_mutable);
377 
379  symbolt &symbol,
380  cpp_declarationt &cpp_declaration);
381 
383  void typecheck_compound_body(symbolt &symbol);
385  {
386  UNREACHABLE;
387  }
388  void typecheck_enum_body(symbolt &symbol);
391  void add_anonymous_members_to_scope(const symbolt &struct_union_symbol);
392 
394  irept &initializers,
395  const code_typet &type,
396  exprt &value);
397 
398  static bool has_const(const typet &type);
399  static bool has_volatile(const typet &type);
400  static bool has_auto(const typet &type);
401 
403  const symbolt &compound_symbol,
405  irept &initializers,
406  const typet &method_qualifier,
407  exprt &value);
408 
410  const symbolt &compound_symbol,
411  code_typet &method_type,
412  const typet &method_qualifier);
413 
414  // for function overloading
415  irep_idt function_identifier(const typet &type);
416 
417  void zero_initializer(
418  const exprt &object,
419  const typet &type,
420  const source_locationt &source_location,
421  exprt::operandst &ops);
422 
423  // code conversion
424  void typecheck_code(codet &) override;
425  void typecheck_try_catch(codet &);
427  void typecheck_decl(codet &) override;
428  void typecheck_block(code_blockt &) override;
429  void typecheck_ifthenelse(code_ifthenelset &) override;
430  void typecheck_while(code_whilet &) override;
431  void typecheck_switch(codet &) override;
432 
434 
436  cpp_destructor(const source_locationt &source_location, const exprt &object);
437 
438  // expressions
440  void typecheck_expr_main(exprt &) override;
441  void typecheck_expr_member(exprt &) override;
442  void typecheck_expr_ptrmember(exprt &) override;
443  void typecheck_expr_throw(exprt &);
448  void typecheck_cast_expr(exprt &);
449  void typecheck_expr_trinary(if_exprt &) override;
450  void typecheck_expr_binary_arithmetic(exprt &) override;
453  void typecheck_expr_address_of(exprt &) override;
454  void typecheck_expr_dereference(exprt &) override;
455  void typecheck_expr_function_identifier(exprt &) override;
457  void typecheck_expr_this(exprt &);
458  void typecheck_expr_new(exprt &);
459  void typecheck_expr_sizeof(exprt &) override;
464  void typecheck_expr_typecast(exprt &) override;
465  void typecheck_expr_index(exprt &) override;
466  void typecheck_expr_rel(binary_relation_exprt &) override;
467  void typecheck_expr_comma(exprt &) override;
468 
469  void
471 
473  bool overloadable(const exprt &);
474 
476 
479 
481 
482 public:
483  //
484  // Type Conversions
485  //
486 
488  const exprt &expr, exprt &new_expr) const;
489 
491  const exprt &expr, exprt &new_expr) const;
492 
494  const exprt &expr, exprt &new_expr) const;
495 
497  const exprt &expr, const typet&, exprt &new_expr) const;
498 
500  const exprt &expr, exprt &new_expr) const;
501 
503  const exprt &expr, exprt &new_expr) const;
504 
506  const exprt &expr, const typet &type, exprt &new_expr) const;
507 
509  const exprt &expr, const typet &type, exprt &new_expr) const;
510 
512  const exprt &expr, const typet &type, exprt &new_expr) const;
513 
515  const exprt &expr, const typet &type, exprt &new_expr);
516 
518  const exprt &expr, const typet &type, exprt &new_expr);
519 
521  const exprt &expr, exprt &new_expr) const;
522 
524  const exprt &expr, const typet &type, exprt &new_expr, unsigned &rank);
525 
527  const exprt &expr, const typet &type, exprt &new_expr, unsigned &rank);
528 
529  bool reference_related(
530  const exprt &expr, const typet &type) const;
531 
533  const exprt &expr, const typet &type, unsigned &rank) const;
534 
535  bool reference_binding(
536  exprt expr, const typet &type, exprt &new_expr, unsigned &rank);
537 
539  const exprt &expr, const typet &type, exprt &new_expr, unsigned &rank);
540 
542  const exprt &expr, const typet &type, unsigned &rank);
543 
545  const exprt &expr, const typet &type, exprt &new_expr);
546 
547  void reference_initializer(exprt &expr, const typet &type);
548 
549  void implicit_typecast(exprt &expr, const typet &type) override;
550 
551  void get_bases(const struct_typet &type,
552  std::set<irep_idt> &set_bases) const;
553 
554  void get_virtual_bases(const struct_typet &type,
555  std::list<irep_idt> &vbases) const;
556 
557  bool subtype_typecast(
558  const struct_typet &from,
559  const struct_typet &to) const;
560 
561  void make_ptr_typecast(
562  exprt &expr,
563  const typet &dest_type);
564 
565  // the C++ typecasts
566 
567  bool const_typecast(
568  const exprt &expr,
569  const typet &type,
570  exprt &new_expr);
571 
572  bool dynamic_typecast(
573  const exprt &expr,
574  const typet &type,
575  exprt &new_expr);
576 
578  const exprt &expr,
579  const typet &type,
580  exprt &new_expr,
581  bool check_constantness=true);
582 
583  bool static_typecast(
584  const exprt &expr,
585  const typet &type,
586  exprt &new_expr,
587  bool check_constantness=true);
588 
589  bool contains_cpp_name(const exprt &);
590 
591 private:
592  typedef std::list<irep_idt> dynamic_initializationst;
594  bool disable_access_control; // Disable protect and private
595  std::unordered_set<irep_idt> deferred_typechecking;
596 };
597 
598 #endif // CPROVER_CPP_CPP_TYPECHECK_H
cpp_typecheckt::convert
void convert(cpp_linkage_spect &)
Definition: cpp_typecheck_linkage_spec.cpp:14
cpp_scopes.h
C++ Language Type Checking.
cpp_typecheckt::do_virtual_table
void do_virtual_table(const symbolt &symbol)
Definition: cpp_typecheck_virtual_table.cpp:17
UNREACHABLE
#define UNREACHABLE
This should be used to mark dead code.
Definition: invariant.h:504
dstringt
dstringt has one field, an unsigned integer no which is an index into a static table of strings.
Definition: dstring.h:37
cpp_typecheckt::convert_non_template_declaration
void convert_non_template_declaration(cpp_declarationt &declaration)
Definition: cpp_typecheck_declaration.cpp:95
c_typecheck_baset
Definition: c_typecheck_base.h:28
code_blockt
A codet representing sequential composition of program statements.
Definition: std_code.h:170
symbol_tablet
The symbol table.
Definition: symbol_table.h:20
cpp_typecheckt::sub_scope_for_instantiation
cpp_scopet & sub_scope_for_instantiation(cpp_scopet &template_scope, const std::string &suffix)
Set up a scope as subscope of the template scope.
Definition: cpp_instantiate_template.cpp:116
cpp_typecheckt::convert_anon_struct_union_member
void convert_anon_struct_union_member(const cpp_declarationt &declaration, const irep_idt &access, struct_typet::componentst &components)
Definition: cpp_typecheck_compound_type.cpp:1417
cpp_typecheckt::tag_scope
cpp_scopet & tag_scope(const irep_idt &_base_name, bool has_body, bool tag_only_declaration)
Definition: cpp_typecheck_compound_type.cpp:82
cpp_scopet
Definition: cpp_scope.h:21
cpp_typecheckt::typecheck_expr_side_effect
void typecheck_expr_side_effect(side_effect_exprt &) override
Definition: cpp_typecheck_expr.cpp:1882
cpp_typecheckt::typecheck_switch
void typecheck_switch(codet &) override
Definition: cpp_typecheck_code.cpp:182
cpp_typecheckt::standard_conversion_floating_point_promotion
bool standard_conversion_floating_point_promotion(const exprt &expr, exprt &new_expr) const
Floating-point-promotion conversion.
Definition: cpp_typecheck_conversions.cpp:248
cpp_typecheckt::elaborate_class_template
void elaborate_class_template(const typet &type)
elaborate class template instances
Definition: cpp_instantiate_template.cpp:224
cpp_parse_treet
Definition: cpp_parse_tree.h:20
cpp_typecheckt::anon_counter
unsigned anon_counter
Definition: cpp_typecheck.h:226
cpp_typecheckt::add_base_components
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)
Definition: cpp_typecheck_bases.cpp:118
cpp_typecheckt::typecheck_expr_dereference
void typecheck_expr_dereference(exprt &) override
Definition: cpp_typecheck_expr.cpp:2149
cpp_typecheckt::typecheck_expr_trinary
void typecheck_expr_trinary(if_exprt &) override
Definition: cpp_typecheck_expr.cpp:131
code_whilet
codet representing a while statement.
Definition: std_code.h:896
cpp_typecheck_fargst
Definition: cpp_typecheck_fargs.h:23
cpp_typecheckt::convert_pmop
void convert_pmop(exprt &expr)
Definition: cpp_typecheck_expr.cpp:2172
cpp_typecheckt::convert_function
void convert_function(symbolt &symbol)
Definition: cpp_typecheck_function.cpp:85
cpp_typecheckt::salvage_default_arguments
void salvage_default_arguments(const template_typet &old_type, template_typet &new_type)
Definition: cpp_typecheck_template.cpp:23
cpp_typecheckt::standard_conversion_boolean
bool standard_conversion_boolean(const exprt &expr, exprt &new_expr) const
Boolean conversion.
Definition: cpp_typecheck_conversions.cpp:634
cpp_typecheckt::typecheck_expr_explicit_constructor_call
void typecheck_expr_explicit_constructor_call(exprt &)
Definition: cpp_typecheck_expr.cpp:951
cpp_typecheckt::typecheck_expr_cpp_name
void typecheck_expr_cpp_name(exprt &, const cpp_typecheck_fargst &)
Definition: cpp_typecheck_expr.cpp:1374
cpp_typecheckt::check_component_access
bool check_component_access(const struct_union_typet::componentt &component, const struct_union_typet &struct_union_type)
Definition: cpp_typecheck_compound_type.cpp:1568
cpp_typecheckt::typecheck_expr_typecast
void typecheck_expr_typecast(exprt &) override
Definition: cpp_typecheck_expr.cpp:1048
cpp_typecheck_resolvet::wantt
wantt
Definition: cpp_typecheck_resolve.h:26
cpp_typecheckt::typecheck_method_bodies
void typecheck_method_bodies()
Definition: cpp_typecheck_method_bodies.cpp:18
cpp_typecheckt::cpp_scopes
cpp_scopest cpp_scopes
Definition: cpp_typecheck.h:109
cpp_typecheckt::dynamic_initializationst
std::list< irep_idt > dynamic_initializationst
Definition: cpp_typecheck.h:592
cpp_typecheckt::reference_binding
bool reference_binding(exprt expr, const typet &type, exprt &new_expr, unsigned &rank)
Reference binding.
Definition: cpp_typecheck_conversions.cpp:1213
cpp_typecheckt::typecheck_compound_body
void typecheck_compound_body(struct_union_typet &) override
Definition: cpp_typecheck.h:384
cpp_typecheckt::template_suffix
std::string template_suffix(const cpp_template_args_tct &template_args)
Definition: cpp_instantiate_template.cpp:26
typet
The type of an expression, extends irept.
Definition: type.h:29
cpp_typecheckt::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)
Definition: cpp_typecheck.h:60
cpp_typecheckt::typecheck_while
void typecheck_while(code_whilet &) override
Definition: cpp_typecheck_code.cpp:168
cpp_typecheckt::this_struct_type
const struct_typet & this_struct_type()
Definition: cpp_typecheck.cpp:66
cpp_typecheckt::operator_is_overloaded
bool operator_is_overloaded(exprt &)
Definition: cpp_typecheck_expr.cpp:455
cpp_typecheckt::show_instantiation_stack
void show_instantiation_stack(std::ostream &)
Definition: cpp_instantiate_template.cpp:93
c_typecheck_base.h
ANSI-C Language Type Checking.
cpp_typecheckt::reinterpret_typecast
bool reinterpret_typecast(const exprt &expr, const typet &type, exprt &new_expr, bool check_constantness=true)
Definition: cpp_typecheck_conversions.cpp:1742
cpp_typecheckt::check_fixed_size_array
void check_fixed_size_array(typet &type)
check that an array has fixed size
Definition: cpp_typecheck_compound_type.cpp:757
struct_union_typet
Base type for structs and unions.
Definition: std_types.h:57
cpp_typecheckt::typecheck_compound_body
void typecheck_compound_body(symbolt &symbol)
Definition: cpp_typecheck_compound_type.cpp:926
cpp_typecheckt::typecheck_class_template
void typecheck_class_template(cpp_declarationt &declaration)
Definition: cpp_typecheck_template.cpp:44
cpp_typecheckt::convert_parameter
void convert_parameter(const irep_idt &current_mode, code_typet::parametert &parameter)
Definition: cpp_typecheck_function.cpp:22
cpp_typecheck
bool cpp_typecheck(cpp_parse_treet &cpp_parse_tree, symbol_tablet &symbol_table, const std::string &module, message_handlert &message_handler)
Definition: cpp_typecheck.cpp:89
cpp_typecheckt::typecheck_side_effect_assignment
void typecheck_side_effect_assignment(side_effect_exprt &) override
Definition: cpp_typecheck_expr.cpp:1997
side_effect_expr_function_callt
A side_effect_exprt representation of a function call side effect.
Definition: std_code.h:2117
cpp_typecheckt::typecheck_template_parameters
cpp_scopet & typecheck_template_parameters(template_typet &type)
Definition: cpp_typecheck_template.cpp:708
cpp_typecheckt::standard_conversion_integral_promotion
bool standard_conversion_integral_promotion(const exprt &expr, exprt &new_expr) const
Integral-promotion conversion.
Definition: cpp_typecheck_conversions.cpp:195
if_exprt
The trinary if-then-else operator.
Definition: std_expr.h:2964
cpp_typecheckt::typecheck_block
void typecheck_block(code_blockt &) override
Definition: cpp_typecheck_code.cpp:493
cpp_typecheckt::typecheck_member_function
void typecheck_member_function(const symbolt &compound_symbol, struct_typet::componentt &component, irept &initializers, const typet &method_qualifier, exprt &value)
Definition: cpp_typecheck_compound_type.cpp:1254
cpp_typecheckt::clean_up
void clean_up()
Definition: cpp_typecheck.cpp:268
cpp_typecheck_resolve.h
C++ Language Type Checking.
cpp_typecheckt::typecheck_compound_bases
void typecheck_compound_bases(struct_typet &type)
Definition: cpp_typecheck_bases.cpp:16
cpp_typecheckt::new_temporary
void new_temporary(const source_locationt &source_location, const typet &, const exprt::operandst &ops, exprt &temporary)
Definition: cpp_constructor.cpp:266
cpp_typecheckt::standard_conversion_lvalue_to_rvalue
bool standard_conversion_lvalue_to_rvalue(const exprt &expr, exprt &new_expr) const
Lvalue-to-rvalue conversion.
Definition: cpp_typecheck_conversions.cpp:46
cpp_typecheckt::builtin_factory
bool builtin_factory(const irep_idt &)
Definition: cpp_typecheck.cpp:328
cpp_typecheck_resolvet
Definition: cpp_typecheck_resolve.h:21
cpp_typecheckt::typecheck_expr_member
void typecheck_expr_member(exprt &) override
Definition: cpp_typecheck_expr.cpp:285
cpp_typecheckt::default_assignop_value
void default_assignop_value(const symbolt &symbol, cpp_declaratort &declarator)
Generate code for the implicit default assignment operator.
Definition: cpp_typecheck_constructor.cpp:345
cpp_typecheckt::current_linkage_spec
irep_idt current_linkage_spec
Definition: cpp_typecheck.h:112
cpp_typecheckt::standard_conversion_sequence
bool standard_conversion_sequence(const exprt &expr, const typet &type, exprt &new_expr, unsigned &rank)
Standard Conversion Sequence.
Definition: cpp_typecheck_conversions.cpp:678
cpp_typecheckt::instantiationt::source_location
source_locationt source_location
Definition: cpp_typecheck.h:176
exprt
Base class for all expressions.
Definition: expr.h:53
struct_union_typet::componentst
std::vector< componentt > componentst
Definition: std_types.h:135
cpp_typecheckt::cpp_constructor
optionalt< codet > cpp_constructor(const source_locationt &source_location, const exprt &object, const exprt::operandst &operands)
Definition: cpp_constructor.cpp:25
cpp_typecheckt::class_template_symbol
const symbolt & class_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)
Definition: cpp_instantiate_template.cpp:149
cpp_typecheckt::convert_class_template_specialization
void convert_class_template_specialization(cpp_declarationt &declaration)
Definition: cpp_typecheck_template.cpp:499
struct_tag_typet
A struct tag type, i.e., struct_typet with an identifier.
Definition: std_types.h:490
cpp_typecheckt::dtor
codet dtor(const symbolt &symb, const symbol_exprt &this_expr)
produces destructor code for a class object
Definition: cpp_typecheck_destructor.cpp:50
component
auto component(T &struct_expr, const irep_idt &name, const namespacet &ns) -> decltype(struct_expr.op0())
Definition: std_expr.cpp:192
cpp_typecheckt::typecheck_side_effect_inc_dec
void typecheck_side_effect_inc_dec(side_effect_exprt &)
Definition: cpp_typecheck_expr.cpp:2079
cpp_typecheckt::reference_compatible
bool reference_compatible(const exprt &expr, const typet &type, unsigned &rank) const
Reference-compatible.
Definition: cpp_typecheck_conversions.cpp:1150
cpp_typecheckt::instantiation_stack
instantiation_stackt instantiation_stack
Definition: cpp_typecheck.h:182
cpp_typecheckt::overloadable
bool overloadable(const exprt &)
Definition: cpp_typecheck_expr.cpp:399
cpp_typecheckt::template_counter
unsigned template_counter
Definition: cpp_typecheck.h:225
cpp_typecheckt::typecheck_decl
void typecheck_decl(codet &) override
Definition: cpp_typecheck_code.cpp:395
cpp_typecheckt::instantiation_levelt
Definition: cpp_typecheck.h:187
cpp_typecheckt::zero_initializer
void zero_initializer(const exprt &object, const typet &type, const source_locationt &source_location, exprt::operandst &ops)
Definition: cpp_typecheck_initializer.cpp:190
cpp_member_spec.h
cpp_template_args_tct
Definition: cpp_template_args.h:65
cpp_typecheckt::typecheck_try_catch
void typecheck_try_catch(codet &)
Definition: cpp_typecheck_code.cpp:90
template_map.h
C++ Language Type Checking.
cpp_typecheckt::instantiationt::identifier
irep_idt identifier
Definition: cpp_typecheck.h:177
cpp_typecheckt::static_and_dynamic_initialization
void static_and_dynamic_initialization()
Initialization of static objects:
Definition: cpp_typecheck.cpp:151
cpp_typecheckt::contains_cpp_name
bool contains_cpp_name(const exprt &)
Definition: cpp_typecheck.cpp:333
symbol_exprt
Expression to hold a symbol (variable)
Definition: std_expr.h:82
cpp_typecheckt::typecheck_expr_delete
void typecheck_expr_delete(exprt &)
Definition: cpp_typecheck_expr.cpp:991
code_ifthenelset
codet representation of an if-then-else statement.
Definition: std_code.h:746
cpp_typecheckt::method_bodyt::instantiation_stack
instantiation_stackt instantiation_stack
Definition: cpp_typecheck.h:339
cpp_typecheckt::standard_conversion_array_to_pointer
bool standard_conversion_array_to_pointer(const exprt &expr, exprt &new_expr) const
Array-to-pointer conversion.
Definition: cpp_typecheck_conversions.cpp:77
cpp_typecheckt::instantiation_levelt::~instantiation_levelt
~instantiation_levelt()
Definition: cpp_typecheck.h:196
cpp_typecheckt::class_template_identifier
std::string class_template_identifier(const irep_idt &base_name, const template_typet &template_type, const cpp_template_args_non_tct &partial_specialization_args)
Definition: cpp_typecheck_template.cpp:423
cpp_typecheckt::typecheck_friend_declaration
void typecheck_friend_declaration(symbolt &symbol, cpp_declarationt &cpp_declaration)
Definition: cpp_typecheck_compound_type.cpp:854
cpp_typecheckt::instantiation_stackt
std::list< instantiationt > instantiation_stackt
Definition: cpp_typecheck.h:181
cpp_typecheckt::typecheck_expr_function_identifier
void typecheck_expr_function_identifier(exprt &) override
Definition: cpp_typecheck_expr.cpp:2234
cpp_typecheckt::method_bodyt::method_bodyt
method_bodyt(symbolt *_method_symbol, const template_mapt &_template_map, const instantiation_stackt &_instantiation_stack)
Definition: cpp_typecheck.h:327
cpp_typecheckt::default_dtor
void default_dtor(const symbolt &symb, cpp_declarationt &dtor)
Note:
Definition: cpp_typecheck_destructor.cpp:28
namespacet
A namespacet is essentially one or two symbol tables bound together, to allow for symbol lookups in t...
Definition: namespace.h:92
cpp_typecheckt::cpp_is_pod
bool cpp_is_pod(const typet &type) const
Definition: cpp_is_pod.cpp:14
cpp_typecheckt::function_template_identifier
std::string function_template_identifier(const irep_idt &base_name, const template_typet &template_type, const typet &function_type)
Definition: cpp_typecheck_template.cpp:482
cpp_typecheckt::typecheck_type
void typecheck_type(typet &) override
Definition: cpp_typecheck_type.cpp:23
cpp_namespace_spect
Definition: cpp_namespace_spec.h:20
cpp_typecheckt::typecheck_expr_sizeof
void typecheck_expr_sizeof(exprt &) override
Definition: cpp_typecheck_expr.cpp:292
cpp_typecheckt::has_const
static bool has_const(const typet &type)
Definition: cpp_typecheck_compound_type.cpp:32
cpp_typecheckt::standard_conversion_floating_point_conversion
bool standard_conversion_floating_point_conversion(const exprt &expr, const typet &type, exprt &new_expr) const
Floating-point conversion.
Definition: cpp_typecheck_conversions.cpp:400
cpp_typecheckt::typecheck_function_expr
void typecheck_function_expr(exprt &, const cpp_typecheck_fargst &)
Definition: cpp_typecheck_expr.cpp:352
cpp_typecheckt::default_ctor
void default_ctor(const source_locationt &source_location, const irep_idt &base_name, cpp_declarationt &ctor) const
Generate code for implicit default constructors.
Definition: cpp_typecheck_constructor.cpp:119
cpp_typecheckt::typecheck_class_template_member
void typecheck_class_template_member(cpp_declarationt &declaration)
typecheck class template members; these can be methods or static members
Definition: cpp_typecheck_template.cpp:312
cpp_typecheckt::typecheck_side_effect_function_call
void typecheck_side_effect_function_call(side_effect_expr_function_callt &) override
Definition: cpp_typecheck_expr.cpp:1494
cpp_typecheckt::method_bodyt::template_map
template_mapt template_map
Definition: cpp_typecheck.h:338
cpp_usingt
Definition: cpp_using.h:18
cpp_typecheckt::get_virtual_bases
void get_virtual_bases(const struct_typet &type, std::list< irep_idt > &vbases) const
Definition: cpp_typecheck_compound_type.cpp:1646
cpp_typecheckt::typecheck_function_template
void typecheck_function_template(cpp_declarationt &declaration)
typecheck function templates
Definition: cpp_typecheck_template.cpp:208
cpp_typecheckt::add_method_body
void add_method_body(symbolt *_method_symbol)
Definition: cpp_typecheck_method_bodies.cpp:51
cpp_typecheckt::typecheck_compound_declarator
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)
Definition: cpp_typecheck_compound_type.cpp:287
cpp_typecheckt::methods_seen
std::set< irep_idt > methods_seen
Definition: cpp_typecheck.h:343
cpp_typecheckt::method_bodyt
Definition: cpp_typecheck.h:325
cpp_typecheckt::convert_initializer
void convert_initializer(symbolt &symbol)
Initialize an object with a value.
Definition: cpp_typecheck_initializer.cpp:22
cpp_util.h
cpp_typecheckt::add_implicit_dereference
void add_implicit_dereference(exprt &)
Definition: cpp_typecheck_expr.cpp:1481
cpp_typecheckt::reference_initializer
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:
Definition: cpp_typecheck_conversions.cpp:1547
cpp_typecheckt::instantiationt
Definition: cpp_typecheck.h:174
cpp_declarator_convertert
Definition: cpp_declarator_converter.h:26
cpp_typecheckt::typecheck_expr_explicit_typecast
void typecheck_expr_explicit_typecast(exprt &)
Definition: cpp_typecheck_expr.cpp:842
std_types.h
Pre-defined types.
cpp_typecheckt::typecheck_expr_rel
void typecheck_expr_rel(binary_relation_exprt &) override
Definition: cpp_typecheck_expr.cpp:2368
cpp_typecheckt::check_member_initializers
void check_member_initializers(const struct_typet::basest &bases, const struct_typet::componentst &components, const irept &initializers)
Check a constructor initialization-list.
Definition: cpp_typecheck_constructor.cpp:418
cpp_typecheckt::typecheck_function_call_arguments
void typecheck_function_call_arguments(side_effect_expr_function_callt &) override
Definition: cpp_typecheck_expr.cpp:1832
cpp_typecheckt::make_ptr_typecast
void make_ptr_typecast(exprt &expr, const typet &dest_type)
Definition: cpp_typecheck_compound_type.cpp:1680
cpp_typecheckt::convert
void convert(cpp_declaratort &)
cpp_typecheckt::elaborate_class_template
void elaborate_class_template(const source_locationt &source_location, const struct_tag_typet &type)
cpp_typecheckt::typecheck_ifthenelse
void typecheck_ifthenelse(code_ifthenelset &) override
Definition: cpp_typecheck_code.cpp:154
cpp_typecheckt::put_compound_into_scope
void put_compound_into_scope(const struct_union_typet::componentt &component)
Definition: cpp_typecheck_compound_type.cpp:782
cpp_typecheckt::deferred_typechecking
std::unordered_set< irep_idt > deferred_typechecking
Definition: cpp_typecheck.h:595
cpp_typecheckt::typecheck_cast_expr
void typecheck_cast_expr(exprt &)
Definition: cpp_typecheck_expr.cpp:1270
cpp_typecheckt::subtype_typecast
bool subtype_typecast(const struct_typet &from, const struct_typet &to) const
Definition: cpp_typecheck_compound_type.cpp:1666
code_typet
Base type of functions.
Definition: std_types.h:736
cpp_typecheckt
Definition: cpp_typecheck.h:45
cpp_declarationt
Definition: cpp_declaration.h:24
cpp_typecheckt::convert_parameters
void convert_parameters(const irep_idt &current_mode, code_typet &function_type)
Definition: cpp_typecheck_function.cpp:71
cpp_typecheckt::method_bodiest
std::list< method_bodyt > method_bodiest
Definition: cpp_typecheck.h:342
struct_typet::basest
std::vector< baset > basest
Definition: std_types.h:254
message_handlert
Definition: message.h:28
cpp_typecheckt::standard_conversion_function_to_pointer
bool standard_conversion_function_to_pointer(const exprt &expr, exprt &new_expr) const
Function-to-pointer conversion.
Definition: cpp_typecheck_conversions.cpp:101
cpp_typecheckt::cpp_parse_tree
cpp_parse_treet & cpp_parse_tree
Definition: cpp_typecheck.h:111
exprt::operandst
std::vector< exprt > operandst
Definition: expr.h:55
cpp_typecheckt::get_component
bool get_component(const source_locationt &source_location, const exprt &object, const irep_idt &component_name, exprt &member)
Definition: cpp_typecheck_compound_type.cpp:1470
cpp_typecheck_resolvet::resolve
exprt resolve(const cpp_namet &cpp_name, const wantt want, const cpp_typecheck_fargst &fargs, bool fail_with_exception=true)
Definition: cpp_typecheck_resolve.cpp:1357
cpp_typecheckt::function_identifier
irep_idt function_identifier(const typet &type)
for function overloading
Definition: cpp_typecheck_function.cpp:158
cpp_typecheckt::typecheck_expr_throw
void typecheck_expr_throw(exprt &)
Definition: cpp_typecheck_expr.cpp:724
cpp_scopest
Definition: cpp_scopes.h:23
cpp_typecheckt::instantiation_levelt::instantiation_stack
instantiation_stackt & instantiation_stack
Definition: cpp_typecheck.h:202
cpp_typecheckt::standard_conversion_pointer_to_member
bool standard_conversion_pointer_to_member(const exprt &expr, const typet &type, exprt &new_expr)
Pointer-to-member conversion.
Definition: cpp_typecheck_conversions.cpp:555
cpp_typecheckt::instantiation_levelt::instantiation_levelt
instantiation_levelt(instantiation_stackt &_instantiation_stack)
Definition: cpp_typecheck.h:189
std_code.h
optionalt
nonstd::optional< T > optionalt
Definition: optional.h:35
cpp_typecheckt::convert_template_declaration
void convert_template_declaration(cpp_declarationt &declaration)
Definition: cpp_typecheck_template.cpp:967
cpp_typecheckt::cpp_typecheckt
cpp_typecheckt(cpp_parse_treet &_cpp_parse_tree, symbol_tablet &_symbol_table, const std::string &_module, message_handlert &message_handler)
Definition: cpp_typecheck.h:47
cpp_typecheckt::typecheck_compound_type
void typecheck_compound_type(struct_union_typet &) override
Definition: cpp_typecheck_compound_type.cpp:121
cpp_typecheckt::static_typecast
bool static_typecast(const exprt &expr, const typet &type, exprt &new_expr, bool check_constantness=true)
Definition: cpp_typecheck_conversions.cpp:1838
cpp_typecheckt::standard_conversion_integral_conversion
bool standard_conversion_integral_conversion(const exprt &expr, const typet &type, exprt &new_expr) const
Integral conversion.
Definition: cpp_typecheck_conversions.cpp:302
cpp_typecheckt::get_bases
void get_bases(const struct_typet &type, std::set< irep_idt > &set_bases) const
Definition: cpp_typecheck_compound_type.cpp:1631
cpp_template_args_non_tct
Definition: cpp_template_args.h:45
cpp_parse_tree.h
C++ Parser.
cpp_typecheckt::typecheck_expr_main
void typecheck_expr_main(exprt &) override
Called after the operands are done.
Definition: cpp_typecheck_expr.cpp:50
source_locationt
Definition: source_location.h:20
cpp_typecheckt::full_member_initialization
void full_member_initialization(const struct_union_typet &struct_union_type, irept &initializers)
Build the full initialization list of the constructor.
Definition: cpp_typecheck_constructor.cpp:545
cpp_typecheckt::typecheck_template_args
cpp_template_args_tct typecheck_template_args(const source_locationt &source_location, const symbolt &template_symbol, const cpp_template_args_non_tct &template_args)
Definition: cpp_typecheck_template.cpp:826
cpp_typecheckt::user_defined_conversion_sequence
bool user_defined_conversion_sequence(const exprt &expr, const typet &type, exprt &new_expr, unsigned &rank)
User-defined conversion sequence.
Definition: cpp_typecheck_conversions.cpp:854
cpp_typecheckt::reference_related
bool reference_related(const exprt &expr, const typet &type) const
Reference-related.
Definition: cpp_typecheck_conversions.cpp:1113
cpp_linkage_spect
Definition: cpp_linkage_spec.h:16
struct_union_typet::componentt
Definition: std_types.h:64
cpp_typecheckt::standard_conversion_qualification
bool standard_conversion_qualification(const exprt &expr, const typet &, exprt &new_expr) const
Qualification conversion.
Definition: cpp_typecheck_conversions.cpp:117
cpp_typecheckt::typecheck_expr
void typecheck_expr(exprt &) override
Definition: cpp_typecheck_expr.cpp:2251
cpp_typecheckt::typecheck_expr_comma
void typecheck_expr_comma(exprt &) override
Definition: cpp_typecheck_expr.cpp:2349
cpp_typecheckt::find_dtor
bool find_dtor(const symbolt &symbol) const
Definition: cpp_typecheck_destructor.cpp:16
cpp_typecheckt::add_anonymous_members_to_scope
void add_anonymous_members_to_scope(const symbolt &struct_union_symbol)
Definition: cpp_typecheck_compound_type.cpp:1367
cpp_typecheckt::add_this_to_method_type
void add_this_to_method_type(const symbolt &compound_symbol, code_typet &method_type, const typet &method_qualifier)
Definition: cpp_typecheck_compound_type.cpp:1338
messaget::message_handler
message_handlert * message_handler
Definition: message.h:439
struct_typet
Structure type, corresponds to C style structs.
Definition: std_types.h:226
cpp_typecheckt::typecheck_expr_new
void typecheck_expr_new(exprt &)
Definition: cpp_typecheck_expr.cpp:749
cpp_declarator_convertert::base_name
irep_idt base_name
Definition: cpp_declarator_converter.h:57
cpp_typecheckt::typecheck_enum_body
void typecheck_enum_body(symbolt &symbol)
Definition: cpp_typecheck_enum_type.cpp:22
cpp_typecheckt::instantiate_template
const symbolt & 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=uninitialized_typet{})
Definition: cpp_instantiate_template.cpp:253
cpp_typecheckt::const_typecast
bool const_typecast(const exprt &expr, const typet &type, exprt &new_expr)
Definition: cpp_typecheck_conversions.cpp:1632
cpp_typecheckt::typecheck_code
void typecheck_code(codet &) override
Definition: cpp_typecheck_code.cpp:23
cpp_typecheckt::typecheck_member_initializer
void typecheck_member_initializer(codet &)
Definition: cpp_typecheck_code.cpp:212
cpp_static_assertt
Definition: cpp_static_assert.h:18
symbolt
Symbol table entry.
Definition: symbol.h:28
cpp_typecheckt::typecheck_expr_this
void typecheck_expr_this(exprt &)
Definition: cpp_typecheck_expr.cpp:972
cpp_typecheckt::cast_away_constness
bool cast_away_constness(const typet &t1, const typet &t2) const
Definition: cpp_typecheck_conversions.cpp:1567
cpp_typecheckt::typecheck_expr_reference_to
void typecheck_expr_reference_to(exprt &)
binary_relation_exprt
A base class for relations, i.e., binary predicates whose two operands have the same type.
Definition: std_expr.h:725
cpp_typecheckt::has_auto
static bool has_auto(const typet &type)
Definition: cpp_typecheck_compound_type.cpp:64
cpp_typecheckt::convert_anonymous_union
codet convert_anonymous_union(cpp_declarationt &declaration)
Definition: cpp_typecheck_declaration.cpp:33
cpp_typecheckt::typecheck_expr_index
void typecheck_expr_index(exprt &) override
Definition: cpp_typecheck_expr.cpp:2344
template_mapt
Definition: template_map.h:24
cpp_typecheckt::do_not_typechecked
void do_not_typechecked()
Definition: cpp_typecheck.cpp:216
cpp_typecheckt::implicit_typecast
void implicit_typecast(exprt &expr, const typet &type) override
Definition: cpp_typecheck_conversions.cpp:1480
cpp_typecheckt::standard_conversion_pointer
bool standard_conversion_pointer(const exprt &expr, const typet &type, exprt &new_expr)
Pointer conversion.
Definition: cpp_typecheck_conversions.cpp:457
cpp_typecheckt::method_bodies
method_bodiest method_bodies
Definition: cpp_typecheck.h:344
cpp_typecheckt::has_volatile
static bool has_volatile(const typet &type)
Definition: cpp_typecheck_compound_type.cpp:48
code_typet::parametert
Definition: std_types.h:753
cpp_typecheckt::typecheck_expr_binary_arithmetic
void typecheck_expr_binary_arithmetic(exprt &) override
Definition: cpp_typecheck_expr.cpp:2329
cpp_typecheckt::find_parent
bool find_parent(const symbolt &symb, const irep_idt &base_name, irep_idt &identifier)
Definition: cpp_typecheck_expr.cpp:31
cpp_typecheckt::typecheck_enum_type
void typecheck_enum_type(typet &type)
Definition: cpp_typecheck_enum_type.cpp:87
cpp_typecheckt::standard_conversion_floating_integral_conversion
bool standard_conversion_floating_integral_conversion(const exprt &expr, const typet &type, exprt &new_expr) const
Floating-integral conversion.
Definition: cpp_typecheck_conversions.cpp:349
cpp_typecheckt::implicit_conversion_sequence
bool implicit_conversion_sequence(const exprt &expr, const typet &type, exprt &new_expr, unsigned &rank)
implicit conversion sequence
Definition: cpp_typecheck_conversions.cpp:1415
cpp_typecheckt::dynamic_typecast
bool dynamic_typecast(const exprt &expr, const typet &type, exprt &new_expr)
Definition: cpp_typecheck_conversions.cpp:1690
irept
There are a large number of kinds of tree structured or tree-like data in CPROVER.
Definition: irep.h:394
template_typet
Definition: cpp_template_type.h:19
cpp_typecheckt::to_string
std::string to_string(const typet &) override
Definition: cpp_typecheck.cpp:84
cpp_typecheckt::method_bodyt::method_symbol
symbolt * method_symbol
Definition: cpp_typecheck.h:337
cpp_typecheckt::find_assignop
bool find_assignop(const symbolt &symbol) const
Definition: cpp_typecheck_constructor.cpp:815
cpp_typecheckt::convert_template_function_or_member_specialization
void convert_template_function_or_member_specialization(cpp_declarationt &declaration)
Definition: cpp_typecheck_template.cpp:617
cpp_typecheckt::~cpp_typecheckt
~cpp_typecheckt() override
Definition: cpp_typecheck.h:75
cpp_typecheckt::explicit_typecast_ambiguity
void explicit_typecast_ambiguity(exprt &)
Definition: cpp_typecheck_expr.cpp:2272
cpp_typecheckt::cpp_destructor
optionalt< codet > cpp_destructor(const source_locationt &source_location, const exprt &object)
Definition: cpp_destructor.cpp:19
uninitialized_typet
Definition: cpp_parse_tree.h:32
cpp_typecheckt::find_cpctor
bool find_cpctor(const symbolt &symbol) const
Definition: cpp_typecheck_constructor.cpp:766
cpp_typecheckt::resolve
exprt resolve(const cpp_namet &cpp_name, const cpp_typecheck_resolvet::wantt want, const cpp_typecheck_fargst &fargs, bool fail_with_exception=true)
Definition: cpp_typecheck.h:88
cpp_typecheckt::template_map
template_mapt template_map
Definition: cpp_typecheck.h:228
cpp_typecheckt::typecheck_method_application
void typecheck_method_application(side_effect_expr_function_callt &)
Definition: cpp_typecheck_expr.cpp:1916
cpp_typecheckt::default_assignop
void default_assignop(const symbolt &symbol, cpp_declarationt &cpctor)
Generate declaration of the implicit default assignment operator.
Definition: cpp_typecheck_constructor.cpp:278
cpp_typecheckt::default_cpctor
void default_cpctor(const symbolt &, cpp_declarationt &cpctor) const
Generate code for implicit default copy constructor.
Definition: cpp_typecheck_constructor.cpp:141
cpp_namet
Definition: cpp_name.h:17
cpp_typecheckt::typecheck_expr_address_of
void typecheck_expr_address_of(exprt &) override
Definition: cpp_typecheck_expr.cpp:661
cpp_typecheckt::dynamic_initializations
dynamic_initializationst dynamic_initializations
Definition: cpp_typecheck.h:593
cpp_typecheckt::disable_access_control
bool disable_access_control
Definition: cpp_typecheck.h:594
cpp_itemt
Definition: cpp_item.h:24
cpp_declaratort
Definition: cpp_declarator.h:20
side_effect_exprt
An expression containing a side effect.
Definition: std_code.h:1866
cpp_typecheckt::typecheck_expr_ptrmember
void typecheck_expr_ptrmember(exprt &) override
Definition: cpp_typecheck_expr.cpp:347
cpp_typecheckt::move_member_initializers
void move_member_initializers(irept &initializers, const code_typet &type, exprt &value)
Definition: cpp_typecheck_compound_type.cpp:1214
cpp_typecheckt::typecheck
void typecheck() override
typechecking main method
Definition: cpp_typecheck.cpp:49
cpp_template_type.h
cpp_typecheckt::instantiationt::full_template_args
cpp_template_args_tct full_template_args
Definition: cpp_typecheck.h:178
codet
Data structure for representing an arbitrary statement in a program.
Definition: std_code.h:35