#include <renaming.h>
◆ current_namest
◆ level2t()
| renaming::level2t::level2t |
( |
| ) |
|
|
default |
◆ ~level2t()
| renaming::level2t::~level2t |
( |
| ) |
|
|
overridedefault |
◆ clone()
| virtual std::shared_ptr< level2t > renaming::level2t::clone |
( |
| ) |
const |
|
pure virtual |
◆ coveredinbees()
| void renaming::level2t::coveredinbees |
( |
expr2tc & | lhs_sym, |
|
|
unsigned | count, |
|
|
unsigned | node_id ) |
|
protectedvirtual |
◆ current_number() [1/2]
| unsigned renaming::level2t::current_number |
( |
const expr2tc & | sym | ) |
const |
◆ current_number() [2/2]
| unsigned renaming::level2t::current_number |
( |
const name_record & | rec | ) |
const |
◆ current_value()
Get-or-default then re-store: the persistent map hands out immutable values, so a "modify the entry in place" site reads a copy, mutates it, and sets it back.
◆ declare()
| void renaming::level2t::declare |
( |
const name_record & | rec | ) |
|
|
inline |
Record rec at its initial version.
phi_function merges only names that already had a record when the branch was taken, so storage first written inside a branch would otherwise keep that branch's version on both paths (#6798). get_ident_name numbers a count-0 record exactly as it numbers an absent one, so declaring costs no SSA renumbering.
◆ dump()
| void renaming::level2t::dump |
( |
| ) |
const |
|
virtual |
◆ get_ident_name()
| void renaming::level2t::get_ident_name |
( |
expr2tc & | symbol | ) |
const |
|
overridevirtual |
◆ get_original_name()
| void renaming::level2t::get_original_name |
( |
expr2tc & | expr | ) |
const |
|
inlineoverridevirtual |
◆ make_assignment()
| void renaming::level2t::make_assignment |
( |
expr2tc & | lhs_symbol, |
|
|
const expr2tc & | constant_value, |
|
|
const expr2tc & | assigned_value ) |
|
virtual |
◆ print()
| void renaming::level2t::print |
( |
std::ostream & | out | ) |
const |
|
virtual |
◆ remove()
| void renaming::level2t::remove |
( |
const expr2tc & | symbol | ) |
|
|
inlineoverridevirtual |
◆ rename() [1/2]
| void renaming::level2t::rename |
( |
expr2tc & | expr | ) |
|
|
overridevirtual |
◆ rename() [2/2]
| virtual void renaming::level2t::rename |
( |
expr2tc & | expr, |
|
|
unsigned | count ) |
|
pure virtual |
◆ rename_to_record()
◆ retire()
| void renaming::level2t::retire |
( |
const name_record & | rec | ) |
|
|
inline |
Retire a name whose storage has gone out of scope.
L1 names are never reused across frames (symex_decl's counter is monotone), so a popped frame's local can still be named – through a dangling pointer – after teardown. Erasing the record restarts the counter, letting such a write re-issue an index the declaration already defined and so define one SSA name twice (I10). Advancing past the last live index instead leaves the current name undefined, which keeps a read of the expired storage unconstrained exactly as erasure did.
◆ set_constant()
Complete an assignment make_assignment has just made, whose value only its caller can build: #7597 re-offers a refused member write as a read of the L2 name make_assignment mints.
Narrow on purpose – an entry that is absent or already carries a value means the caller keyed the wrong record, which would otherwise be a silent no-op.
◆ build_goto_symex_classes
| void build_goto_symex_classes |
( |
| ) |
|
|
friend |
◆ current_names
The documentation for this struct was generated from the following files: