C++: Call functions for NSDMI initialization

Currently missing: side-effect information for the functions
This commit is contained in:
Jeroen Ketema
2026-03-03 11:20:17 +01:00
parent b91a52a050
commit e986d8922a
5 changed files with 369 additions and 207 deletions

View File

@@ -767,7 +767,7 @@ newtype TTranslatedElement =
expr = initList.getFieldExpr(field, position).getFullyConverted()
)
or
exists(ConstructorFieldInit init |
exists(ConstructorDirectFieldInit init |
not ignoreExpr(init) and
ast = init and
field = init.getTarget() and
@@ -775,6 +775,14 @@ newtype TTranslatedElement =
position = -1
)
} or
// The initialization of a field via a default member initializer.
TTranslatedDefaultFieldInitialization(Expr ast, Field field) {
exists(ConstructorDefaultFieldInit init |
not ignoreExpr(init) and
ast = init and
field = init.getTarget()
)
} or
// The value initialization of a field due to an omitted member of an
// initializer list.
TTranslatedFieldValueInitialization(Expr ast, Field field) {

View File

@@ -533,10 +533,7 @@ abstract class TranslatedFieldInitialization extends TranslatedElement {
result = getEnclosingVariable(ast).(Field)
}
final override Instruction getFirstInstruction(EdgeKind kind) {
result = this.getInstruction(this.getFieldAddressTag()) and
kind instanceof GotoEdge
}
final Field getField() { result = field }
/**
* Gets the zero-based index describing the order in which this field is to be
@@ -544,6 +541,20 @@ abstract class TranslatedFieldInitialization extends TranslatedElement {
*/
final int getOrder() { result = field.getInitializationOrder() }
/** Gets the position in the initializer list, or `-1` if the initialization is implicit. */
int getPosition() { result = -1 }
}
/**
* Represents the IR translation of the initialization of a field from an
* element of an initializer list where default initialization is not used.
*/
abstract class TranslatedNonDefaultFieldInitialization extends TranslatedFieldInitialization {
final override Instruction getFirstInstruction(EdgeKind kind) {
result = this.getInstruction(this.getFieldAddressTag()) and
kind instanceof GotoEdge
}
override predicate hasInstruction(Opcode opcode, InstructionTag tag, CppType resultType) {
tag = this.getFieldAddressTag() and
opcode instanceof Opcode::FieldAddress and
@@ -561,18 +572,13 @@ abstract class TranslatedFieldInitialization extends TranslatedElement {
}
final InstructionTag getFieldAddressTag() { result = InitializerFieldAddressTag() }
final Field getField() { result = field }
/** Gets the position in the initializer list, or `-1` if the initialization is implicit. */
int getPosition() { result = -1 }
}
/**
* Represents the IR translation of the initialization of a field from an
* explicit element in an initializer list.
*/
class TranslatedExplicitFieldInitialization extends TranslatedFieldInitialization,
class TranslatedExplicitFieldInitialization extends TranslatedNonDefaultFieldInitialization,
InitializationContext, TTranslatedExplicitFieldInitialization
{
Expr expr;
@@ -612,6 +618,61 @@ class TranslatedExplicitFieldInitialization extends TranslatedFieldInitializatio
override int getPosition() { result = position }
}
/**
* Represents the IR translation of the initialization of a field from an
* element of an initializer list where default initialization is used.
*/
class TranslatedDefaultFieldInitialization extends TranslatedFieldInitialization,
TTranslatedDefaultFieldInitialization
{
TranslatedDefaultFieldInitialization() {
this = TTranslatedDefaultFieldInitialization(ast, field)
}
final override Instruction getFirstInstruction(EdgeKind kind) {
result = this.getInstruction(CallTargetTag()) and
kind instanceof GotoEdge
}
override Instruction getALastInstructionInternal() { result = this.getInstruction(CallTag()) }
override Instruction getInstructionSuccessorInternal(InstructionTag tag, EdgeKind kind) {
tag = CallTargetTag() and
result = this.getInstruction(CallTag())
or
tag = CallTag() and
result = this.getParent().getChildSuccessor(this, kind)
}
override predicate hasInstruction(Opcode opcode, InstructionTag tag, CppType resultType) {
tag = CallTargetTag() and
opcode instanceof Opcode::FunctionAddress and
resultType = getFunctionGLValueType()
or
tag = CallTag() and
opcode instanceof Opcode::Call and
resultType = getVoidType()
}
override Instruction getInstructionRegisterOperand(InstructionTag tag, OperandTag operandTag) {
tag = CallTag() and
(
operandTag instanceof CallTargetOperandTag and
result = this.getInstruction(CallTargetTag())
or
operandTag instanceof ThisArgumentOperandTag and
result = getTranslatedFunction(this.getFunction()).getLoadThisInstruction()
)
}
override Declaration getInstructionFunction(InstructionTag tag) {
tag = CallTargetTag() and
result = field
}
override TranslatedElement getChild(int id) { none() }
}
private string getZeroValue(Type type) {
if type instanceof FloatingPointType then result = "0.0" else result = "0"
}
@@ -620,7 +681,7 @@ private string getZeroValue(Type type) {
* Represents the IR translation of the initialization of a field without a
* corresponding element in the initializer list.
*/
class TranslatedFieldValueInitialization extends TranslatedFieldInitialization,
class TranslatedFieldValueInitialization extends TranslatedNonDefaultFieldInitialization,
TTranslatedFieldValueInitialization
{
TranslatedFieldValueInitialization() { this = TTranslatedFieldValueInitialization(ast, field) }
@@ -630,7 +691,7 @@ class TranslatedFieldValueInitialization extends TranslatedFieldInitialization,
}
override predicate hasInstruction(Opcode opcode, InstructionTag tag, CppType resultType) {
TranslatedFieldInitialization.super.hasInstruction(opcode, tag, resultType)
TranslatedNonDefaultFieldInitialization.super.hasInstruction(opcode, tag, resultType)
or
tag = this.getFieldDefaultValueTag() and
opcode instanceof Opcode::Constant and
@@ -661,7 +722,8 @@ class TranslatedFieldValueInitialization extends TranslatedFieldInitialization,
}
override Instruction getInstructionRegisterOperand(InstructionTag tag, OperandTag operandTag) {
result = TranslatedFieldInitialization.super.getInstructionRegisterOperand(tag, operandTag)
result =
TranslatedNonDefaultFieldInitialization.super.getInstructionRegisterOperand(tag, operandTag)
or
tag = this.getFieldDefaultValueStoreTag() and
(

View File

@@ -12369,11 +12369,14 @@ ir.cpp:
# 1533| m1533_6(glval<StructuredBindingDataMemberMemberStruct>) = InitializeParameter[#this] : &:r1533_5
# 1533| r1533_7(glval<StructuredBindingDataMemberMemberStruct>) = Load[#this] : &:r1533_5, m1533_6
# 1533| m1533_8(StructuredBindingDataMemberMemberStruct) = InitializeIndirection[#this] : &:r1533_7
# 1533| v1533_9(void) = NoOp :
# 1533| v1533_10(void) = ReturnIndirection[#this] : &:r1533_7, m1533_8
# 1533| v1533_11(void) = ReturnVoid :
# 1533| v1533_12(void) = AliasedUse : m1533_3
# 1533| v1533_13(void) = ExitFunction :
# 1533| m1533_9(unknown) = Chi : total:m1533_4, partial:m1533_8
# 1533| r1533_10(glval<unknown>) = FunctionAddress[x] :
# 1533| v1533_11(void) = Call[x] : func:r1533_10, this:r1533_7
# 1533| v1533_12(void) = NoOp :
# 1533| v1533_13(void) = ReturnIndirection[#this] : &:r1533_7, m1533_8
# 1533| v1533_14(void) = ReturnVoid :
# 1533| v1533_15(void) = AliasedUse : ~m1533_9
# 1533| v1533_16(void) = ExitFunction :
# 1534| int StructuredBindingDataMemberMemberStruct::x
# 1534| Block 0
@@ -12395,19 +12398,39 @@ ir.cpp:
# 1537| void StructuredBindingDataMemberStruct::StructuredBindingDataMemberStruct()
# 1537| Block 0
# 1537| v1537_1(void) = EnterFunction :
# 1537| m1537_2(unknown) = AliasedDefinition :
# 1537| m1537_3(unknown) = InitializeNonLocal :
# 1537| m1537_4(unknown) = Chi : total:m1537_2, partial:m1537_3
# 1537| r1537_5(glval<unknown>) = VariableAddress[#this] :
# 1537| m1537_6(glval<StructuredBindingDataMemberStruct>) = InitializeParameter[#this] : &:r1537_5
# 1537| r1537_7(glval<StructuredBindingDataMemberStruct>) = Load[#this] : &:r1537_5, m1537_6
# 1537| m1537_8(StructuredBindingDataMemberStruct) = InitializeIndirection[#this] : &:r1537_7
# 1537| v1537_9(void) = NoOp :
# 1537| v1537_10(void) = ReturnIndirection[#this] : &:r1537_7, m1537_8
# 1537| v1537_11(void) = ReturnVoid :
# 1537| v1537_12(void) = AliasedUse : m1537_3
# 1537| v1537_13(void) = ExitFunction :
# 1537| v1537_1(void) = EnterFunction :
# 1537| m1537_2(unknown) = AliasedDefinition :
# 1537| m1537_3(unknown) = InitializeNonLocal :
# 1537| m1537_4(unknown) = Chi : total:m1537_2, partial:m1537_3
# 1537| r1537_5(glval<unknown>) = VariableAddress[#this] :
# 1537| m1537_6(glval<StructuredBindingDataMemberStruct>) = InitializeParameter[#this] : &:r1537_5
# 1537| r1537_7(glval<StructuredBindingDataMemberStruct>) = Load[#this] : &:r1537_5, m1537_6
# 1537| m1537_8(StructuredBindingDataMemberStruct) = InitializeIndirection[#this] : &:r1537_7
# 1537| m1537_9(unknown) = Chi : total:m1537_4, partial:m1537_8
# 1537| r1537_10(glval<unknown>) = FunctionAddress[i] :
# 1537| v1537_11(void) = Call[i] : func:r1537_10, this:r1537_7
# 1537| r1537_12(glval<unknown>) = FunctionAddress[d] :
# 1537| v1537_13(void) = Call[d] : func:r1537_12, this:r1537_7
# 1537| r1537_14(glval<unknown>) = FunctionAddress[r] :
# 1537| v1537_15(void) = Call[r] : func:r1537_14, this:r1537_7
# 1537| r1537_16(glval<unknown>) = FunctionAddress[p] :
# 1537| v1537_17(void) = Call[p] : func:r1537_16, this:r1537_7
# 1537| r1537_18(glval<unknown>) = FunctionAddress[xs] :
# 1537| v1537_19(void) = Call[xs] : func:r1537_18, this:r1537_7
# 1537| r1537_20(glval<unknown>) = FunctionAddress[r_alt] :
# 1537| v1537_21(void) = Call[r_alt] : func:r1537_20, this:r1537_7
# 1537| r1537_22(glval<StructuredBindingDataMemberMemberStruct>) = FieldAddress[m] : r1537_7
# 1537| r1537_23(glval<unknown>) = FunctionAddress[StructuredBindingDataMemberMemberStruct] :
# 1537| v1537_24(void) = Call[StructuredBindingDataMemberMemberStruct] : func:r1537_23, this:r1537_22
# 1537| m1537_25(unknown) = ^CallSideEffect : ~m1537_9
# 1537| m1537_26(unknown) = Chi : total:m1537_9, partial:m1537_25
# 1537| m1537_27(StructuredBindingDataMemberMemberStruct) = ^IndirectMayWriteSideEffect[-1] : &:r1537_22
# 1537| m1537_28(unknown) = Chi : total:m1537_26, partial:m1537_27
# 1537| v1537_29(void) = NoOp :
# 1537| v1537_30(void) = ReturnIndirection[#this] : &:r1537_7, ~m1537_28
# 1537| v1537_31(void) = ReturnVoid :
# 1537| v1537_32(void) = AliasedUse : ~m1537_28
# 1537| v1537_33(void) = ExitFunction :
# 1537| void StructuredBindingDataMemberStruct::StructuredBindingDataMemberStruct(StructuredBindingDataMemberStruct const&)
# 1537| Block 0
@@ -12626,15 +12649,16 @@ ir.cpp:
# 1550| m1550_4(unknown) = Chi : total:m1550_2, partial:m1550_3
# 1551| r1551_1(glval<StructuredBindingDataMemberStruct>) = VariableAddress[s] :
# 1551| m1551_2(StructuredBindingDataMemberStruct) = Uninitialized[s] : &:r1551_1
# 1551| r1551_3(glval<unknown>) = FunctionAddress[StructuredBindingDataMemberStruct] :
# 1551| v1551_4(void) = Call[StructuredBindingDataMemberStruct] : func:r1551_3, this:r1551_1
# 1551| m1551_5(unknown) = ^CallSideEffect : ~m1550_4
# 1551| m1551_6(unknown) = Chi : total:m1550_4, partial:m1551_5
# 1551| m1551_7(StructuredBindingDataMemberStruct) = ^IndirectMayWriteSideEffect[-1] : &:r1551_1
# 1551| m1551_8(StructuredBindingDataMemberStruct) = Chi : total:m1551_2, partial:m1551_7
# 1551| m1551_3(unknown) = Chi : total:m1550_4, partial:m1551_2
# 1551| r1551_4(glval<unknown>) = FunctionAddress[StructuredBindingDataMemberStruct] :
# 1551| v1551_5(void) = Call[StructuredBindingDataMemberStruct] : func:r1551_4, this:r1551_1
# 1551| m1551_6(unknown) = ^CallSideEffect : ~m1551_3
# 1551| m1551_7(unknown) = Chi : total:m1551_3, partial:m1551_6
# 1551| m1551_8(StructuredBindingDataMemberStruct) = ^IndirectMayWriteSideEffect[-1] : &:r1551_1
# 1551| m1551_9(unknown) = Chi : total:m1551_7, partial:m1551_8
# 1554| r1554_1(glval<StructuredBindingDataMemberStruct>) = VariableAddress[(unnamed local variable)] :
# 1554| r1554_2(glval<StructuredBindingDataMemberStruct>) = VariableAddress[s] :
# 1554| r1554_3(StructuredBindingDataMemberStruct) = Load[s] : &:r1554_2, m1551_8
# 1554| r1554_3(StructuredBindingDataMemberStruct) = Load[s] : &:r1554_2, ~m1551_9
# 1554| m1554_4(StructuredBindingDataMemberStruct) = Store[(unnamed local variable)] : &:r1554_1, r1554_3
# 1554| r1554_5(glval<int &>) = VariableAddress[i] :
# 1554| r1554_6(glval<StructuredBindingDataMemberStruct>) = VariableAddress[(unnamed local variable)] :
@@ -12691,7 +12715,7 @@ ir.cpp:
# 1558| r1558_2(glval<int &>) = VariableAddress[r] :
# 1558| r1558_3(int &) = Load[r] : &:r1558_2, m1554_22
# 1558| m1558_4(int) = Store[?] : &:r1558_3, r1558_1
# 1558| m1558_5(unknown) = Chi : total:m1551_6, partial:m1558_4
# 1558| m1558_5(unknown) = Chi : total:m1551_9, partial:m1558_4
# 1559| r1559_1(int) = Constant[6] :
# 1559| r1559_2(glval<int *&>) = VariableAddress[p] :
# 1559| r1559_3(int *&) = Load[p] : &:r1559_2, m1554_26
@@ -12716,7 +12740,7 @@ ir.cpp:
# 1562| m1562_5(int) = Store[w] : &:r1562_1, r1562_4
# 1566| r1566_1(glval<StructuredBindingDataMemberStruct>) = VariableAddress[unnamed_local_variable] :
# 1566| r1566_2(glval<StructuredBindingDataMemberStruct>) = VariableAddress[s] :
# 1566| r1566_3(StructuredBindingDataMemberStruct) = Load[s] : &:r1566_2, m1551_8
# 1566| r1566_3(StructuredBindingDataMemberStruct) = Load[s] : &:r1566_2, ~m1559_7
# 1566| m1566_4(StructuredBindingDataMemberStruct) = Store[unnamed_local_variable] : &:r1566_1, r1566_3
# 1567| r1567_1(glval<int &>) = VariableAddress[i] :
# 1567| r1567_2(glval<StructuredBindingDataMemberStruct>) = VariableAddress[unnamed_local_variable] :
@@ -12802,11 +12826,18 @@ ir.cpp:
# 1590| m1590_6(glval<StructuredBindingTupleRefGet>) = InitializeParameter[#this] : &:r1590_5
# 1590| r1590_7(glval<StructuredBindingTupleRefGet>) = Load[#this] : &:r1590_5, m1590_6
# 1590| m1590_8(StructuredBindingTupleRefGet) = InitializeIndirection[#this] : &:r1590_7
# 1590| v1590_9(void) = NoOp :
# 1590| v1590_10(void) = ReturnIndirection[#this] : &:r1590_7, m1590_8
# 1590| v1590_11(void) = ReturnVoid :
# 1590| v1590_12(void) = AliasedUse : m1590_3
# 1590| v1590_13(void) = ExitFunction :
# 1590| m1590_9(unknown) = Chi : total:m1590_4, partial:m1590_8
# 1590| r1590_10(glval<unknown>) = FunctionAddress[i] :
# 1590| v1590_11(void) = Call[i] : func:r1590_10, this:r1590_7
# 1590| r1590_12(glval<unknown>) = FunctionAddress[d] :
# 1590| v1590_13(void) = Call[d] : func:r1590_12, this:r1590_7
# 1590| r1590_14(glval<unknown>) = FunctionAddress[r] :
# 1590| v1590_15(void) = Call[r] : func:r1590_14, this:r1590_7
# 1590| v1590_16(void) = NoOp :
# 1590| v1590_17(void) = ReturnIndirection[#this] : &:r1590_7, m1590_8
# 1590| v1590_18(void) = ReturnVoid :
# 1590| v1590_19(void) = AliasedUse : ~m1590_9
# 1590| v1590_20(void) = ExitFunction :
# 1590| void StructuredBindingTupleRefGet::StructuredBindingTupleRefGet(StructuredBindingTupleRefGet const&)
# 1590| Block 0
@@ -12986,22 +13017,23 @@ ir.cpp:
# 1630| m1630_4(unknown) = Chi : total:m1630_2, partial:m1630_3
# 1631| r1631_1(glval<StructuredBindingTupleRefGet>) = VariableAddress[t] :
# 1631| m1631_2(StructuredBindingTupleRefGet) = Uninitialized[t] : &:r1631_1
# 1631| r1631_3(glval<unknown>) = FunctionAddress[StructuredBindingTupleRefGet] :
# 1631| v1631_4(void) = Call[StructuredBindingTupleRefGet] : func:r1631_3, this:r1631_1
# 1631| m1631_5(unknown) = ^CallSideEffect : ~m1630_4
# 1631| m1631_6(unknown) = Chi : total:m1630_4, partial:m1631_5
# 1631| m1631_7(StructuredBindingTupleRefGet) = ^IndirectMayWriteSideEffect[-1] : &:r1631_1
# 1631| m1631_8(StructuredBindingTupleRefGet) = Chi : total:m1631_2, partial:m1631_7
# 1631| m1631_3(unknown) = Chi : total:m1630_4, partial:m1631_2
# 1631| r1631_4(glval<unknown>) = FunctionAddress[StructuredBindingTupleRefGet] :
# 1631| v1631_5(void) = Call[StructuredBindingTupleRefGet] : func:r1631_4, this:r1631_1
# 1631| m1631_6(unknown) = ^CallSideEffect : ~m1631_3
# 1631| m1631_7(unknown) = Chi : total:m1631_3, partial:m1631_6
# 1631| m1631_8(StructuredBindingTupleRefGet) = ^IndirectMayWriteSideEffect[-1] : &:r1631_1
# 1631| m1631_9(unknown) = Chi : total:m1631_7, partial:m1631_8
# 1634| r1634_1(glval<StructuredBindingTupleRefGet>) = VariableAddress[(unnamed local variable)] :
# 1634| r1634_2(glval<StructuredBindingTupleRefGet>) = VariableAddress[t] :
# 1634| r1634_3(StructuredBindingTupleRefGet) = Load[t] : &:r1634_2, m1631_8
# 1634| r1634_3(StructuredBindingTupleRefGet) = Load[t] : &:r1634_2, ~m1631_9
# 1634| m1634_4(StructuredBindingTupleRefGet) = Store[(unnamed local variable)] : &:r1634_1, r1634_3
# 1634| r1634_5(glval<int &>) = VariableAddress[i] :
# 1634| r1634_6(glval<StructuredBindingTupleRefGet>) = VariableAddress[(unnamed local variable)] :
# 1634| r1634_7(glval<unknown>) = FunctionAddress[get] :
# 1634| r1634_8(int &) = Call[get] : func:r1634_7, this:r1634_6
# 1634| m1634_9(unknown) = ^CallSideEffect : ~m1631_6
# 1634| m1634_10(unknown) = Chi : total:m1631_6, partial:m1634_9
# 1634| m1634_9(unknown) = ^CallSideEffect : ~m1631_9
# 1634| m1634_10(unknown) = Chi : total:m1631_9, partial:m1634_9
# 1634| v1634_11(void) = ^IndirectReadSideEffect[-1] : &:r1634_6, m1634_4
# 1634| m1634_12(StructuredBindingTupleRefGet) = ^IndirectMayWriteSideEffect[-1] : &:r1634_6
# 1634| m1634_13(StructuredBindingTupleRefGet) = Chi : total:m1634_4, partial:m1634_12
@@ -13068,7 +13100,7 @@ ir.cpp:
# 1640| m1640_5(int) = Store[w] : &:r1640_1, r1640_4
# 1644| r1644_1(glval<StructuredBindingTupleRefGet>) = VariableAddress[unnamed_local_variable] :
# 1644| r1644_2(glval<StructuredBindingTupleRefGet>) = VariableAddress[t] :
# 1644| r1644_3(StructuredBindingTupleRefGet) = Load[t] : &:r1644_2, m1631_8
# 1644| r1644_3(StructuredBindingTupleRefGet) = Load[t] : &:r1644_2, ~m1638_6
# 1644| m1644_4(StructuredBindingTupleRefGet) = Store[unnamed_local_variable] : &:r1644_1, r1644_3
# 1645| r1645_1(glval<int &>) = VariableAddress[i] :
# 1645| r1645_2(glval<StructuredBindingTupleRefGet>) = VariableAddress[unnamed_local_variable] :
@@ -13155,11 +13187,16 @@ ir.cpp:
# 1657| m1657_6(glval<StructuredBindingTupleNoRefGet>) = InitializeParameter[#this] : &:r1657_5
# 1657| r1657_7(glval<StructuredBindingTupleNoRefGet>) = Load[#this] : &:r1657_5, m1657_6
# 1657| m1657_8(StructuredBindingTupleNoRefGet) = InitializeIndirection[#this] : &:r1657_7
# 1657| v1657_9(void) = NoOp :
# 1657| v1657_10(void) = ReturnIndirection[#this] : &:r1657_7, m1657_8
# 1657| v1657_11(void) = ReturnVoid :
# 1657| v1657_12(void) = AliasedUse : m1657_3
# 1657| v1657_13(void) = ExitFunction :
# 1657| m1657_9(unknown) = Chi : total:m1657_4, partial:m1657_8
# 1657| r1657_10(glval<unknown>) = FunctionAddress[i] :
# 1657| v1657_11(void) = Call[i] : func:r1657_10, this:r1657_7
# 1657| r1657_12(glval<unknown>) = FunctionAddress[r] :
# 1657| v1657_13(void) = Call[r] : func:r1657_12, this:r1657_7
# 1657| v1657_14(void) = NoOp :
# 1657| v1657_15(void) = ReturnIndirection[#this] : &:r1657_7, m1657_8
# 1657| v1657_16(void) = ReturnVoid :
# 1657| v1657_17(void) = AliasedUse : ~m1657_9
# 1657| v1657_18(void) = ExitFunction :
# 1658| int StructuredBindingTupleNoRefGet::i
# 1658| Block 0
@@ -13276,12 +13313,13 @@ ir.cpp:
# 1696| m1696_4(unknown) = Chi : total:m1696_2, partial:m1696_3
# 1697| r1697_1(glval<StructuredBindingTupleNoRefGet>) = VariableAddress[t] :
# 1697| m1697_2(StructuredBindingTupleNoRefGet) = Uninitialized[t] : &:r1697_1
# 1697| r1697_3(glval<unknown>) = FunctionAddress[StructuredBindingTupleNoRefGet] :
# 1697| v1697_4(void) = Call[StructuredBindingTupleNoRefGet] : func:r1697_3, this:r1697_1
# 1697| m1697_5(unknown) = ^CallSideEffect : ~m1696_4
# 1697| m1697_6(unknown) = Chi : total:m1696_4, partial:m1697_5
# 1697| m1697_7(StructuredBindingTupleNoRefGet) = ^IndirectMayWriteSideEffect[-1] : &:r1697_1
# 1697| m1697_8(StructuredBindingTupleNoRefGet) = Chi : total:m1697_2, partial:m1697_7
# 1697| m1697_3(unknown) = Chi : total:m1696_4, partial:m1697_2
# 1697| r1697_4(glval<unknown>) = FunctionAddress[StructuredBindingTupleNoRefGet] :
# 1697| v1697_5(void) = Call[StructuredBindingTupleNoRefGet] : func:r1697_4, this:r1697_1
# 1697| m1697_6(unknown) = ^CallSideEffect : ~m1697_3
# 1697| m1697_7(unknown) = Chi : total:m1697_3, partial:m1697_6
# 1697| m1697_8(StructuredBindingTupleNoRefGet) = ^IndirectMayWriteSideEffect[-1] : &:r1697_1
# 1697| m1697_9(unknown) = Chi : total:m1697_7, partial:m1697_8
# 1700| r1700_1(glval<StructuredBindingTupleNoRefGet &>) = VariableAddress[(unnamed local variable)] :
# 1700| r1700_2(glval<StructuredBindingTupleNoRefGet>) = VariableAddress[t] :
# 1700| r1700_3(StructuredBindingTupleNoRefGet &) = CopyValue : r1700_2
@@ -13293,11 +13331,11 @@ ir.cpp:
# 1700| r1700_9(glval<StructuredBindingTupleNoRefGet>) = CopyValue : r1700_8
# 1700| r1700_10(glval<unknown>) = FunctionAddress[get] :
# 1700| r1700_11(int) = Call[get] : func:r1700_10, this:r1700_9
# 1700| m1700_12(unknown) = ^CallSideEffect : ~m1697_6
# 1700| m1700_13(unknown) = Chi : total:m1697_6, partial:m1700_12
# 1700| v1700_14(void) = ^IndirectReadSideEffect[-1] : &:r1700_9, m1697_8
# 1700| m1700_12(unknown) = ^CallSideEffect : ~m1697_9
# 1700| m1700_13(unknown) = Chi : total:m1697_9, partial:m1700_12
# 1700| v1700_14(void) = ^IndirectReadSideEffect[-1] : &:r1700_9, ~m1700_13
# 1700| m1700_15(StructuredBindingTupleNoRefGet) = ^IndirectMayWriteSideEffect[-1] : &:r1700_9
# 1700| m1700_16(StructuredBindingTupleNoRefGet) = Chi : total:m1697_8, partial:m1700_15
# 1700| m1700_16(unknown) = Chi : total:m1700_13, partial:m1700_15
# 1700| m1700_17(int) = Store[#temp1700:16] : &:r1700_6, r1700_11
# 1700| r1700_18(int &) = CopyValue : r1700_6
# 1700| m1700_19(int &&) = Store[i] : &:r1700_5, r1700_18
@@ -13307,11 +13345,11 @@ ir.cpp:
# 1700| r1700_23(glval<StructuredBindingTupleNoRefGet>) = CopyValue : r1700_22
# 1700| r1700_24(glval<unknown>) = FunctionAddress[get] :
# 1700| r1700_25(int &) = Call[get] : func:r1700_24, this:r1700_23
# 1700| m1700_26(unknown) = ^CallSideEffect : ~m1700_13
# 1700| m1700_27(unknown) = Chi : total:m1700_13, partial:m1700_26
# 1700| v1700_28(void) = ^IndirectReadSideEffect[-1] : &:r1700_23, m1700_16
# 1700| m1700_26(unknown) = ^CallSideEffect : ~m1700_16
# 1700| m1700_27(unknown) = Chi : total:m1700_16, partial:m1700_26
# 1700| v1700_28(void) = ^IndirectReadSideEffect[-1] : &:r1700_23, ~m1700_27
# 1700| m1700_29(StructuredBindingTupleNoRefGet) = ^IndirectMayWriteSideEffect[-1] : &:r1700_23
# 1700| m1700_30(StructuredBindingTupleNoRefGet) = Chi : total:m1700_16, partial:m1700_29
# 1700| m1700_30(unknown) = Chi : total:m1700_27, partial:m1700_29
# 1700| r1700_31(glval<int>) = CopyValue : r1700_25
# 1700| r1700_32(int &) = CopyValue : r1700_31
# 1700| m1700_33(int &) = Store[r] : &:r1700_20, r1700_32
@@ -13321,11 +13359,11 @@ ir.cpp:
# 1700| r1700_37(glval<StructuredBindingTupleNoRefGet>) = CopyValue : r1700_36
# 1700| r1700_38(glval<unknown>) = FunctionAddress[get] :
# 1700| r1700_39(int &&) = Call[get] : func:r1700_38, this:r1700_37
# 1700| m1700_40(unknown) = ^CallSideEffect : ~m1700_27
# 1700| m1700_41(unknown) = Chi : total:m1700_27, partial:m1700_40
# 1700| v1700_42(void) = ^IndirectReadSideEffect[-1] : &:r1700_37, m1700_30
# 1700| m1700_40(unknown) = ^CallSideEffect : ~m1700_30
# 1700| m1700_41(unknown) = Chi : total:m1700_30, partial:m1700_40
# 1700| v1700_42(void) = ^IndirectReadSideEffect[-1] : &:r1700_37, ~m1700_41
# 1700| m1700_43(StructuredBindingTupleNoRefGet) = ^IndirectMayWriteSideEffect[-1] : &:r1700_37
# 1700| m1700_44(StructuredBindingTupleNoRefGet) = Chi : total:m1700_30, partial:m1700_43
# 1700| m1700_44(unknown) = Chi : total:m1700_41, partial:m1700_43
# 1700| r1700_45(glval<int>) = CopyValue : r1700_39
# 1700| r1700_46(int &) = CopyValue : r1700_45
# 1700| m1700_47(int &&) = Store[rv] : &:r1700_34, r1700_46
@@ -13350,7 +13388,7 @@ ir.cpp:
# 1704| r1704_3(int &) = Load[r] : &:r1704_2, m1700_33
# 1704| r1704_4(glval<int>) = CopyValue : r1704_3
# 1704| m1704_5(int) = Store[?] : &:r1704_4, r1704_1
# 1704| m1704_6(unknown) = Chi : total:m1700_41, partial:m1704_5
# 1704| m1704_6(unknown) = Chi : total:m1700_44, partial:m1704_5
# 1705| r1705_1(glval<int &>) = VariableAddress[rr] :
# 1705| r1705_2(glval<int &>) = VariableAddress[r] :
# 1705| r1705_3(int &) = Load[r] : &:r1705_2, m1700_33
@@ -13375,9 +13413,9 @@ ir.cpp:
# 1711| r1711_7(int) = Call[get] : func:r1711_6, this:r1711_5
# 1711| m1711_8(unknown) = ^CallSideEffect : ~m1704_6
# 1711| m1711_9(unknown) = Chi : total:m1704_6, partial:m1711_8
# 1711| v1711_10(void) = ^IndirectReadSideEffect[-1] : &:r1711_5, m1700_44
# 1711| v1711_10(void) = ^IndirectReadSideEffect[-1] : &:r1711_5, ~m1711_9
# 1711| m1711_11(StructuredBindingTupleNoRefGet) = ^IndirectMayWriteSideEffect[-1] : &:r1711_5
# 1711| m1711_12(StructuredBindingTupleNoRefGet) = Chi : total:m1700_44, partial:m1711_11
# 1711| m1711_12(unknown) = Chi : total:m1711_9, partial:m1711_11
# 1711| m1711_13(int) = Store[#temp1711:20] : &:r1711_2, r1711_7
# 1711| r1711_14(int &) = CopyValue : r1711_2
# 1711| m1711_15(int &&) = Store[i] : &:r1711_1, r1711_14
@@ -13387,11 +13425,11 @@ ir.cpp:
# 1712| r1712_4(glval<StructuredBindingTupleNoRefGet>) = CopyValue : r1712_3
# 1712| r1712_5(glval<unknown>) = FunctionAddress[get] :
# 1712| r1712_6(int &) = Call[get] : func:r1712_5, this:r1712_4
# 1712| m1712_7(unknown) = ^CallSideEffect : ~m1711_9
# 1712| m1712_8(unknown) = Chi : total:m1711_9, partial:m1712_7
# 1712| v1712_9(void) = ^IndirectReadSideEffect[-1] : &:r1712_4, m1711_12
# 1712| m1712_7(unknown) = ^CallSideEffect : ~m1711_12
# 1712| m1712_8(unknown) = Chi : total:m1711_12, partial:m1712_7
# 1712| v1712_9(void) = ^IndirectReadSideEffect[-1] : &:r1712_4, ~m1712_8
# 1712| m1712_10(StructuredBindingTupleNoRefGet) = ^IndirectMayWriteSideEffect[-1] : &:r1712_4
# 1712| m1712_11(StructuredBindingTupleNoRefGet) = Chi : total:m1711_12, partial:m1712_10
# 1712| m1712_11(unknown) = Chi : total:m1712_8, partial:m1712_10
# 1712| r1712_12(glval<int>) = CopyValue : r1712_6
# 1712| r1712_13(int &) = CopyValue : r1712_12
# 1712| m1712_14(int &) = Store[r] : &:r1712_1, r1712_13
@@ -13401,11 +13439,11 @@ ir.cpp:
# 1713| r1713_4(glval<StructuredBindingTupleNoRefGet>) = CopyValue : r1713_3
# 1713| r1713_5(glval<unknown>) = FunctionAddress[get] :
# 1713| r1713_6(int &&) = Call[get] : func:r1713_5, this:r1713_4
# 1713| m1713_7(unknown) = ^CallSideEffect : ~m1712_8
# 1713| m1713_8(unknown) = Chi : total:m1712_8, partial:m1713_7
# 1713| v1713_9(void) = ^IndirectReadSideEffect[-1] : &:r1713_4, m1712_11
# 1713| m1713_7(unknown) = ^CallSideEffect : ~m1712_11
# 1713| m1713_8(unknown) = Chi : total:m1712_11, partial:m1713_7
# 1713| v1713_9(void) = ^IndirectReadSideEffect[-1] : &:r1713_4, ~m1713_8
# 1713| m1713_10(StructuredBindingTupleNoRefGet) = ^IndirectMayWriteSideEffect[-1] : &:r1713_4
# 1713| m1713_11(StructuredBindingTupleNoRefGet) = Chi : total:m1712_11, partial:m1713_10
# 1713| m1713_11(unknown) = Chi : total:m1713_8, partial:m1713_10
# 1713| r1713_12(glval<int>) = CopyValue : r1713_6
# 1713| r1713_13(int &) = CopyValue : r1713_12
# 1713| m1713_14(int &&) = Store[rv] : &:r1713_1, r1713_13
@@ -13430,7 +13468,7 @@ ir.cpp:
# 1717| r1717_3(int &) = Load[r] : &:r1717_2, m1712_14
# 1717| r1717_4(glval<int>) = CopyValue : r1717_3
# 1717| m1717_5(int) = Store[?] : &:r1717_4, r1717_1
# 1717| m1717_6(unknown) = Chi : total:m1713_8, partial:m1717_5
# 1717| m1717_6(unknown) = Chi : total:m1713_11, partial:m1717_5
# 1718| r1718_1(glval<int &>) = VariableAddress[rr] :
# 1718| r1718_2(glval<int &>) = VariableAddress[r] :
# 1718| r1718_3(int &) = Load[r] : &:r1718_2, m1712_14
@@ -21423,21 +21461,47 @@ ir.cpp:
# 2897| void StructInit::StructInit(int)
# 2897| Block 0
# 2897| v2897_1(void) = EnterFunction :
# 2897| m2897_2(unknown) = AliasedDefinition :
# 2897| m2897_3(unknown) = InitializeNonLocal :
# 2897| m2897_4(unknown) = Chi : total:m2897_2, partial:m2897_3
# 2897| r2897_5(glval<unknown>) = VariableAddress[#this] :
# 2897| m2897_6(glval<StructInit>) = InitializeParameter[#this] : &:r2897_5
# 2897| r2897_7(glval<StructInit>) = Load[#this] : &:r2897_5, m2897_6
# 2897| m2897_8(StructInit) = InitializeIndirection[#this] : &:r2897_7
# 2897| r2897_9(glval<int>) = VariableAddress[j] :
# 2897| m2897_10(int) = InitializeParameter[j] : &:r2897_9
# 2897| v2897_11(void) = NoOp :
# 2897| v2897_12(void) = ReturnIndirection[#this] : &:r2897_7, m2897_8
# 2897| v2897_13(void) = ReturnVoid :
# 2897| v2897_14(void) = AliasedUse : m2897_3
# 2897| v2897_15(void) = ExitFunction :
# 2897| v2897_1(void) = EnterFunction :
# 2897| m2897_2(unknown) = AliasedDefinition :
# 2897| m2897_3(unknown) = InitializeNonLocal :
# 2897| m2897_4(unknown) = Chi : total:m2897_2, partial:m2897_3
# 2897| r2897_5(glval<unknown>) = VariableAddress[#this] :
# 2897| m2897_6(glval<StructInit>) = InitializeParameter[#this] : &:r2897_5
# 2897| r2897_7(glval<StructInit>) = Load[#this] : &:r2897_5, m2897_6
# 2897| m2897_8(StructInit) = InitializeIndirection[#this] : &:r2897_7
# 2897| m2897_9(unknown) = Chi : total:m2897_4, partial:m2897_8
# 2897| r2897_10(glval<int>) = VariableAddress[j] :
# 2897| m2897_11(int) = InitializeParameter[j] : &:r2897_10
# 2897| r2897_12(glval<unknown>) = FunctionAddress[i] :
# 2897| v2897_13(void) = Call[i] : func:r2897_12, this:r2897_7
# 2897| r2897_14(glval<int>) = FieldAddress[j] : r2897_7
# 2897| r2897_15(glval<int>) = VariableAddress[j] :
# 2897| r2897_16(int) = Load[j] : &:r2897_15, m2897_11
# 2897| m2897_17(int) = Store[?] : &:r2897_14, r2897_16
# 2897| m2897_18(unknown) = Chi : total:m2897_9, partial:m2897_17
# 2897| r2897_19(glval<unknown>) = FunctionAddress[k] :
# 2897| v2897_20(void) = Call[k] : func:r2897_19, this:r2897_7
# 2897| r2897_21(glval<unknown>) = FunctionAddress[l] :
# 2897| v2897_22(void) = Call[l] : func:r2897_21, this:r2897_7
# 2897| r2897_23(glval<unknown>) = FunctionAddress[m] :
# 2897| v2897_24(void) = Call[m] : func:r2897_23, this:r2897_7
# 2897| r2897_25(glval<int>) = FieldAddress[n] : r2897_7
# 2897| r2897_26(glval<unknown>) = VariableAddress[#this] :
# 2897| r2897_27(StructInit *) = Load[#this] : &:r2897_26, m2897_6
# 2897| r2897_28(glval<unknown>) = FunctionAddress[get_val] :
# 2897| r2897_29(int) = Call[get_val] : func:r2897_28, this:r2897_27
# 2897| m2897_30(unknown) = ^CallSideEffect : ~m2897_18
# 2897| m2897_31(unknown) = Chi : total:m2897_18, partial:m2897_30
# 2897| v2897_32(void) = ^IndirectReadSideEffect[-1] : &:r2897_27, ~m2897_31
# 2897| m2897_33(StructInit) = ^IndirectMayWriteSideEffect[-1] : &:r2897_27
# 2897| m2897_34(unknown) = Chi : total:m2897_31, partial:m2897_33
# 2897| m2897_35(int) = Store[?] : &:r2897_25, r2897_29
# 2897| m2897_36(unknown) = Chi : total:m2897_34, partial:m2897_35
# 2897| v2897_37(void) = NoOp :
# 2897| v2897_38(void) = ReturnIndirection[#this] : &:r2897_7, ~m2897_36
# 2897| v2897_39(void) = ReturnVoid :
# 2897| v2897_40(void) = AliasedUse : ~m2897_36
# 2897| v2897_41(void) = ExitFunction :
# 2899| void StructInit::StructInit()
# 2899| Block 0
@@ -21449,15 +21513,28 @@ ir.cpp:
# 2899| m2899_6(glval<StructInit>) = InitializeParameter[#this] : &:r2899_5
# 2899| r2899_7(glval<StructInit>) = Load[#this] : &:r2899_5, m2899_6
# 2899| m2899_8(StructInit) = InitializeIndirection[#this] : &:r2899_7
# 2899| r2899_9(glval<int>) = FieldAddress[i] : r2899_7
# 2899| r2899_10(int) = Constant[41] :
# 2899| m2899_11(int) = Store[?] : &:r2899_9, r2899_10
# 2899| m2899_12(unknown) = Chi : total:m2899_8, partial:m2899_11
# 2899| v2899_13(void) = NoOp :
# 2899| v2899_14(void) = ReturnIndirection[#this] : &:r2899_7, m2899_12
# 2899| v2899_15(void) = ReturnVoid :
# 2899| v2899_16(void) = AliasedUse : m2899_3
# 2899| v2899_17(void) = ExitFunction :
# 2899| m2899_9(unknown) = Chi : total:m2899_4, partial:m2899_8
# 2899| r2899_10(glval<int>) = FieldAddress[i] : r2899_7
# 2899| r2899_11(int) = Constant[41] :
# 2899| m2899_12(int) = Store[?] : &:r2899_10, r2899_11
# 2899| m2899_13(unknown) = Chi : total:m2899_9, partial:m2899_12
# 2899| r2899_14(glval<unknown>) = FunctionAddress[j] :
# 2899| v2899_15(void) = Call[j] : func:r2899_14, this:r2899_7
# 2899| r2899_16(glval<int>) = FieldAddress[k] : r2899_7
# 2899| r2899_17(int) = Constant[41] :
# 2899| m2899_18(int) = Store[?] : &:r2899_16, r2899_17
# 2899| m2899_19(unknown) = Chi : total:m2899_13, partial:m2899_18
# 2899| r2899_20(glval<unknown>) = FunctionAddress[l] :
# 2899| v2899_21(void) = Call[l] : func:r2899_20, this:r2899_7
# 2899| r2899_22(glval<unknown>) = FunctionAddress[m] :
# 2899| v2899_23(void) = Call[m] : func:r2899_22, this:r2899_7
# 2899| r2899_24(glval<unknown>) = FunctionAddress[n] :
# 2899| v2899_25(void) = Call[n] : func:r2899_24, this:r2899_7
# 2899| v2899_26(void) = NoOp :
# 2899| v2899_27(void) = ReturnIndirection[#this] : &:r2899_7, ~m2899_19
# 2899| v2899_28(void) = ReturnVoid :
# 2899| v2899_29(void) = AliasedUse : ~m2899_19
# 2899| v2899_30(void) = ExitFunction :
# 2901| int StructInit::get_val()
# 2901| Block 0

View File

@@ -20,10 +20,6 @@ multipleIRTypes
lostReachability
backEdgeCountMismatch
useNotDominatedByDefinition
| ir.cpp:1537:8:1537:8 | Unary | Operand 'Unary' is not dominated by its definition in function '$@'. | ir.cpp:1537:8:1537:8 | void StructuredBindingDataMemberStruct::StructuredBindingDataMemberStruct() | void StructuredBindingDataMemberStruct::StructuredBindingDataMemberStruct() |
| ir.cpp:2897:5:2897:14 | Unary | Operand 'Unary' is not dominated by its definition in function '$@'. | ir.cpp:2897:5:2897:14 | void StructInit::StructInit(int) | void StructInit::StructInit(int) |
| ir.cpp:2897:5:2897:14 | Unary | Operand 'Unary' is not dominated by its definition in function '$@'. | ir.cpp:2897:5:2897:14 | void StructInit::StructInit(int) | void StructInit::StructInit(int) |
| ir.cpp:2899:5:2899:14 | Unary | Operand 'Unary' is not dominated by its definition in function '$@'. | ir.cpp:2899:5:2899:14 | void StructInit::StructInit() | void StructInit::StructInit() |
switchInstructionWithoutDefaultEdge
notMarkedAsConflated
wronglyMarkedAsConflated

View File

@@ -11346,11 +11346,13 @@ ir.cpp:
# 1533| mu1533_5(glval<StructuredBindingDataMemberMemberStruct>) = InitializeParameter[#this] : &:r1533_4
# 1533| r1533_6(glval<StructuredBindingDataMemberMemberStruct>) = Load[#this] : &:r1533_4, ~m?
# 1533| mu1533_7(StructuredBindingDataMemberMemberStruct) = InitializeIndirection[#this] : &:r1533_6
# 1533| v1533_8(void) = NoOp :
# 1533| v1533_9(void) = ReturnIndirection[#this] : &:r1533_6, ~m?
# 1533| v1533_10(void) = ReturnVoid :
# 1533| v1533_11(void) = AliasedUse : ~m?
# 1533| v1533_12(void) = ExitFunction :
# 1533| r1533_8(glval<unknown>) = FunctionAddress[x] :
# 1533| v1533_9(void) = Call[x] : func:r1533_8, this:r1533_6
# 1533| v1533_10(void) = NoOp :
# 1533| v1533_11(void) = ReturnIndirection[#this] : &:r1533_6, ~m?
# 1533| v1533_12(void) = ReturnVoid :
# 1533| v1533_13(void) = AliasedUse : ~m?
# 1533| v1533_14(void) = ExitFunction :
# 1534| int StructuredBindingDataMemberMemberStruct::x
# 1534| Block 0
@@ -11370,29 +11372,35 @@ ir.cpp:
# 1537| void StructuredBindingDataMemberStruct::StructuredBindingDataMemberStruct()
# 1537| Block 0
# 1537| v1537_1(void) = EnterFunction :
# 1537| mu1537_2(unknown) = AliasedDefinition :
# 1537| mu1537_3(unknown) = InitializeNonLocal :
# 1537| r1537_4(glval<unknown>) = VariableAddress[#this] :
# 1537| mu1537_5(glval<StructuredBindingDataMemberStruct>) = InitializeParameter[#this] : &:r1537_4
# 1537| r1537_6(glval<StructuredBindingDataMemberStruct>) = Load[#this] : &:r1537_4, ~m?
# 1537| mu1537_7(StructuredBindingDataMemberStruct) = InitializeIndirection[#this] : &:r1537_6
#-----| Goto -> Block 2
# 1537| Block 1
# 1537| r1537_8(glval<StructuredBindingDataMemberMemberStruct>) = FieldAddress[m] : r1537_6
# 1537| r1537_9(glval<unknown>) = FunctionAddress[StructuredBindingDataMemberMemberStruct] :
# 1537| v1537_10(void) = Call[StructuredBindingDataMemberMemberStruct] : func:r1537_9, this:r1537_8
# 1537| mu1537_11(unknown) = ^CallSideEffect : ~m?
# 1537| mu1537_12(StructuredBindingDataMemberMemberStruct) = ^IndirectMayWriteSideEffect[-1] : &:r1537_8
#-----| Goto -> Block 2
# 1537| Block 2
# 1537| v1537_13(void) = NoOp :
# 1537| v1537_14(void) = ReturnIndirection[#this] : &:r1537_6, ~m?
# 1537| v1537_15(void) = ReturnVoid :
# 1537| v1537_16(void) = AliasedUse : ~m?
# 1537| v1537_17(void) = ExitFunction :
# 1537| v1537_1(void) = EnterFunction :
# 1537| mu1537_2(unknown) = AliasedDefinition :
# 1537| mu1537_3(unknown) = InitializeNonLocal :
# 1537| r1537_4(glval<unknown>) = VariableAddress[#this] :
# 1537| mu1537_5(glval<StructuredBindingDataMemberStruct>) = InitializeParameter[#this] : &:r1537_4
# 1537| r1537_6(glval<StructuredBindingDataMemberStruct>) = Load[#this] : &:r1537_4, ~m?
# 1537| mu1537_7(StructuredBindingDataMemberStruct) = InitializeIndirection[#this] : &:r1537_6
# 1537| r1537_8(glval<unknown>) = FunctionAddress[i] :
# 1537| v1537_9(void) = Call[i] : func:r1537_8, this:r1537_6
# 1537| r1537_10(glval<unknown>) = FunctionAddress[d] :
# 1537| v1537_11(void) = Call[d] : func:r1537_10, this:r1537_6
# 1537| r1537_12(glval<unknown>) = FunctionAddress[r] :
# 1537| v1537_13(void) = Call[r] : func:r1537_12, this:r1537_6
# 1537| r1537_14(glval<unknown>) = FunctionAddress[p] :
# 1537| v1537_15(void) = Call[p] : func:r1537_14, this:r1537_6
# 1537| r1537_16(glval<unknown>) = FunctionAddress[xs] :
# 1537| v1537_17(void) = Call[xs] : func:r1537_16, this:r1537_6
# 1537| r1537_18(glval<unknown>) = FunctionAddress[r_alt] :
# 1537| v1537_19(void) = Call[r_alt] : func:r1537_18, this:r1537_6
# 1537| r1537_20(glval<StructuredBindingDataMemberMemberStruct>) = FieldAddress[m] : r1537_6
# 1537| r1537_21(glval<unknown>) = FunctionAddress[StructuredBindingDataMemberMemberStruct] :
# 1537| v1537_22(void) = Call[StructuredBindingDataMemberMemberStruct] : func:r1537_21, this:r1537_20
# 1537| mu1537_23(unknown) = ^CallSideEffect : ~m?
# 1537| mu1537_24(StructuredBindingDataMemberMemberStruct) = ^IndirectMayWriteSideEffect[-1] : &:r1537_20
# 1537| v1537_25(void) = NoOp :
# 1537| v1537_26(void) = ReturnIndirection[#this] : &:r1537_6, ~m?
# 1537| v1537_27(void) = ReturnVoid :
# 1537| v1537_28(void) = AliasedUse : ~m?
# 1537| v1537_29(void) = ExitFunction :
# 1537| void StructuredBindingDataMemberStruct::StructuredBindingDataMemberStruct(StructuredBindingDataMemberStruct const&)
# 1537| Block 0
@@ -11752,11 +11760,17 @@ ir.cpp:
# 1590| mu1590_5(glval<StructuredBindingTupleRefGet>) = InitializeParameter[#this] : &:r1590_4
# 1590| r1590_6(glval<StructuredBindingTupleRefGet>) = Load[#this] : &:r1590_4, ~m?
# 1590| mu1590_7(StructuredBindingTupleRefGet) = InitializeIndirection[#this] : &:r1590_6
# 1590| v1590_8(void) = NoOp :
# 1590| v1590_9(void) = ReturnIndirection[#this] : &:r1590_6, ~m?
# 1590| v1590_10(void) = ReturnVoid :
# 1590| v1590_11(void) = AliasedUse : ~m?
# 1590| v1590_12(void) = ExitFunction :
# 1590| r1590_8(glval<unknown>) = FunctionAddress[i] :
# 1590| v1590_9(void) = Call[i] : func:r1590_8, this:r1590_6
# 1590| r1590_10(glval<unknown>) = FunctionAddress[d] :
# 1590| v1590_11(void) = Call[d] : func:r1590_10, this:r1590_6
# 1590| r1590_12(glval<unknown>) = FunctionAddress[r] :
# 1590| v1590_13(void) = Call[r] : func:r1590_12, this:r1590_6
# 1590| v1590_14(void) = NoOp :
# 1590| v1590_15(void) = ReturnIndirection[#this] : &:r1590_6, ~m?
# 1590| v1590_16(void) = ReturnVoid :
# 1590| v1590_17(void) = AliasedUse : ~m?
# 1590| v1590_18(void) = ExitFunction :
# 1590| void StructuredBindingTupleRefGet::StructuredBindingTupleRefGet(StructuredBindingTupleRefGet const&)
# 1590| Block 0
@@ -12071,11 +12085,15 @@ ir.cpp:
# 1657| mu1657_5(glval<StructuredBindingTupleNoRefGet>) = InitializeParameter[#this] : &:r1657_4
# 1657| r1657_6(glval<StructuredBindingTupleNoRefGet>) = Load[#this] : &:r1657_4, ~m?
# 1657| mu1657_7(StructuredBindingTupleNoRefGet) = InitializeIndirection[#this] : &:r1657_6
# 1657| v1657_8(void) = NoOp :
# 1657| v1657_9(void) = ReturnIndirection[#this] : &:r1657_6, ~m?
# 1657| v1657_10(void) = ReturnVoid :
# 1657| v1657_11(void) = AliasedUse : ~m?
# 1657| v1657_12(void) = ExitFunction :
# 1657| r1657_8(glval<unknown>) = FunctionAddress[i] :
# 1657| v1657_9(void) = Call[i] : func:r1657_8, this:r1657_6
# 1657| r1657_10(glval<unknown>) = FunctionAddress[r] :
# 1657| v1657_11(void) = Call[r] : func:r1657_10, this:r1657_6
# 1657| v1657_12(void) = NoOp :
# 1657| v1657_13(void) = ReturnIndirection[#this] : &:r1657_6, ~m?
# 1657| v1657_14(void) = ReturnVoid :
# 1657| v1657_15(void) = AliasedUse : ~m?
# 1657| v1657_16(void) = ExitFunction :
# 1658| int StructuredBindingTupleNoRefGet::i
# 1658| Block 0
@@ -19513,42 +19531,41 @@ ir.cpp:
# 2897| void StructInit::StructInit(int)
# 2897| Block 0
# 2897| v2897_1(void) = EnterFunction :
# 2897| mu2897_2(unknown) = AliasedDefinition :
# 2897| mu2897_3(unknown) = InitializeNonLocal :
# 2897| r2897_4(glval<unknown>) = VariableAddress[#this] :
# 2897| mu2897_5(glval<StructInit>) = InitializeParameter[#this] : &:r2897_4
# 2897| r2897_6(glval<StructInit>) = Load[#this] : &:r2897_4, ~m?
# 2897| mu2897_7(StructInit) = InitializeIndirection[#this] : &:r2897_6
# 2897| r2897_8(glval<int>) = VariableAddress[j] :
# 2897| mu2897_9(int) = InitializeParameter[j] : &:r2897_8
#-----| Goto -> Block 3
# 2897| Block 1
# 2897| r2897_10(glval<int>) = FieldAddress[j] : r2897_6
# 2897| r2897_11(glval<int>) = VariableAddress[j] :
# 2897| r2897_12(int) = Load[j] : &:r2897_11, ~m?
# 2897| mu2897_13(int) = Store[?] : &:r2897_10, r2897_12
#-----| Goto -> Block 3
# 2897| Block 2
# 2897| r2897_14(glval<int>) = FieldAddress[n] : r2897_6
# 2897| r2897_15(glval<unknown>) = VariableAddress[#this] :
# 2897| r2897_16(StructInit *) = Load[#this] : &:r2897_15, ~m?
# 2897| r2897_17(glval<unknown>) = FunctionAddress[get_val] :
# 2897| r2897_18(int) = Call[get_val] : func:r2897_17, this:r2897_16
# 2897| mu2897_19(unknown) = ^CallSideEffect : ~m?
# 2897| v2897_20(void) = ^IndirectReadSideEffect[-1] : &:r2897_16, ~m?
# 2897| mu2897_21(StructInit) = ^IndirectMayWriteSideEffect[-1] : &:r2897_16
# 2897| mu2897_22(int) = Store[?] : &:r2897_14, r2897_18
#-----| Goto -> Block 3
# 2897| Block 3
# 2897| v2897_23(void) = NoOp :
# 2897| v2897_24(void) = ReturnIndirection[#this] : &:r2897_6, ~m?
# 2897| v2897_25(void) = ReturnVoid :
# 2897| v2897_26(void) = AliasedUse : ~m?
# 2897| v2897_27(void) = ExitFunction :
# 2897| v2897_1(void) = EnterFunction :
# 2897| mu2897_2(unknown) = AliasedDefinition :
# 2897| mu2897_3(unknown) = InitializeNonLocal :
# 2897| r2897_4(glval<unknown>) = VariableAddress[#this] :
# 2897| mu2897_5(glval<StructInit>) = InitializeParameter[#this] : &:r2897_4
# 2897| r2897_6(glval<StructInit>) = Load[#this] : &:r2897_4, ~m?
# 2897| mu2897_7(StructInit) = InitializeIndirection[#this] : &:r2897_6
# 2897| r2897_8(glval<int>) = VariableAddress[j] :
# 2897| mu2897_9(int) = InitializeParameter[j] : &:r2897_8
# 2897| r2897_10(glval<unknown>) = FunctionAddress[i] :
# 2897| v2897_11(void) = Call[i] : func:r2897_10, this:r2897_6
# 2897| r2897_12(glval<int>) = FieldAddress[j] : r2897_6
# 2897| r2897_13(glval<int>) = VariableAddress[j] :
# 2897| r2897_14(int) = Load[j] : &:r2897_13, ~m?
# 2897| mu2897_15(int) = Store[?] : &:r2897_12, r2897_14
# 2897| r2897_16(glval<unknown>) = FunctionAddress[k] :
# 2897| v2897_17(void) = Call[k] : func:r2897_16, this:r2897_6
# 2897| r2897_18(glval<unknown>) = FunctionAddress[l] :
# 2897| v2897_19(void) = Call[l] : func:r2897_18, this:r2897_6
# 2897| r2897_20(glval<unknown>) = FunctionAddress[m] :
# 2897| v2897_21(void) = Call[m] : func:r2897_20, this:r2897_6
# 2897| r2897_22(glval<int>) = FieldAddress[n] : r2897_6
# 2897| r2897_23(glval<unknown>) = VariableAddress[#this] :
# 2897| r2897_24(StructInit *) = Load[#this] : &:r2897_23, ~m?
# 2897| r2897_25(glval<unknown>) = FunctionAddress[get_val] :
# 2897| r2897_26(int) = Call[get_val] : func:r2897_25, this:r2897_24
# 2897| mu2897_27(unknown) = ^CallSideEffect : ~m?
# 2897| v2897_28(void) = ^IndirectReadSideEffect[-1] : &:r2897_24, ~m?
# 2897| mu2897_29(StructInit) = ^IndirectMayWriteSideEffect[-1] : &:r2897_24
# 2897| mu2897_30(int) = Store[?] : &:r2897_22, r2897_26
# 2897| v2897_31(void) = NoOp :
# 2897| v2897_32(void) = ReturnIndirection[#this] : &:r2897_6, ~m?
# 2897| v2897_33(void) = ReturnVoid :
# 2897| v2897_34(void) = AliasedUse : ~m?
# 2897| v2897_35(void) = ExitFunction :
# 2899| void StructInit::StructInit()
# 2899| Block 0
@@ -19562,20 +19579,22 @@ ir.cpp:
# 2899| r2899_8(glval<int>) = FieldAddress[i] : r2899_6
# 2899| r2899_9(int) = Constant[41] :
# 2899| mu2899_10(int) = Store[?] : &:r2899_8, r2899_9
#-----| Goto -> Block 2
# 2899| Block 1
# 2899| r2899_11(glval<int>) = FieldAddress[k] : r2899_6
# 2899| r2899_12(int) = Constant[41] :
# 2899| mu2899_13(int) = Store[?] : &:r2899_11, r2899_12
#-----| Goto -> Block 2
# 2899| Block 2
# 2899| v2899_14(void) = NoOp :
# 2899| v2899_15(void) = ReturnIndirection[#this] : &:r2899_6, ~m?
# 2899| v2899_16(void) = ReturnVoid :
# 2899| v2899_17(void) = AliasedUse : ~m?
# 2899| v2899_18(void) = ExitFunction :
# 2899| r2899_11(glval<unknown>) = FunctionAddress[j] :
# 2899| v2899_12(void) = Call[j] : func:r2899_11, this:r2899_6
# 2899| r2899_13(glval<int>) = FieldAddress[k] : r2899_6
# 2899| r2899_14(int) = Constant[41] :
# 2899| mu2899_15(int) = Store[?] : &:r2899_13, r2899_14
# 2899| r2899_16(glval<unknown>) = FunctionAddress[l] :
# 2899| v2899_17(void) = Call[l] : func:r2899_16, this:r2899_6
# 2899| r2899_18(glval<unknown>) = FunctionAddress[m] :
# 2899| v2899_19(void) = Call[m] : func:r2899_18, this:r2899_6
# 2899| r2899_20(glval<unknown>) = FunctionAddress[n] :
# 2899| v2899_21(void) = Call[n] : func:r2899_20, this:r2899_6
# 2899| v2899_22(void) = NoOp :
# 2899| v2899_23(void) = ReturnIndirection[#this] : &:r2899_6, ~m?
# 2899| v2899_24(void) = ReturnVoid :
# 2899| v2899_25(void) = AliasedUse : ~m?
# 2899| v2899_26(void) = ExitFunction :
# 2901| int StructInit::get_val()
# 2901| Block 0