ESBMC
Efficient SMT-based Context-Bounded Model Checker
Loading...
Searching...
No Matches
constant_union2t Class Reference

Constant union expression. More...

#include <irep2_expr.h>

Inheritance diagram for constant_union2t:
[legend]

Public Member Functions

 constant_union2t (const type2tc &type, irep_idt if_, const std::vector< expr2tc > &members)
 Primary constructor.
 constant_union2t (const constant_union2t &ref)=default
Public Member Functions inherited from expr2t
virtual ~expr2t ()=default
expr2tc clone () const
expr2tc with_type (const type2tc &new_type) const
 Build a fresh expression of the same kind and field values as this one, but with a different type.
bool operator== (const expr2t &ref) const
bool operator< (const expr2t &ref) const
bool operator!= (const expr2t &ref) const
std::string pretty (unsigned int indent=0) const
 Produce textual representation of this expr.
DUMP_METHOD void dump () const
 Write textual representation of this object to stdout.
size_t crc () const
 Calculate a hash/digest of the current expr.
bool cmp (const expr2t &ref) const
 Structural comparison.
int lt (const expr2t &ref) const
 Trinary structural ordering.
list_of_memberst tostring (unsigned int indent) const
 Convert fields of subclasses to a string representation.
const expr2tc * get_sub_expr (size_t idx) const
 Fetch a sub-operand.
size_t get_num_sub_exprs () const
 Count the number of sub-exprs there are.
expr2tc simplify () const
 Simplify an expression.
expr2tc simplify (bool suppress_reassoc) const
 Simplify with reassociation suppression.
virtual expr2tc do_simplify () const
 expr-specific simplification methods.
template<typename T>
void foreach_operand (T &&t) const
 Indirect, abstract operand iteration.
template<typename T>
void Foreach_operand (T &&t)
Public Member Functions inherited from irep2t
 irep2t () noexcept
 irep2t (const irep2t &) noexcept
irep2t & operator= (const irep2t &)=delete
virtual ~irep2t ()=default
void mark_writer () const noexcept
void clear_writer () const noexcept

Public Attributes

std::vector< expr2tc > datatype_members
irep_idt init_field
Public Attributes inherited from expr2t
const expr_ids expr_id
 Instance of expr_ids recording tihs exprs type.
const type2tc type
 Type of this expr.
std::atomic< size_t > crc_val
Public Attributes inherited from irep2t
std::atomic< unsigned int > refcount
std::atomic< std::uintptr_t > writer_thread

Static Public Attributes

static constexpr auto fields
static std::string field_names [esbmct::num_type_fields]

Additional Inherited Members

Public Types inherited from expr2t
enum  expr_ids { end_expr_id }
 Enumeration identifying each sort of expr. More...
typedef esbmct::function_ref< void(const expr2tc &)> const_op_delegate
typedef esbmct::function_ref< void(expr2tc &)> op_delegate
typedef expr2tc container_type
typedef expr2t base_type
Static Public Member Functions inherited from irep2t
static std::uintptr_t current_thread_tag () noexcept
Protected Member Functions inherited from expr2t
 expr2t (const type2tc &type, expr_ids id)
 Primary constructor.
 expr2t (const expr2t &ref)
 Copy constructor.
void foreach_operand_impl_const (const_op_delegate &expr) const
void foreach_operand_impl (op_delegate &expr)

Detailed Description

Constant union expression.

Almost the same as constant_struct2t - a vector of members corresponding to the members described in the type. However, it seems the values pumped at us by CBMC only ever have one member (at position 0) representing the most recent value written to the union.

The one exception is a union type with no members, which occupies no storage and so has no member to initialise: gen_zero answers with a zero-member constant here. Such a constant is a zero-width value and must not reach dereference, whose constant_union2t arm asserts the single initialiser this comment describes.

Constructor & Destructor Documentation

◆ constant_union2t() [1/2]

constant_union2t::constant_union2t ( const type2tc & type,
irep_idt if_,
const std::vector< expr2tc > & members )
inline

Primary constructor.

Parameters
typeType of this structure, presumably a union_type2t
membersVector of member values that make up this union.

◆ constant_union2t() [2/2]

constant_union2t::constant_union2t ( const constant_union2t & ref)
default

Member Data Documentation

◆ datatype_members

std::vector<expr2tc> constant_union2t::datatype_members

◆ field_names

std::string constant_union2t::field_names
static
Initial value:
=
{"init_field", "members", "", "", ""}

◆ fields

auto constant_union2t::fields
staticconstexpr
Initial value:
= std::make_tuple(
irep_idt init_field
Definition irep2_expr.h:508
std::vector< expr2tc > datatype_members
Definition irep2_expr.h:507
const type2tc type
Type of this expr.
Definition irep2.h:910

◆ init_field

irep_idt constant_union2t::init_field

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