CBMC
goto_function.cpp
Go to the documentation of this file.
1 /*******************************************************************\
2 
3 Module: A GOTO Function
4 
5 Author: Daniel Kroening
6 
7 Date: May 2018
8 
9 \*******************************************************************/
10 
13 
14 #include "goto_function.h"
15 
16 #include <util/symbol.h>
17 
21  const goto_functiont &goto_function,
22  std::set<irep_idt> &dest)
23 {
24  goto_function.body.get_decl_identifiers(dest);
25 
26  // add parameters
27  for(const auto &identifier : goto_function.parameter_identifiers)
28  {
29  if(!identifier.empty())
30  dest.insert(identifier);
31  }
32 }
33 
39  const
40 {
41  for(const auto &identifier : parameter_identifiers)
42  {
44  vm,
45  identifier.empty() || ns.lookup(identifier).is_parameter,
46  "parameter should be marked 'is_parameter' in the symbol table",
47  "affected parameter: ",
48  identifier);
49  }
50 
51  // function body must end with an END_FUNCTION instruction
52  if(body_available())
53  {
54  DATA_CHECK(
55  vm,
56  body.instructions.back().is_end_function(),
57  "last instruction should be of end function type");
58  }
59 
60  body.validate(ns, vm);
61 }
goto_functiont::body
goto_programt body
Definition: goto_function.h:26
DATA_CHECK
#define DATA_CHECK(vm, condition, message)
This macro takes a condition which denotes a well-formedness criterion on goto programs,...
Definition: validate.h:22
goto_functiont::validate
void validate(const namespacet &ns, const validation_modet vm) const
Check that the goto function is well-formed.
Definition: goto_function.cpp:38
goto_programt::get_decl_identifiers
void get_decl_identifiers(decl_identifierst &decl_identifiers) const
get the variables in decl statements
Definition: goto_program.cpp:317
DATA_CHECK_WITH_DIAGNOSTICS
#define DATA_CHECK_WITH_DIAGNOSTICS(vm, condition, message,...)
Definition: validate.h:37
namespacet
A namespacet is essentially one or two symbol tables bound together, to allow for symbol lookups in t...
Definition: namespace.h:90
namespacet::lookup
bool lookup(const irep_idt &name, const symbolt *&symbol) const override
See documentation for namespace_baset::lookup().
Definition: namespace.cpp:138
goto_functiont::body_available
bool body_available() const
Definition: goto_function.h:35
symbol.h
Symbol table entry.
validation_modet
validation_modet
Definition: validation_mode.h:12
goto_functiont
A goto function, consisting of function body (see body) and parameter identifiers (see parameter_iden...
Definition: goto_function.h:23
goto_programt::validate
void validate(const namespacet &ns, const validation_modet vm) const
Check that the goto program is well-formed.
Definition: goto_program.h:857
get_local_identifiers
void get_local_identifiers(const goto_functiont &goto_function, std::set< irep_idt > &dest)
Return in dest the identifiers of the local variables declared in the goto_function and the identifie...
Definition: goto_function.cpp:20
goto_programt::instructions
instructionst instructions
The list of instructions in the goto program.
Definition: goto_program.h:592
goto_functiont::parameter_identifiers
parameter_identifierst parameter_identifiers
The identifiers of the parameters of this function.
Definition: goto_function.h:33
goto_function.h