Ordinary_Operator_Function

class Ordinary_Operator_Function (concrete, logical)
Implemented interfaces:
Direct parents:
Ancestor classes and implemented interfaces:

Declarative_Node, General_Object_Interface, Local_Scope, Logical_IR_Root, Named_Entity, Nonmember_Routine, Nonstatic_Operator_Function, Operator_Function, Operator_Interface, Parameters_Interface, Primary_Link_Object_Interface, Real_Entity_Interface, Real_Routine_Interface, Routine, Scope, Symbol, Template_Base_Interface

Field

Kind

Type

Description

Routines (from Routine)

syntactic

set of class Routine

replace inherited field with default value

Return_Type (from Routine)

semantic

class Type

Always semantic reference as we move anonymous types into special part of the AST

Attributes (from Routine)

attribute

bitfield Logical_Routine_Attributes_Type

Bitfield of flags like is_inline, is_const etc.

Calling_Convention (from Routine)

attribute

enum Calling_Convention_Kind

esp. MS-specific conventions like __stdcall

Friend_Of (from Routine)

semantic

set of class Type

Classes this routine is a friend of (and can therefore access their members).

Basic_Blocks (from Routine)

syntactic

list of class CFG_Block

Basic_Blocks[0] is CFG_Entry_Block, Basic_Blocks[-1] is CFG_Exit_Block. The blocks/instructions appear approximately in syntactic order. Statements are emitted in exactly syntactic order; expressions within a statement will generate instructions in evaluation order.

  • In for (int i = 0; i < 10; i++) body;, the loop-expression i++ will appear after the loop body.

  • In f()->field = g();, the call to g() will appear before the call to f() according to the C++17 evaluation order.

  • Code after a goto (whether unreachable or reachable via label) will be placed directly after the goto block.

  • For any statement/expression, all instructions from that stmt/expr will form a contiguous region (which may spread across multiple blocks), and will not be interleaved with the instructions from a different statement/expression. This makes it possible to use a pair of start/end edges to instructions to mark the whole region of code responsible, e.g., for the initialization of a variable.

The Basic_Blocks list does not contain the exceptional exit block or the coroutine destroy exit block – if these are present, they are stored in separate syntactic fields.

Exceptional_Exit_Block (from Routine)

syntactic

class CFG_Exceptional_Exit_Block

in case an exception propagates from within the routine

Coroutine_Destroy_Exit_Block (from Routine)

syntactic

class CFG_Coroutine_Destroy_Exit_Block

coroutine destroy exit block syntactic Control_Tree_Root : class Control_Tree_Block; semantic Unreachable_Blocks : set of class CFG_Standard_Block; those with no predecessors (except the entry node); they could still be the target of a local computed goto

Return_Value (from Routine)

syntactic

class Return_Helper_Variable

the object which represents the return value, or NULL if none

Cuda_Architecture (from Routine)

attribute

builtin Byte

If non-zero, the CUDA device architecture for which the routine was compiled. E.g., a __device__ function compiled with -arch=compute_70 has Cuda_Architecture=70. Host code has Cuda_Architecture=0.

Nested_Scopes (from Local_Scope)

syntactic

list of class Local_Scope

Nested block and temporary scopes.

Helpers (from Local_Scope)

syntactic

list of class Helper_Variable

Temporary variables.

Usings (from Scope)

semantic

set of class Symbol

using <namespace> and using <declaration>

Types (from Scope)

syntactic

set of class Type

Variables (from Scope)

syntactic

set of class Variable

Concepts (from Scope)

syntactic

set of class Concept

Template_Composites (from Scope)

syntactic

set of interface Template_Composite_Type_Interface

Template_Routines (from Scope)

syntactic

set of interface Template_Routine_Interface

Parent (from Logical_IR_Root)

semantic

class Logical_IR_Root

Physical (from Logical_IR_Root)

semantic to physical

class Physical_IR_Root

Kind (from Operator_Interface)

attribute

enum Operator_Type

enumerator to designate the specific operator

Link_Flags (from Primary_Link_Object_Interface)

attribute

bitfield Link_Flags_Type

Component (from Primary_Link_Object_Interface)

attribute

builtin String

for local-to-library elements: name of DLL/.so when linked (sealed) for unit-local constexpr variables: name of file

Base_Template (from Template_Base_Interface)

semantic

class Symbol

usually, a Template_Interface, but could also be a normal method/nested class inside a template

Template_Arguments (from Template_Base_Interface)

syntactic

list of class Template_Argument

Is_Partial_Specialization (from Template_Base_Interface)

attribute

builtin Boolean

Is_Full_Specialization (from Template_Base_Interface)

attribute

builtin Boolean

Is_Template_Instance (from Template_Base_Interface)

attribute

builtin Boolean

Parameters (from Parameters_Interface)

syntactic

list of class Parameter

Name (from Named_Entity)

attribute

builtin String