From 740518d23fe696179e5c88c5f9d95c1263581622 Mon Sep 17 00:00:00 2001 From: Jeroen Ketema Date: Tue, 6 Jan 2026 17:11:22 +0100 Subject: [PATCH 1/4] C++: Use the loaded `this` instead of the `this` initialization --- .../ir/implementation/raw/internal/TranslatedExpr.qll | 2 +- .../implementation/raw/internal/TranslatedFunction.qll | 10 +++++----- .../raw/internal/TranslatedInitialization.qll | 4 ++-- 3 files changed, 8 insertions(+), 8 deletions(-) diff --git a/cpp/ql/lib/semmle/code/cpp/ir/implementation/raw/internal/TranslatedExpr.qll b/cpp/ql/lib/semmle/code/cpp/ir/implementation/raw/internal/TranslatedExpr.qll index 6024a881c5fc..2f7ffa636da3 100644 --- a/cpp/ql/lib/semmle/code/cpp/ir/implementation/raw/internal/TranslatedExpr.qll +++ b/cpp/ql/lib/semmle/code/cpp/ir/implementation/raw/internal/TranslatedExpr.qll @@ -2679,7 +2679,7 @@ class TranslatedDestructorFieldDestruction extends TranslatedNonConstantExpr, St final override Instruction getInstructionRegisterOperand(InstructionTag tag, OperandTag operandTag) { tag = OnlyInstructionTag() and operandTag instanceof UnaryOperandTag and - result = getTranslatedFunction(getEnclosingFunction(expr)).getInitializeThisInstruction() + result = getTranslatedFunction(getEnclosingFunction(expr)).getLoadThisInstruction() } final override Field getInstructionField(InstructionTag tag) { diff --git a/cpp/ql/lib/semmle/code/cpp/ir/implementation/raw/internal/TranslatedFunction.qll b/cpp/ql/lib/semmle/code/cpp/ir/implementation/raw/internal/TranslatedFunction.qll index 26f5393db103..91978ac8fe2b 100644 --- a/cpp/ql/lib/semmle/code/cpp/ir/implementation/raw/internal/TranslatedFunction.qll +++ b/cpp/ql/lib/semmle/code/cpp/ir/implementation/raw/internal/TranslatedFunction.qll @@ -306,11 +306,11 @@ class TranslatedFunction extends TranslatedRootElement, TTranslatedFunction { final predicate hasReturnValue() { hasReturnValue(func) } /** - * Gets the single `InitializeThis` instruction for this function. Holds only - * if the function is an instance member function, constructor, or destructor. + * Gets the first load of `this` for this function. Holds only if the function + * is an instance member function, constructor, or destructor. */ - final Instruction getInitializeThisInstruction() { - result = getTranslatedThisParameter(func).getInstruction(InitializerStoreTag()) + final Instruction getLoadThisInstruction() { + result = getTranslatedThisParameter(func).getInstruction(InitializerIndirectAddressTag()) } /** @@ -639,7 +639,7 @@ class TranslatedConstructorInitList extends TranslatedElement, InitializationCon } override Instruction getTargetAddress() { - result = getTranslatedFunction(func).getInitializeThisInstruction() + result = getTranslatedFunction(func).getLoadThisInstruction() } override Type getTargetType() { result = getTranslatedFunction(func).getThisType() } diff --git a/cpp/ql/lib/semmle/code/cpp/ir/implementation/raw/internal/TranslatedInitialization.qll b/cpp/ql/lib/semmle/code/cpp/ir/implementation/raw/internal/TranslatedInitialization.qll index 06ce91932051..b280dd7bc700 100644 --- a/cpp/ql/lib/semmle/code/cpp/ir/implementation/raw/internal/TranslatedInitialization.qll +++ b/cpp/ql/lib/semmle/code/cpp/ir/implementation/raw/internal/TranslatedInitialization.qll @@ -950,7 +950,7 @@ abstract class TranslatedBaseStructorCall extends TranslatedStructorCallFromStru final override Instruction getInstructionRegisterOperand(InstructionTag tag, OperandTag operandTag) { tag = OnlyInstructionTag() and operandTag instanceof UnaryOperandTag and - result = getTranslatedFunction(this.getFunction()).getInitializeThisInstruction() + result = getTranslatedFunction(this.getFunction()).getLoadThisInstruction() } final override predicate getInstructionInheritance( @@ -1000,7 +1000,7 @@ class TranslatedConstructorDelegationInit extends TranslatedConstructorCallFromC } final override Instruction getReceiver() { - result = getTranslatedFunction(this.getFunction()).getInitializeThisInstruction() + result = getTranslatedFunction(this.getFunction()).getLoadThisInstruction() } } From 3cd9938ebe3eef05a57fc3f2e830330664319f4a Mon Sep 17 00:00:00 2001 From: Jeroen Ketema Date: Tue, 6 Jan 2026 17:37:22 +0100 Subject: [PATCH 2/4] C++: Update expected test results after IR changes --- .../dataflow/fields/ir-path-flow.expected | 18 +-- .../library-tests/ir/ir/aliased_ir.expected | 128 ++++++++--------- .../test/library-tests/ir/ir/raw_ir.expected | 130 +++++++++--------- .../UnsafeUseOfThis/UnsafeUseOfThis.expected | 2 + 4 files changed, 140 insertions(+), 138 deletions(-) diff --git a/cpp/ql/test/library-tests/dataflow/fields/ir-path-flow.expected b/cpp/ql/test/library-tests/dataflow/fields/ir-path-flow.expected index bf725830b323..cc8cd2826bf3 100644 --- a/cpp/ql/test/library-tests/dataflow/fields/ir-path-flow.expected +++ b/cpp/ql/test/library-tests/dataflow/fields/ir-path-flow.expected @@ -193,10 +193,10 @@ edges | C.cpp:18:12:18:18 | call to C [s3] | C.cpp:18:12:18:18 | *new [s3] | provenance | | | C.cpp:19:5:19:5 | *c [s1] | C.cpp:27:8:27:11 | *this [s1] | provenance | | | C.cpp:19:5:19:5 | *c [s3] | C.cpp:27:8:27:11 | *this [s3] | provenance | | +| C.cpp:22:3:22:3 | *C [post update] [s1] | C.cpp:22:3:22:3 | *this [Return] [s1] | provenance | | | C.cpp:22:3:22:3 | *this [Return] [s1] | C.cpp:18:12:18:18 | call to C [s1] | provenance | | | C.cpp:22:3:22:3 | *this [Return] [s3] | C.cpp:18:12:18:18 | call to C [s3] | provenance | | -| C.cpp:22:3:22:3 | *this [post update] [s1] | C.cpp:22:3:22:3 | *this [Return] [s1] | provenance | | -| C.cpp:22:12:22:21 | new | C.cpp:22:3:22:3 | *this [post update] [s1] | provenance | | +| C.cpp:22:12:22:21 | new | C.cpp:22:3:22:3 | *C [post update] [s1] | provenance | | | C.cpp:22:12:22:21 | new | C.cpp:22:12:22:21 | new | provenance | | | C.cpp:24:5:24:8 | *this [post update] [s3] | C.cpp:22:3:22:3 | *this [Return] [s3] | provenance | | | C.cpp:24:5:24:25 | ... = ... | C.cpp:24:5:24:8 | *this [post update] [s3] | provenance | | @@ -736,12 +736,12 @@ edges | constructors.cpp:19:22:19:23 | *this [b_] | constructors.cpp:19:22:19:23 | b_ | provenance | | | constructors.cpp:19:22:19:23 | b_ | constructors.cpp:19:9:19:9 | *b | provenance | | | constructors.cpp:19:22:19:23 | b_ | constructors.cpp:19:22:19:23 | b_ | provenance | | -| constructors.cpp:23:5:23:7 | *this [post update] [a_] | constructors.cpp:23:5:23:7 | *this [Return] [a_] | provenance | | -| constructors.cpp:23:5:23:7 | *this [post update] [b_] | constructors.cpp:23:5:23:7 | *this [Return] [b_] | provenance | | +| constructors.cpp:23:5:23:7 | *Foo [post update] [a_] | constructors.cpp:23:5:23:7 | *this [Return] [a_] | provenance | | +| constructors.cpp:23:5:23:7 | *Foo [post update] [b_] | constructors.cpp:23:5:23:7 | *this [Return] [b_] | provenance | | | constructors.cpp:23:13:23:13 | a | constructors.cpp:23:28:23:28 | a | provenance | | | constructors.cpp:23:20:23:20 | b | constructors.cpp:23:35:23:35 | b | provenance | | -| constructors.cpp:23:28:23:28 | a | constructors.cpp:23:5:23:7 | *this [post update] [a_] | provenance | | -| constructors.cpp:23:35:23:35 | b | constructors.cpp:23:5:23:7 | *this [post update] [b_] | provenance | | +| constructors.cpp:23:28:23:28 | a | constructors.cpp:23:5:23:7 | *Foo [post update] [a_] | provenance | | +| constructors.cpp:23:35:23:35 | b | constructors.cpp:23:5:23:7 | *Foo [post update] [b_] | provenance | | | constructors.cpp:26:15:26:15 | *f [a_] | constructors.cpp:28:10:28:10 | *f [a_] | provenance | | | constructors.cpp:26:15:26:15 | *f [b_] | constructors.cpp:29:10:29:10 | *f [b_] | provenance | | | constructors.cpp:28:10:28:10 | *f [a_] | constructors.cpp:18:9:18:9 | *this [a_] | provenance | | @@ -1122,9 +1122,9 @@ nodes | C.cpp:18:12:18:18 | call to C [s3] | semmle.label | call to C [s3] | | C.cpp:19:5:19:5 | *c [s1] | semmle.label | *c [s1] | | C.cpp:19:5:19:5 | *c [s3] | semmle.label | *c [s3] | +| C.cpp:22:3:22:3 | *C [post update] [s1] | semmle.label | *C [post update] [s1] | | C.cpp:22:3:22:3 | *this [Return] [s1] | semmle.label | *this [Return] [s1] | | C.cpp:22:3:22:3 | *this [Return] [s3] | semmle.label | *this [Return] [s3] | -| C.cpp:22:3:22:3 | *this [post update] [s1] | semmle.label | *this [post update] [s1] | | C.cpp:22:12:22:21 | new | semmle.label | new | | C.cpp:22:12:22:21 | new | semmle.label | new | | C.cpp:24:5:24:8 | *this [post update] [s3] | semmle.label | *this [post update] [s3] | @@ -1678,10 +1678,10 @@ nodes | constructors.cpp:19:22:19:23 | *this [b_] | semmle.label | *this [b_] | | constructors.cpp:19:22:19:23 | b_ | semmle.label | b_ | | constructors.cpp:19:22:19:23 | b_ | semmle.label | b_ | +| constructors.cpp:23:5:23:7 | *Foo [post update] [a_] | semmle.label | *Foo [post update] [a_] | +| constructors.cpp:23:5:23:7 | *Foo [post update] [b_] | semmle.label | *Foo [post update] [b_] | | constructors.cpp:23:5:23:7 | *this [Return] [a_] | semmle.label | *this [Return] [a_] | | constructors.cpp:23:5:23:7 | *this [Return] [b_] | semmle.label | *this [Return] [b_] | -| constructors.cpp:23:5:23:7 | *this [post update] [a_] | semmle.label | *this [post update] [a_] | -| constructors.cpp:23:5:23:7 | *this [post update] [b_] | semmle.label | *this [post update] [b_] | | constructors.cpp:23:13:23:13 | a | semmle.label | a | | constructors.cpp:23:20:23:20 | b | semmle.label | b | | constructors.cpp:23:28:23:28 | a | semmle.label | a | diff --git a/cpp/ql/test/library-tests/ir/ir/aliased_ir.expected b/cpp/ql/test/library-tests/ir/ir/aliased_ir.expected index 7ef02eb31378..00681a2dc71c 100644 --- a/cpp/ql/test/library-tests/ir/ir/aliased_ir.expected +++ b/cpp/ql/test/library-tests/ir/ir/aliased_ir.expected @@ -192,7 +192,7 @@ bad_asts.cpp: #-----| m0_2(Point &) = InitializeParameter[(unnamed parameter 0)] : &:r0_1 #-----| r0_3(Point &) = Load[(unnamed parameter 0)] : &:r0_1, m0_2 #-----| m0_4(unknown) = InitializeIndirection[(unnamed parameter 0)] : &:r0_3 -# 19| r19_9(glval) = FieldAddress[x] : m19_6 +# 19| r19_9(glval) = FieldAddress[x] : r19_7 # 19| r19_10(glval) = VariableAddress[(unnamed parameter 0)] : # 19| r19_11(Point &) = Load[(unnamed parameter 0)] : &:r19_10, m0_2 # 19| r19_12(glval) = CopyValue : r19_11 @@ -200,7 +200,7 @@ bad_asts.cpp: # 19| r19_14(int) = Load[?] : &:r19_13, ~m0_4 # 19| m19_15(int) = Store[?] : &:r19_9, r19_14 # 19| m19_16(unknown) = Chi : total:m19_8, partial:m19_15 -# 19| r19_17(glval) = FieldAddress[y] : m19_6 +# 19| r19_17(glval) = FieldAddress[y] : r19_7 # 19| r19_18(glval) = VariableAddress[(unnamed parameter 0)] : # 19| r19_19(Point &) = Load[(unnamed parameter 0)] : &:r19_18, m0_2 # 19| r19_20(glval) = CopyValue : r19_19 @@ -6897,12 +6897,12 @@ ir.cpp: # 628| m628_8(C) = InitializeIndirection[#this] : &:r628_7 # 628| m628_9(unknown) = Chi : total:m628_4, partial:m628_8 #-----| v0_1(void) = NoOp : -# 628| r628_10(glval) = FieldAddress[m_f] : m628_6 +# 628| r628_10(glval) = FieldAddress[m_f] : r628_7 # 628| r628_11(glval) = FunctionAddress[~String] : # 628| v628_12(void) = Call[~String] : func:r628_11, this:r628_10 # 628| m628_13(unknown) = ^CallSideEffect : ~m628_9 # 628| m628_14(unknown) = Chi : total:m628_9, partial:m628_13 -# 628| r628_15(glval) = FieldAddress[m_b] : m628_6 +# 628| r628_15(glval) = FieldAddress[m_b] : r628_7 # 628| r628_16(glval) = FunctionAddress[~String] : # 628| v628_17(void) = Call[~String] : func:r628_16, this:r628_15 # 628| m628_18(unknown) = ^CallSideEffect : ~m628_14 @@ -7087,26 +7087,26 @@ ir.cpp: # 658| r658_7(glval) = Load[#this] : &:r658_5, m658_6 # 658| m658_8(C) = InitializeIndirection[#this] : &:r658_7 # 658| m658_9(unknown) = Chi : total:m658_4, partial:m658_8 -# 659| r659_1(glval) = FieldAddress[m_a] : m658_6 +# 659| r659_1(glval) = FieldAddress[m_a] : r658_7 # 659| r659_2(int) = Constant[1] : # 659| m659_3(int) = Store[?] : &:r659_1, r659_2 # 659| m659_4(unknown) = Chi : total:m658_9, partial:m659_3 -# 663| r663_1(glval) = FieldAddress[m_b] : m658_6 +# 663| r663_1(glval) = FieldAddress[m_b] : r658_7 # 663| r663_2(glval) = FunctionAddress[String] : # 663| v663_3(void) = Call[String] : func:r663_2, this:r663_1 # 663| m663_4(unknown) = ^CallSideEffect : ~m659_4 # 663| m663_5(unknown) = Chi : total:m659_4, partial:m663_4 # 663| m663_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r663_1 # 663| m663_7(unknown) = Chi : total:m663_5, partial:m663_6 -# 660| r660_1(glval) = FieldAddress[m_c] : m658_6 +# 660| r660_1(glval) = FieldAddress[m_c] : r658_7 # 660| r660_2(char) = Constant[3] : # 660| m660_3(char) = Store[?] : &:r660_1, r660_2 # 660| m660_4(unknown) = Chi : total:m663_7, partial:m660_3 -# 661| r661_1(glval) = FieldAddress[m_e] : m658_6 +# 661| r661_1(glval) = FieldAddress[m_e] : r658_7 # 661| r661_2(void *) = Constant[0] : # 661| m661_3(void *) = Store[?] : &:r661_1, r661_2 # 661| m661_4(unknown) = Chi : total:m660_4, partial:m661_3 -# 662| r662_1(glval) = FieldAddress[m_f] : m658_6 +# 662| r662_1(glval) = FieldAddress[m_f] : r658_7 # 662| r662_2(glval) = FunctionAddress[String] : # 662| r662_3(glval) = StringConstant["test"] : # 662| r662_4(char *) = Convert : r662_3 @@ -7523,7 +7523,7 @@ ir.cpp: #-----| m0_2(Base &) = InitializeParameter[(unnamed parameter 0)] : &:r0_1 #-----| r0_3(Base &) = Load[(unnamed parameter 0)] : &:r0_1, m0_2 #-----| m0_4(unknown) = InitializeIndirection[(unnamed parameter 0)] : &:r0_3 -# 745| r745_10(glval) = FieldAddress[base_s] : m745_6 +# 745| r745_10(glval) = FieldAddress[base_s] : r745_7 # 745| r745_11(glval) = FunctionAddress[String] : # 745| v745_12(void) = Call[String] : func:r745_11, this:r745_10 # 745| m745_13(unknown) = ^CallSideEffect : ~m745_9 @@ -7548,7 +7548,7 @@ ir.cpp: # 748| r748_7(glval) = Load[#this] : &:r748_5, m748_6 # 748| m748_8(Base) = InitializeIndirection[#this] : &:r748_7 # 748| m748_9(unknown) = Chi : total:m748_4, partial:m748_8 -# 748| r748_10(glval) = FieldAddress[base_s] : m748_6 +# 748| r748_10(glval) = FieldAddress[base_s] : r748_7 # 748| r748_11(glval) = FunctionAddress[String] : # 748| v748_12(void) = Call[String] : func:r748_11, this:r748_10 # 748| m748_13(unknown) = ^CallSideEffect : ~m748_9 @@ -7573,7 +7573,7 @@ ir.cpp: # 750| m750_8(Base) = InitializeIndirection[#this] : &:r750_7 # 750| m750_9(unknown) = Chi : total:m750_4, partial:m750_8 # 751| v751_1(void) = NoOp : -# 751| r751_2(glval) = FieldAddress[base_s] : m750_6 +# 751| r751_2(glval) = FieldAddress[base_s] : r750_7 # 751| r751_3(glval) = FunctionAddress[~String] : # 751| v751_4(void) = Call[~String] : func:r751_3, this:r751_2 # 751| m751_5(unknown) = ^CallSideEffect : ~m750_9 @@ -7660,14 +7660,14 @@ ir.cpp: # 757| r757_7(glval) = Load[#this] : &:r757_5, m757_6 # 757| m757_8(Middle) = InitializeIndirection[#this] : &:r757_7 # 757| m757_9(unknown) = Chi : total:m757_4, partial:m757_8 -# 757| r757_10(glval) = ConvertToNonVirtualBase[Middle : Base] : m757_6 +# 757| r757_10(glval) = ConvertToNonVirtualBase[Middle : Base] : r757_7 # 757| r757_11(glval) = FunctionAddress[Base] : # 757| v757_12(void) = Call[Base] : func:r757_11, this:r757_10 # 757| m757_13(unknown) = ^CallSideEffect : ~m757_9 # 757| m757_14(unknown) = Chi : total:m757_9, partial:m757_13 # 757| m757_15(Base) = ^IndirectMayWriteSideEffect[-1] : &:r757_10 # 757| m757_16(unknown) = Chi : total:m757_14, partial:m757_15 -# 757| r757_17(glval) = FieldAddress[middle_s] : m757_6 +# 757| r757_17(glval) = FieldAddress[middle_s] : r757_7 # 757| r757_18(glval) = FunctionAddress[String] : # 757| v757_19(void) = Call[String] : func:r757_18, this:r757_17 # 757| m757_20(unknown) = ^CallSideEffect : ~m757_16 @@ -7692,12 +7692,12 @@ ir.cpp: # 759| m759_8(Middle) = InitializeIndirection[#this] : &:r759_7 # 759| m759_9(unknown) = Chi : total:m759_4, partial:m759_8 # 760| v760_1(void) = NoOp : -# 760| r760_2(glval) = FieldAddress[middle_s] : m759_6 +# 760| r760_2(glval) = FieldAddress[middle_s] : r759_7 # 760| r760_3(glval) = FunctionAddress[~String] : # 760| v760_4(void) = Call[~String] : func:r760_3, this:r760_2 # 760| m760_5(unknown) = ^CallSideEffect : ~m759_9 # 760| m760_6(unknown) = Chi : total:m759_9, partial:m760_5 -# 760| r760_7(glval) = ConvertToNonVirtualBase[Middle : Base] : m759_6 +# 760| r760_7(glval) = ConvertToNonVirtualBase[Middle : Base] : r759_7 # 760| r760_8(glval) = FunctionAddress[~Base] : # 760| v760_9(void) = Call[~Base] : func:r760_8, this:r760_7 # 760| m760_10(unknown) = ^CallSideEffect : ~m760_6 @@ -7784,14 +7784,14 @@ ir.cpp: # 766| r766_7(glval) = Load[#this] : &:r766_5, m766_6 # 766| m766_8(Derived) = InitializeIndirection[#this] : &:r766_7 # 766| m766_9(unknown) = Chi : total:m766_4, partial:m766_8 -# 766| r766_10(glval) = ConvertToNonVirtualBase[Derived : Middle] : m766_6 +# 766| r766_10(glval) = ConvertToNonVirtualBase[Derived : Middle] : r766_7 # 766| r766_11(glval) = FunctionAddress[Middle] : # 766| v766_12(void) = Call[Middle] : func:r766_11, this:r766_10 # 766| m766_13(unknown) = ^CallSideEffect : ~m766_9 # 766| m766_14(unknown) = Chi : total:m766_9, partial:m766_13 # 766| m766_15(Middle) = ^IndirectMayWriteSideEffect[-1] : &:r766_10 # 766| m766_16(unknown) = Chi : total:m766_14, partial:m766_15 -# 766| r766_17(glval) = FieldAddress[derived_s] : m766_6 +# 766| r766_17(glval) = FieldAddress[derived_s] : r766_7 # 766| r766_18(glval) = FunctionAddress[String] : # 766| v766_19(void) = Call[String] : func:r766_18, this:r766_17 # 766| m766_20(unknown) = ^CallSideEffect : ~m766_16 @@ -7816,12 +7816,12 @@ ir.cpp: # 768| m768_8(Derived) = InitializeIndirection[#this] : &:r768_7 # 768| m768_9(unknown) = Chi : total:m768_4, partial:m768_8 # 769| v769_1(void) = NoOp : -# 769| r769_2(glval) = FieldAddress[derived_s] : m768_6 +# 769| r769_2(glval) = FieldAddress[derived_s] : r768_7 # 769| r769_3(glval) = FunctionAddress[~String] : # 769| v769_4(void) = Call[~String] : func:r769_3, this:r769_2 # 769| m769_5(unknown) = ^CallSideEffect : ~m768_9 # 769| m769_6(unknown) = Chi : total:m768_9, partial:m769_5 -# 769| r769_7(glval) = ConvertToNonVirtualBase[Derived : Middle] : m768_6 +# 769| r769_7(glval) = ConvertToNonVirtualBase[Derived : Middle] : r768_7 # 769| r769_8(glval) = FunctionAddress[~Middle] : # 769| v769_9(void) = Call[~Middle] : func:r769_8, this:r769_7 # 769| m769_10(unknown) = ^CallSideEffect : ~m769_6 @@ -7842,14 +7842,14 @@ ir.cpp: # 775| r775_7(glval) = Load[#this] : &:r775_5, m775_6 # 775| m775_8(MiddleVB1) = InitializeIndirection[#this] : &:r775_7 # 775| m775_9(unknown) = Chi : total:m775_4, partial:m775_8 -# 775| r775_10(glval) = ConvertToNonVirtualBase[MiddleVB1 : Base] : m775_6 +# 775| r775_10(glval) = ConvertToNonVirtualBase[MiddleVB1 : Base] : r775_7 # 775| r775_11(glval) = FunctionAddress[Base] : # 775| v775_12(void) = Call[Base] : func:r775_11, this:r775_10 # 775| m775_13(unknown) = ^CallSideEffect : ~m775_9 # 775| m775_14(unknown) = Chi : total:m775_9, partial:m775_13 # 775| m775_15(Base) = ^IndirectMayWriteSideEffect[-1] : &:r775_10 # 775| m775_16(unknown) = Chi : total:m775_14, partial:m775_15 -# 775| r775_17(glval) = FieldAddress[middlevb1_s] : m775_6 +# 775| r775_17(glval) = FieldAddress[middlevb1_s] : r775_7 # 775| r775_18(glval) = FunctionAddress[String] : # 775| v775_19(void) = Call[String] : func:r775_18, this:r775_17 # 775| m775_20(unknown) = ^CallSideEffect : ~m775_16 @@ -7874,12 +7874,12 @@ ir.cpp: # 777| m777_8(MiddleVB1) = InitializeIndirection[#this] : &:r777_7 # 777| m777_9(unknown) = Chi : total:m777_4, partial:m777_8 # 778| v778_1(void) = NoOp : -# 778| r778_2(glval) = FieldAddress[middlevb1_s] : m777_6 +# 778| r778_2(glval) = FieldAddress[middlevb1_s] : r777_7 # 778| r778_3(glval) = FunctionAddress[~String] : # 778| v778_4(void) = Call[~String] : func:r778_3, this:r778_2 # 778| m778_5(unknown) = ^CallSideEffect : ~m777_9 # 778| m778_6(unknown) = Chi : total:m777_9, partial:m778_5 -# 778| r778_7(glval) = ConvertToNonVirtualBase[MiddleVB1 : Base] : m777_6 +# 778| r778_7(glval) = ConvertToNonVirtualBase[MiddleVB1 : Base] : r777_7 # 778| r778_8(glval) = FunctionAddress[~Base] : # 778| v778_9(void) = Call[~Base] : func:r778_8, this:r778_7 # 778| m778_10(unknown) = ^CallSideEffect : ~m778_6 @@ -7900,14 +7900,14 @@ ir.cpp: # 784| r784_7(glval) = Load[#this] : &:r784_5, m784_6 # 784| m784_8(MiddleVB2) = InitializeIndirection[#this] : &:r784_7 # 784| m784_9(unknown) = Chi : total:m784_4, partial:m784_8 -# 784| r784_10(glval) = ConvertToNonVirtualBase[MiddleVB2 : Base] : m784_6 +# 784| r784_10(glval) = ConvertToNonVirtualBase[MiddleVB2 : Base] : r784_7 # 784| r784_11(glval) = FunctionAddress[Base] : # 784| v784_12(void) = Call[Base] : func:r784_11, this:r784_10 # 784| m784_13(unknown) = ^CallSideEffect : ~m784_9 # 784| m784_14(unknown) = Chi : total:m784_9, partial:m784_13 # 784| m784_15(Base) = ^IndirectMayWriteSideEffect[-1] : &:r784_10 # 784| m784_16(unknown) = Chi : total:m784_14, partial:m784_15 -# 784| r784_17(glval) = FieldAddress[middlevb2_s] : m784_6 +# 784| r784_17(glval) = FieldAddress[middlevb2_s] : r784_7 # 784| r784_18(glval) = FunctionAddress[String] : # 784| v784_19(void) = Call[String] : func:r784_18, this:r784_17 # 784| m784_20(unknown) = ^CallSideEffect : ~m784_16 @@ -7932,12 +7932,12 @@ ir.cpp: # 786| m786_8(MiddleVB2) = InitializeIndirection[#this] : &:r786_7 # 786| m786_9(unknown) = Chi : total:m786_4, partial:m786_8 # 787| v787_1(void) = NoOp : -# 787| r787_2(glval) = FieldAddress[middlevb2_s] : m786_6 +# 787| r787_2(glval) = FieldAddress[middlevb2_s] : r786_7 # 787| r787_3(glval) = FunctionAddress[~String] : # 787| v787_4(void) = Call[~String] : func:r787_3, this:r787_2 # 787| m787_5(unknown) = ^CallSideEffect : ~m786_9 # 787| m787_6(unknown) = Chi : total:m786_9, partial:m787_5 -# 787| r787_7(glval) = ConvertToNonVirtualBase[MiddleVB2 : Base] : m786_6 +# 787| r787_7(glval) = ConvertToNonVirtualBase[MiddleVB2 : Base] : r786_7 # 787| r787_8(glval) = FunctionAddress[~Base] : # 787| v787_9(void) = Call[~Base] : func:r787_8, this:r787_7 # 787| m787_10(unknown) = ^CallSideEffect : ~m787_6 @@ -7958,28 +7958,28 @@ ir.cpp: # 793| r793_7(glval) = Load[#this] : &:r793_5, m793_6 # 793| m793_8(DerivedVB) = InitializeIndirection[#this] : &:r793_7 # 793| m793_9(unknown) = Chi : total:m793_4, partial:m793_8 -# 793| r793_10(glval) = ConvertToNonVirtualBase[DerivedVB : Base] : m793_6 +# 793| r793_10(glval) = ConvertToNonVirtualBase[DerivedVB : Base] : r793_7 # 793| r793_11(glval) = FunctionAddress[Base] : # 793| v793_12(void) = Call[Base] : func:r793_11, this:r793_10 # 793| m793_13(unknown) = ^CallSideEffect : ~m793_9 # 793| m793_14(unknown) = Chi : total:m793_9, partial:m793_13 # 793| m793_15(Base) = ^IndirectMayWriteSideEffect[-1] : &:r793_10 # 793| m793_16(unknown) = Chi : total:m793_14, partial:m793_15 -# 793| r793_17(glval) = ConvertToNonVirtualBase[DerivedVB : MiddleVB1] : m793_6 +# 793| r793_17(glval) = ConvertToNonVirtualBase[DerivedVB : MiddleVB1] : r793_7 # 793| r793_18(glval) = FunctionAddress[MiddleVB1] : # 793| v793_19(void) = Call[MiddleVB1] : func:r793_18, this:r793_17 # 793| m793_20(unknown) = ^CallSideEffect : ~m793_16 # 793| m793_21(unknown) = Chi : total:m793_16, partial:m793_20 # 793| m793_22(MiddleVB1) = ^IndirectMayWriteSideEffect[-1] : &:r793_17 # 793| m793_23(unknown) = Chi : total:m793_21, partial:m793_22 -# 793| r793_24(glval) = ConvertToNonVirtualBase[DerivedVB : MiddleVB2] : m793_6 +# 793| r793_24(glval) = ConvertToNonVirtualBase[DerivedVB : MiddleVB2] : r793_7 # 793| r793_25(glval) = FunctionAddress[MiddleVB2] : # 793| v793_26(void) = Call[MiddleVB2] : func:r793_25, this:r793_24 # 793| m793_27(unknown) = ^CallSideEffect : ~m793_23 # 793| m793_28(unknown) = Chi : total:m793_23, partial:m793_27 # 793| m793_29(MiddleVB2) = ^IndirectMayWriteSideEffect[-1] : &:r793_24 # 793| m793_30(unknown) = Chi : total:m793_28, partial:m793_29 -# 793| r793_31(glval) = FieldAddress[derivedvb_s] : m793_6 +# 793| r793_31(glval) = FieldAddress[derivedvb_s] : r793_7 # 793| r793_32(glval) = FunctionAddress[String] : # 793| v793_33(void) = Call[String] : func:r793_32, this:r793_31 # 793| m793_34(unknown) = ^CallSideEffect : ~m793_30 @@ -8004,22 +8004,22 @@ ir.cpp: # 795| m795_8(DerivedVB) = InitializeIndirection[#this] : &:r795_7 # 795| m795_9(unknown) = Chi : total:m795_4, partial:m795_8 # 796| v796_1(void) = NoOp : -# 796| r796_2(glval) = FieldAddress[derivedvb_s] : m795_6 +# 796| r796_2(glval) = FieldAddress[derivedvb_s] : r795_7 # 796| r796_3(glval) = FunctionAddress[~String] : # 796| v796_4(void) = Call[~String] : func:r796_3, this:r796_2 # 796| m796_5(unknown) = ^CallSideEffect : ~m795_9 # 796| m796_6(unknown) = Chi : total:m795_9, partial:m796_5 -# 796| r796_7(glval) = ConvertToNonVirtualBase[DerivedVB : MiddleVB2] : m795_6 +# 796| r796_7(glval) = ConvertToNonVirtualBase[DerivedVB : MiddleVB2] : r795_7 # 796| r796_8(glval) = FunctionAddress[~MiddleVB2] : # 796| v796_9(void) = Call[~MiddleVB2] : func:r796_8, this:r796_7 # 796| m796_10(unknown) = ^CallSideEffect : ~m796_6 # 796| m796_11(unknown) = Chi : total:m796_6, partial:m796_10 -# 796| r796_12(glval) = ConvertToNonVirtualBase[DerivedVB : MiddleVB1] : m795_6 +# 796| r796_12(glval) = ConvertToNonVirtualBase[DerivedVB : MiddleVB1] : r795_7 # 796| r796_13(glval) = FunctionAddress[~MiddleVB1] : # 796| v796_14(void) = Call[~MiddleVB1] : func:r796_13, this:r796_12 # 796| m796_15(unknown) = ^CallSideEffect : ~m796_11 # 796| m796_16(unknown) = Chi : total:m796_11, partial:m796_15 -# 796| r796_17(glval) = ConvertToNonVirtualBase[DerivedVB : Base] : m795_6 +# 796| r796_17(glval) = ConvertToNonVirtualBase[DerivedVB : Base] : r795_7 # 796| r796_18(glval) = FunctionAddress[~Base] : # 796| v796_19(void) = Call[~Base] : func:r796_18, this:r796_17 # 796| m796_20(unknown) = ^CallSideEffect : ~m796_16 @@ -8439,7 +8439,7 @@ ir.cpp: # 846| m846_6(glval) = InitializeParameter[#this] : &:r846_5 # 846| r846_7(glval) = Load[#this] : &:r846_5, m846_6 # 846| m846_8(PolymorphicDerived) = InitializeIndirection[#this] : &:r846_7 -# 846| r846_9(glval) = ConvertToNonVirtualBase[PolymorphicDerived : PolymorphicBase] : m846_6 +# 846| r846_9(glval) = ConvertToNonVirtualBase[PolymorphicDerived : PolymorphicBase] : r846_7 # 846| r846_10(glval) = FunctionAddress[PolymorphicBase] : # 846| v846_11(void) = Call[PolymorphicBase] : func:r846_10, this:r846_9 # 846| m846_12(unknown) = ^CallSideEffect : ~m846_4 @@ -8464,7 +8464,7 @@ ir.cpp: # 846| m846_8(PolymorphicDerived) = InitializeIndirection[#this] : &:r846_7 # 846| m846_9(unknown) = Chi : total:m846_4, partial:m846_8 #-----| v0_1(void) = NoOp : -# 846| r846_10(glval) = ConvertToNonVirtualBase[PolymorphicDerived : PolymorphicBase] : m846_6 +# 846| r846_10(glval) = ConvertToNonVirtualBase[PolymorphicDerived : PolymorphicBase] : r846_7 # 846| r846_11(glval) = FunctionAddress[~PolymorphicBase] : # 846| v846_12(void) = Call[~PolymorphicBase] : func:r846_11, this:r846_10 # 846| m846_13(unknown) = ^CallSideEffect : ~m846_9 @@ -8571,11 +8571,11 @@ ir.cpp: # 868| r868_1(glval) = FunctionAddress[String] : # 868| r868_2(glval) = StringConstant[""] : # 868| r868_3(char *) = Convert : r868_2 -# 868| v868_4(void) = Call[String] : func:r868_1, this:m867_6, 0:r868_3 +# 868| v868_4(void) = Call[String] : func:r868_1, this:r867_7, 0:r868_3 # 868| m868_5(unknown) = ^CallSideEffect : ~m867_9 # 868| m868_6(unknown) = Chi : total:m867_9, partial:m868_5 # 868| v868_7(void) = ^BufferReadSideEffect[0] : &:r868_3, ~m867_3 -# 868| m868_8(String) = ^IndirectMayWriteSideEffect[-1] : &:m867_6 +# 868| m868_8(String) = ^IndirectMayWriteSideEffect[-1] : &:r867_7 # 868| m868_9(unknown) = Chi : total:m868_6, partial:m868_8 # 869| v869_1(void) = NoOp : # 867| v867_10(void) = ReturnIndirection[#this] : &:r867_7, ~m868_9 @@ -9814,7 +9814,7 @@ ir.cpp: # 1045| m1045_8(decltype([...](...){...})) = InitializeIndirection[#this] : &:r1045_7 # 1045| m1045_9(unknown) = Chi : total:m1045_4, partial:m1045_8 #-----| v0_1(void) = NoOp : -# 1045| r1045_10(glval) = FieldAddress[s] : m1045_6 +# 1045| r1045_10(glval) = FieldAddress[s] : r1045_7 # 1045| r1045_11(glval) = FunctionAddress[~String] : # 1045| v1045_12(void) = Call[~String] : func:r1045_11, this:r1045_10 # 1045| m1045_13(unknown) = ^CallSideEffect : ~m1045_9 @@ -9904,7 +9904,7 @@ ir.cpp: # 1049| m1049_8(decltype([...](...){...})) = InitializeIndirection[#this] : &:r1049_7 # 1049| m1049_9(unknown) = Chi : total:m1049_4, partial:m1049_8 #-----| v0_1(void) = NoOp : -# 1049| r1049_10(glval) = FieldAddress[s] : m1049_6 +# 1049| r1049_10(glval) = FieldAddress[s] : r1049_7 # 1049| r1049_11(glval) = FunctionAddress[~String] : # 1049| v1049_12(void) = Call[~String] : func:r1049_11, this:r1049_10 # 1049| m1049_13(unknown) = ^CallSideEffect : ~m1049_9 @@ -12176,7 +12176,7 @@ ir.cpp: # 1506| m1506_6(glval) = InitializeParameter[#this] : &:r1506_5 # 1506| r1506_7(glval) = Load[#this] : &:r1506_5, m1506_6 # 1506| m1506_8(Inheritance_Test_A) = InitializeIndirection[#this] : &:r1506_7 -# 1506| r1506_9(glval) = FieldAddress[x] : m1506_6 +# 1506| r1506_9(glval) = FieldAddress[x] : r1506_7 # 1506| r1506_10(int) = Constant[42] : # 1506| m1506_11(int) = Store[?] : &:r1506_9, r1506_10 # 1506| m1506_12(unknown) = Chi : total:m1506_8, partial:m1506_11 @@ -12335,7 +12335,7 @@ ir.cpp: #-----| m0_2(StructuredBindingDataMemberStruct &) = InitializeParameter[(unnamed parameter 0)] : &:r0_1 #-----| r0_3(StructuredBindingDataMemberStruct &) = Load[(unnamed parameter 0)] : &:r0_1, m0_2 #-----| m0_4(unknown) = InitializeIndirection[(unnamed parameter 0)] : &:r0_3 -# 1535| r1535_9(glval) = FieldAddress[i] : m1535_6 +# 1535| r1535_9(glval) = FieldAddress[i] : r1535_7 # 1535| r1535_10(glval) = VariableAddress[(unnamed parameter 0)] : # 1535| r1535_11(StructuredBindingDataMemberStruct &) = Load[(unnamed parameter 0)] : &:r1535_10, m0_2 # 1535| r1535_12(glval) = CopyValue : r1535_11 @@ -12343,7 +12343,7 @@ ir.cpp: # 1535| r1535_14(int) = Load[?] : &:r1535_13, ~m0_4 # 1535| m1535_15(int) = Store[?] : &:r1535_9, r1535_14 # 1535| m1535_16(unknown) = Chi : total:m1535_8, partial:m1535_15 -# 1535| r1535_17(glval) = FieldAddress[d] : m1535_6 +# 1535| r1535_17(glval) = FieldAddress[d] : r1535_7 # 1535| r1535_18(glval) = VariableAddress[(unnamed parameter 0)] : # 1535| r1535_19(StructuredBindingDataMemberStruct &) = Load[(unnamed parameter 0)] : &:r1535_18, m0_2 # 1535| r1535_20(glval) = CopyValue : r1535_19 @@ -12351,7 +12351,7 @@ ir.cpp: # 1535| r1535_22(double) = Load[?] : &:r1535_21, ~m0_4 # 1535| m1535_23(double) = Store[?] : &:r1535_17, r1535_22 # 1535| m1535_24(unknown) = Chi : total:m1535_16, partial:m1535_23 -# 1535| r1535_25(glval) = FieldAddress[b] : m1535_6 +# 1535| r1535_25(glval) = FieldAddress[b] : r1535_7 # 1535| r1535_26(glval) = VariableAddress[(unnamed parameter 0)] : # 1535| r1535_27(StructuredBindingDataMemberStruct &) = Load[(unnamed parameter 0)] : &:r1535_26, m0_2 # 1535| r1535_28(glval) = CopyValue : r1535_27 @@ -12359,7 +12359,7 @@ ir.cpp: # 1535| r1535_30(unsigned int) = Load[?] : &:r1535_29, ~m0_4 # 1535| m1535_31(unsigned int) = Store[?] : &:r1535_25, r1535_30 # 1535| m1535_32(unknown) = Chi : total:m1535_24, partial:m1535_31 -# 1535| r1535_33(glval) = FieldAddress[r] : m1535_6 +# 1535| r1535_33(glval) = FieldAddress[r] : r1535_7 # 1535| r1535_34(glval) = VariableAddress[(unnamed parameter 0)] : # 1535| r1535_35(StructuredBindingDataMemberStruct &) = Load[(unnamed parameter 0)] : &:r1535_34, m0_2 # 1535| r1535_36(glval) = CopyValue : r1535_35 @@ -12367,7 +12367,7 @@ ir.cpp: # 1535| r1535_38(int &) = Load[?] : &:r1535_37, ~m0_4 # 1535| m1535_39(int &) = Store[?] : &:r1535_33, r1535_38 # 1535| m1535_40(unknown) = Chi : total:m1535_32, partial:m1535_39 -# 1535| r1535_41(glval) = FieldAddress[p] : m1535_6 +# 1535| r1535_41(glval) = FieldAddress[p] : r1535_7 # 1535| r1535_42(glval) = VariableAddress[(unnamed parameter 0)] : # 1535| r1535_43(StructuredBindingDataMemberStruct &) = Load[(unnamed parameter 0)] : &:r1535_42, m0_2 # 1535| r1535_44(glval) = CopyValue : r1535_43 @@ -12375,7 +12375,7 @@ ir.cpp: # 1535| r1535_46(int *) = Load[?] : &:r1535_45, ~m0_4 # 1535| m1535_47(int *) = Store[?] : &:r1535_41, r1535_46 # 1535| m1535_48(unknown) = Chi : total:m1535_40, partial:m1535_47 -# 1535| r1535_49(glval) = FieldAddress[xs] : m1535_6 +# 1535| r1535_49(glval) = FieldAddress[xs] : r1535_7 # 1535| r1535_50(glval) = VariableAddress[(unnamed parameter 0)] : # 1535| r1535_51(StructuredBindingDataMemberStruct &) = Load[(unnamed parameter 0)] : &:r1535_50, m0_2 # 1535| r1535_52(glval) = CopyValue : r1535_51 @@ -12383,7 +12383,7 @@ ir.cpp: # 1535| r1535_54(int[2]) = Load[?] : &:r1535_53, ~m0_4 # 1535| m1535_55(int[2]) = Store[?] : &:r1535_49, r1535_54 # 1535| m1535_56(unknown) = Chi : total:m1535_48, partial:m1535_55 -# 1535| r1535_57(glval) = FieldAddress[r_alt] : m1535_6 +# 1535| r1535_57(glval) = FieldAddress[r_alt] : r1535_7 # 1535| r1535_58(glval) = VariableAddress[(unnamed parameter 0)] : # 1535| r1535_59(StructuredBindingDataMemberStruct &) = Load[(unnamed parameter 0)] : &:r1535_58, m0_2 # 1535| r1535_60(glval) = CopyValue : r1535_59 @@ -12391,7 +12391,7 @@ ir.cpp: # 1535| r1535_62(int &) = Load[?] : &:r1535_61, ~m0_4 # 1535| m1535_63(int &) = Store[?] : &:r1535_57, r1535_62 # 1535| m1535_64(unknown) = Chi : total:m1535_56, partial:m1535_63 -# 1535| r1535_65(glval) = FieldAddress[m] : m1535_6 +# 1535| r1535_65(glval) = FieldAddress[m] : r1535_7 # 1535| r1535_66(glval) = VariableAddress[(unnamed parameter 0)] : # 1535| r1535_67(StructuredBindingDataMemberStruct &) = Load[(unnamed parameter 0)] : &:r1535_66, m0_2 # 1535| r1535_68(glval) = CopyValue : r1535_67 @@ -12610,7 +12610,7 @@ ir.cpp: #-----| m0_2(StructuredBindingTupleRefGet &) = InitializeParameter[(unnamed parameter 0)] : &:r0_1 #-----| r0_3(StructuredBindingTupleRefGet &) = Load[(unnamed parameter 0)] : &:r0_1, m0_2 #-----| m0_4(unknown) = InitializeIndirection[(unnamed parameter 0)] : &:r0_3 -# 1588| r1588_9(glval) = FieldAddress[i] : m1588_6 +# 1588| r1588_9(glval) = FieldAddress[i] : r1588_7 # 1588| r1588_10(glval) = VariableAddress[(unnamed parameter 0)] : # 1588| r1588_11(StructuredBindingTupleRefGet &) = Load[(unnamed parameter 0)] : &:r1588_10, m0_2 # 1588| r1588_12(glval) = CopyValue : r1588_11 @@ -12618,7 +12618,7 @@ ir.cpp: # 1588| r1588_14(int) = Load[?] : &:r1588_13, ~m0_4 # 1588| m1588_15(int) = Store[?] : &:r1588_9, r1588_14 # 1588| m1588_16(unknown) = Chi : total:m1588_8, partial:m1588_15 -# 1588| r1588_17(glval) = FieldAddress[d] : m1588_6 +# 1588| r1588_17(glval) = FieldAddress[d] : r1588_7 # 1588| r1588_18(glval) = VariableAddress[(unnamed parameter 0)] : # 1588| r1588_19(StructuredBindingTupleRefGet &) = Load[(unnamed parameter 0)] : &:r1588_18, m0_2 # 1588| r1588_20(glval) = CopyValue : r1588_19 @@ -12626,7 +12626,7 @@ ir.cpp: # 1588| r1588_22(double) = Load[?] : &:r1588_21, ~m0_4 # 1588| m1588_23(double) = Store[?] : &:r1588_17, r1588_22 # 1588| m1588_24(unknown) = Chi : total:m1588_16, partial:m1588_23 -# 1588| r1588_25(glval) = FieldAddress[r] : m1588_6 +# 1588| r1588_25(glval) = FieldAddress[r] : r1588_7 # 1588| r1588_26(glval) = VariableAddress[(unnamed parameter 0)] : # 1588| r1588_27(StructuredBindingTupleRefGet &) = Load[(unnamed parameter 0)] : &:r1588_26, m0_2 # 1588| r1588_28(glval) = CopyValue : r1588_27 @@ -13635,7 +13635,7 @@ ir.cpp: #-----| m0_2(CopyConstructorTestNonVirtualClass &) = InitializeParameter[(unnamed parameter 0)] : &:r0_1 #-----| r0_3(CopyConstructorTestNonVirtualClass &) = Load[(unnamed parameter 0)] : &:r0_1, m0_2 #-----| m0_4(unknown) = InitializeIndirection[(unnamed parameter 0)] : &:r0_3 -# 1785| r1785_9(glval) = ConvertToNonVirtualBase[CopyConstructorTestNonVirtualClass : CopyConstructorWithImplicitArgumentClass] : m1785_6 +# 1785| r1785_9(glval) = ConvertToNonVirtualBase[CopyConstructorTestNonVirtualClass : CopyConstructorWithImplicitArgumentClass] : r1785_7 # 1785| r1785_10(glval) = FunctionAddress[CopyConstructorWithImplicitArgumentClass] : # 1785| r1785_11(glval) = VariableAddress[(unnamed parameter 0)] : # 1785| r1785_12(CopyConstructorTestNonVirtualClass &) = Load[(unnamed parameter 0)] : &:r1785_11, m0_2 @@ -13665,14 +13665,14 @@ ir.cpp: # 1789| m1789_6(glval) = InitializeParameter[#this] : &:r1789_5 # 1789| r1789_7(glval) = Load[#this] : &:r1789_5, m1789_6 # 1789| m1789_8(CopyConstructorTestNonVirtualClass) = InitializeIndirection[#this] : &:r1789_7 -# 1789| r1789_9(glval) = ConvertToNonVirtualBase[CopyConstructorTestNonVirtualClass : CopyConstructorWithImplicitArgumentClass] : m1789_6 +# 1789| r1789_9(glval) = ConvertToNonVirtualBase[CopyConstructorTestNonVirtualClass : CopyConstructorWithImplicitArgumentClass] : r1789_7 # 1789| r1789_10(glval) = FunctionAddress[CopyConstructorWithImplicitArgumentClass] : # 1789| v1789_11(void) = Call[CopyConstructorWithImplicitArgumentClass] : func:r1789_10, this:r1789_9 # 1789| m1789_12(unknown) = ^CallSideEffect : ~m1789_4 # 1789| m1789_13(unknown) = Chi : total:m1789_4, partial:m1789_12 # 1789| m1789_14(CopyConstructorWithImplicitArgumentClass) = ^IndirectMayWriteSideEffect[-1] : &:r1789_9 # 1789| m1789_15(unknown) = Chi : total:m1789_8, partial:m1789_14 -# 1789| r1789_16(glval) = ConvertToNonVirtualBase[CopyConstructorTestNonVirtualClass : CopyConstructorWithBitwiseCopyClass] : m1789_6 +# 1789| r1789_16(glval) = ConvertToNonVirtualBase[CopyConstructorTestNonVirtualClass : CopyConstructorWithBitwiseCopyClass] : r1789_7 # 1789| r1789_17(glval) = FunctionAddress[CopyConstructorWithBitwiseCopyClass] : # 1789| v1789_18(void) = Call[CopyConstructorWithBitwiseCopyClass] : func:r1789_17, this:r1789_16 # 1789| m1789_19(unknown) = ^CallSideEffect : ~m1789_13 @@ -13700,7 +13700,7 @@ ir.cpp: #-----| m0_2(CopyConstructorTestVirtualClass &) = InitializeParameter[(unnamed parameter 0)] : &:r0_1 #-----| r0_3(CopyConstructorTestVirtualClass &) = Load[(unnamed parameter 0)] : &:r0_1, m0_2 #-----| m0_4(unknown) = InitializeIndirection[(unnamed parameter 0)] : &:r0_3 -# 1792| r1792_10(glval) = ConvertToNonVirtualBase[CopyConstructorTestVirtualClass : CopyConstructorWithImplicitArgumentClass] : m1792_6 +# 1792| r1792_10(glval) = ConvertToNonVirtualBase[CopyConstructorTestVirtualClass : CopyConstructorWithImplicitArgumentClass] : r1792_7 # 1792| r1792_11(glval) = FunctionAddress[CopyConstructorWithImplicitArgumentClass] : # 1792| r1792_12(glval) = VariableAddress[(unnamed parameter 0)] : # 1792| r1792_13(CopyConstructorTestVirtualClass &) = Load[(unnamed parameter 0)] : &:r1792_12, m0_2 @@ -13731,14 +13731,14 @@ ir.cpp: # 1796| r1796_7(glval) = Load[#this] : &:r1796_5, m1796_6 # 1796| m1796_8(CopyConstructorTestVirtualClass) = InitializeIndirection[#this] : &:r1796_7 # 1796| m1796_9(unknown) = Chi : total:m1796_4, partial:m1796_8 -# 1796| r1796_10(glval) = ConvertToNonVirtualBase[CopyConstructorTestVirtualClass : CopyConstructorWithImplicitArgumentClass] : m1796_6 +# 1796| r1796_10(glval) = ConvertToNonVirtualBase[CopyConstructorTestVirtualClass : CopyConstructorWithImplicitArgumentClass] : r1796_7 # 1796| r1796_11(glval) = FunctionAddress[CopyConstructorWithImplicitArgumentClass] : # 1796| v1796_12(void) = Call[CopyConstructorWithImplicitArgumentClass] : func:r1796_11, this:r1796_10 # 1796| m1796_13(unknown) = ^CallSideEffect : ~m1796_9 # 1796| m1796_14(unknown) = Chi : total:m1796_9, partial:m1796_13 # 1796| m1796_15(CopyConstructorWithImplicitArgumentClass) = ^IndirectMayWriteSideEffect[-1] : &:r1796_10 # 1796| m1796_16(unknown) = Chi : total:m1796_14, partial:m1796_15 -# 1796| r1796_17(glval) = ConvertToNonVirtualBase[CopyConstructorTestVirtualClass : CopyConstructorWithBitwiseCopyClass] : m1796_6 +# 1796| r1796_17(glval) = ConvertToNonVirtualBase[CopyConstructorTestVirtualClass : CopyConstructorWithBitwiseCopyClass] : r1796_7 # 1796| r1796_18(glval) = FunctionAddress[CopyConstructorWithBitwiseCopyClass] : # 1796| v1796_19(void) = Call[CopyConstructorWithBitwiseCopyClass] : func:r1796_18, this:r1796_17 # 1796| m1796_20(unknown) = ^CallSideEffect : ~m1796_16 @@ -15718,7 +15718,7 @@ ir.cpp: # 2109| m2109_6(glval) = InitializeParameter[#this] : &:r2109_5 # 2109| r2109_7(glval) = Load[#this] : &:r2109_5, m2109_6 # 2109| m2109_8(Derived2) = InitializeIndirection[#this] : &:r2109_7 -# 2109| r2109_9(glval) = ConvertToNonVirtualBase[Derived2 : Base2] : m2109_6 +# 2109| r2109_9(glval) = ConvertToNonVirtualBase[Derived2 : Base2] : r2109_7 # 2109| r2109_10(glval) = FunctionAddress[Base2] : # 2109| v2109_11(void) = Call[Base2] : func:r2109_10, this:r2109_9 # 2109| m2109_12(unknown) = ^CallSideEffect : ~m2109_4 @@ -15743,7 +15743,7 @@ ir.cpp: # 2112| m2112_8(Derived2) = InitializeIndirection[#this] : &:r2112_7 # 2112| m2112_9(unknown) = Chi : total:m2112_4, partial:m2112_8 # 2112| v2112_10(void) = NoOp : -# 2112| r2112_11(glval) = ConvertToNonVirtualBase[Derived2 : Base2] : m2112_6 +# 2112| r2112_11(glval) = ConvertToNonVirtualBase[Derived2 : Base2] : r2112_7 # 2112| r2112_12(glval) = FunctionAddress[~Base2] : # 2112| v2112_13(void) = Call[~Base2] : func:r2112_12, this:r2112_11 # 2112| m2112_14(unknown) = ^CallSideEffect : ~m2112_9 @@ -16154,7 +16154,7 @@ ir.cpp: #-----| m0_2(ClassWithDestructor &) = InitializeParameter[(unnamed parameter 0)] : &:r0_1 #-----| r0_3(ClassWithDestructor &) = Load[(unnamed parameter 0)] : &:r0_1, m0_2 #-----| m0_4(unknown) = InitializeIndirection[(unnamed parameter 0)] : &:r0_3 -# 2186| r2186_9(glval) = FieldAddress[x] : m2186_6 +# 2186| r2186_9(glval) = FieldAddress[x] : r2186_7 # 2186| r2186_10(glval) = VariableAddress[(unnamed parameter 0)] : # 2186| r2186_11(ClassWithDestructor &) = Load[(unnamed parameter 0)] : &:r2186_10, m0_2 # 2186| r2186_12(glval) = CopyValue : r2186_11 @@ -39244,7 +39244,7 @@ perf-regression.cpp: # 6| m6_6(glval) = InitializeParameter[#this] : &:r6_5 # 6| r6_7(glval) = Load[#this] : &:r6_5, m6_6 # 6| m6_8(Big) = InitializeIndirection[#this] : &:r6_7 -# 6| r6_9(glval) = FieldAddress[buffer] : m6_6 +# 6| r6_9(glval) = FieldAddress[buffer] : r6_7 # 6| r6_10(int) = Constant[0] : # 6| r6_11(glval) = PointerAdd[1] : r6_9, r6_10 # 6| r6_12(unknown[1073741824]) = Constant[0] : diff --git a/cpp/ql/test/library-tests/ir/ir/raw_ir.expected b/cpp/ql/test/library-tests/ir/ir/raw_ir.expected index 2e84ecd0a648..e0e921537807 100644 --- a/cpp/ql/test/library-tests/ir/ir/raw_ir.expected +++ b/cpp/ql/test/library-tests/ir/ir/raw_ir.expected @@ -179,14 +179,14 @@ bad_asts.cpp: #-----| mu0_2(Point &) = InitializeParameter[(unnamed parameter 0)] : &:r0_1 #-----| r0_3(Point &) = Load[(unnamed parameter 0)] : &:r0_1, ~m? #-----| mu0_4(unknown) = InitializeIndirection[(unnamed parameter 0)] : &:r0_3 -# 19| r19_8(glval) = FieldAddress[x] : mu19_5 +# 19| r19_8(glval) = FieldAddress[x] : r19_6 # 19| r19_9(glval) = VariableAddress[(unnamed parameter 0)] : # 19| r19_10(Point &) = Load[(unnamed parameter 0)] : &:r19_9, ~m? # 19| r19_11(glval) = CopyValue : r19_10 # 19| r19_12(glval) = FieldAddress[x] : r19_11 # 19| r19_13(int) = Load[?] : &:r19_12, ~m? # 19| mu19_14(int) = Store[?] : &:r19_8, r19_13 -# 19| r19_15(glval) = FieldAddress[y] : mu19_5 +# 19| r19_15(glval) = FieldAddress[y] : r19_6 # 19| r19_16(glval) = VariableAddress[(unnamed parameter 0)] : # 19| r19_17(Point &) = Load[(unnamed parameter 0)] : &:r19_16, ~m? # 19| r19_18(glval) = CopyValue : r19_17 @@ -6418,11 +6418,11 @@ ir.cpp: # 628| r628_6(glval) = Load[#this] : &:r628_4, ~m? # 628| mu628_7(C) = InitializeIndirection[#this] : &:r628_6 #-----| v0_1(void) = NoOp : -# 628| r628_8(glval) = FieldAddress[m_f] : mu628_5 +# 628| r628_8(glval) = FieldAddress[m_f] : r628_6 # 628| r628_9(glval) = FunctionAddress[~String] : # 628| v628_10(void) = Call[~String] : func:r628_9, this:r628_8 # 628| mu628_11(unknown) = ^CallSideEffect : ~m? -# 628| r628_12(glval) = FieldAddress[m_b] : mu628_5 +# 628| r628_12(glval) = FieldAddress[m_b] : r628_6 # 628| r628_13(glval) = FunctionAddress[~String] : # 628| v628_14(void) = Call[~String] : func:r628_13, this:r628_12 # 628| mu628_15(unknown) = ^CallSideEffect : ~m? @@ -6590,21 +6590,21 @@ ir.cpp: # 658| mu658_5(glval) = InitializeParameter[#this] : &:r658_4 # 658| r658_6(glval) = Load[#this] : &:r658_4, ~m? # 658| mu658_7(C) = InitializeIndirection[#this] : &:r658_6 -# 659| r659_1(glval) = FieldAddress[m_a] : mu658_5 +# 659| r659_1(glval) = FieldAddress[m_a] : r658_6 # 659| r659_2(int) = Constant[1] : # 659| mu659_3(int) = Store[?] : &:r659_1, r659_2 -# 663| r663_1(glval) = FieldAddress[m_b] : mu658_5 +# 663| r663_1(glval) = FieldAddress[m_b] : r658_6 # 663| r663_2(glval) = FunctionAddress[String] : # 663| v663_3(void) = Call[String] : func:r663_2, this:r663_1 # 663| mu663_4(unknown) = ^CallSideEffect : ~m? # 663| mu663_5(String) = ^IndirectMayWriteSideEffect[-1] : &:r663_1 -# 660| r660_1(glval) = FieldAddress[m_c] : mu658_5 +# 660| r660_1(glval) = FieldAddress[m_c] : r658_6 # 660| r660_2(char) = Constant[3] : # 660| mu660_3(char) = Store[?] : &:r660_1, r660_2 -# 661| r661_1(glval) = FieldAddress[m_e] : mu658_5 +# 661| r661_1(glval) = FieldAddress[m_e] : r658_6 # 661| r661_2(void *) = Constant[0] : # 661| mu661_3(void *) = Store[?] : &:r661_1, r661_2 -# 662| r662_1(glval) = FieldAddress[m_f] : mu658_5 +# 662| r662_1(glval) = FieldAddress[m_f] : r658_6 # 662| r662_2(glval) = FunctionAddress[String] : # 662| r662_3(glval) = StringConstant["test"] : # 662| r662_4(char *) = Convert : r662_3 @@ -7021,7 +7021,7 @@ ir.cpp: #-----| mu0_2(Base &) = InitializeParameter[(unnamed parameter 0)] : &:r0_1 #-----| r0_3(Base &) = Load[(unnamed parameter 0)] : &:r0_1, ~m? #-----| mu0_4(unknown) = InitializeIndirection[(unnamed parameter 0)] : &:r0_3 -# 745| r745_8(glval) = FieldAddress[base_s] : mu745_5 +# 745| r745_8(glval) = FieldAddress[base_s] : r745_6 # 745| r745_9(glval) = FunctionAddress[String] : # 745| v745_10(void) = Call[String] : func:r745_9, this:r745_8 # 745| mu745_11(unknown) = ^CallSideEffect : ~m? @@ -7042,7 +7042,7 @@ ir.cpp: # 748| mu748_5(glval) = InitializeParameter[#this] : &:r748_4 # 748| r748_6(glval) = Load[#this] : &:r748_4, ~m? # 748| mu748_7(Base) = InitializeIndirection[#this] : &:r748_6 -# 748| r748_8(glval) = FieldAddress[base_s] : mu748_5 +# 748| r748_8(glval) = FieldAddress[base_s] : r748_6 # 748| r748_9(glval) = FunctionAddress[String] : # 748| v748_10(void) = Call[String] : func:r748_9, this:r748_8 # 748| mu748_11(unknown) = ^CallSideEffect : ~m? @@ -7063,7 +7063,7 @@ ir.cpp: # 750| r750_6(glval) = Load[#this] : &:r750_4, ~m? # 750| mu750_7(Base) = InitializeIndirection[#this] : &:r750_6 # 751| v751_1(void) = NoOp : -# 751| r751_2(glval) = FieldAddress[base_s] : mu750_5 +# 751| r751_2(glval) = FieldAddress[base_s] : r750_6 # 751| r751_3(glval) = FunctionAddress[~String] : # 751| v751_4(void) = Call[~String] : func:r751_3, this:r751_2 # 751| mu751_5(unknown) = ^CallSideEffect : ~m? @@ -7140,12 +7140,12 @@ ir.cpp: # 757| mu757_5(glval) = InitializeParameter[#this] : &:r757_4 # 757| r757_6(glval) = Load[#this] : &:r757_4, ~m? # 757| mu757_7(Middle) = InitializeIndirection[#this] : &:r757_6 -# 757| r757_8(glval) = ConvertToNonVirtualBase[Middle : Base] : mu757_5 +# 757| r757_8(glval) = ConvertToNonVirtualBase[Middle : Base] : r757_6 # 757| r757_9(glval) = FunctionAddress[Base] : # 757| v757_10(void) = Call[Base] : func:r757_9, this:r757_8 # 757| mu757_11(unknown) = ^CallSideEffect : ~m? # 757| mu757_12(Base) = ^IndirectMayWriteSideEffect[-1] : &:r757_8 -# 757| r757_13(glval) = FieldAddress[middle_s] : mu757_5 +# 757| r757_13(glval) = FieldAddress[middle_s] : r757_6 # 757| r757_14(glval) = FunctionAddress[String] : # 757| v757_15(void) = Call[String] : func:r757_14, this:r757_13 # 757| mu757_16(unknown) = ^CallSideEffect : ~m? @@ -7166,11 +7166,11 @@ ir.cpp: # 759| r759_6(glval) = Load[#this] : &:r759_4, ~m? # 759| mu759_7(Middle) = InitializeIndirection[#this] : &:r759_6 # 760| v760_1(void) = NoOp : -# 760| r760_2(glval) = FieldAddress[middle_s] : mu759_5 +# 760| r760_2(glval) = FieldAddress[middle_s] : r759_6 # 760| r760_3(glval) = FunctionAddress[~String] : # 760| v760_4(void) = Call[~String] : func:r760_3, this:r760_2 # 760| mu760_5(unknown) = ^CallSideEffect : ~m? -# 760| r760_6(glval) = ConvertToNonVirtualBase[Middle : Base] : mu759_5 +# 760| r760_6(glval) = ConvertToNonVirtualBase[Middle : Base] : r759_6 # 760| r760_7(glval) = FunctionAddress[~Base] : # 760| v760_8(void) = Call[~Base] : func:r760_7, this:r760_6 # 760| mu760_9(unknown) = ^CallSideEffect : ~m? @@ -7247,12 +7247,12 @@ ir.cpp: # 766| mu766_5(glval) = InitializeParameter[#this] : &:r766_4 # 766| r766_6(glval) = Load[#this] : &:r766_4, ~m? # 766| mu766_7(Derived) = InitializeIndirection[#this] : &:r766_6 -# 766| r766_8(glval) = ConvertToNonVirtualBase[Derived : Middle] : mu766_5 +# 766| r766_8(glval) = ConvertToNonVirtualBase[Derived : Middle] : r766_6 # 766| r766_9(glval) = FunctionAddress[Middle] : # 766| v766_10(void) = Call[Middle] : func:r766_9, this:r766_8 # 766| mu766_11(unknown) = ^CallSideEffect : ~m? # 766| mu766_12(Middle) = ^IndirectMayWriteSideEffect[-1] : &:r766_8 -# 766| r766_13(glval) = FieldAddress[derived_s] : mu766_5 +# 766| r766_13(glval) = FieldAddress[derived_s] : r766_6 # 766| r766_14(glval) = FunctionAddress[String] : # 766| v766_15(void) = Call[String] : func:r766_14, this:r766_13 # 766| mu766_16(unknown) = ^CallSideEffect : ~m? @@ -7273,11 +7273,11 @@ ir.cpp: # 768| r768_6(glval) = Load[#this] : &:r768_4, ~m? # 768| mu768_7(Derived) = InitializeIndirection[#this] : &:r768_6 # 769| v769_1(void) = NoOp : -# 769| r769_2(glval) = FieldAddress[derived_s] : mu768_5 +# 769| r769_2(glval) = FieldAddress[derived_s] : r768_6 # 769| r769_3(glval) = FunctionAddress[~String] : # 769| v769_4(void) = Call[~String] : func:r769_3, this:r769_2 # 769| mu769_5(unknown) = ^CallSideEffect : ~m? -# 769| r769_6(glval) = ConvertToNonVirtualBase[Derived : Middle] : mu768_5 +# 769| r769_6(glval) = ConvertToNonVirtualBase[Derived : Middle] : r768_6 # 769| r769_7(glval) = FunctionAddress[~Middle] : # 769| v769_8(void) = Call[~Middle] : func:r769_7, this:r769_6 # 769| mu769_9(unknown) = ^CallSideEffect : ~m? @@ -7295,12 +7295,12 @@ ir.cpp: # 775| mu775_5(glval) = InitializeParameter[#this] : &:r775_4 # 775| r775_6(glval) = Load[#this] : &:r775_4, ~m? # 775| mu775_7(MiddleVB1) = InitializeIndirection[#this] : &:r775_6 -# 775| r775_8(glval) = ConvertToNonVirtualBase[MiddleVB1 : Base] : mu775_5 +# 775| r775_8(glval) = ConvertToNonVirtualBase[MiddleVB1 : Base] : r775_6 # 775| r775_9(glval) = FunctionAddress[Base] : # 775| v775_10(void) = Call[Base] : func:r775_9, this:r775_8 # 775| mu775_11(unknown) = ^CallSideEffect : ~m? # 775| mu775_12(Base) = ^IndirectMayWriteSideEffect[-1] : &:r775_8 -# 775| r775_13(glval) = FieldAddress[middlevb1_s] : mu775_5 +# 775| r775_13(glval) = FieldAddress[middlevb1_s] : r775_6 # 775| r775_14(glval) = FunctionAddress[String] : # 775| v775_15(void) = Call[String] : func:r775_14, this:r775_13 # 775| mu775_16(unknown) = ^CallSideEffect : ~m? @@ -7321,11 +7321,11 @@ ir.cpp: # 777| r777_6(glval) = Load[#this] : &:r777_4, ~m? # 777| mu777_7(MiddleVB1) = InitializeIndirection[#this] : &:r777_6 # 778| v778_1(void) = NoOp : -# 778| r778_2(glval) = FieldAddress[middlevb1_s] : mu777_5 +# 778| r778_2(glval) = FieldAddress[middlevb1_s] : r777_6 # 778| r778_3(glval) = FunctionAddress[~String] : # 778| v778_4(void) = Call[~String] : func:r778_3, this:r778_2 # 778| mu778_5(unknown) = ^CallSideEffect : ~m? -# 778| r778_6(glval) = ConvertToNonVirtualBase[MiddleVB1 : Base] : mu777_5 +# 778| r778_6(glval) = ConvertToNonVirtualBase[MiddleVB1 : Base] : r777_6 # 778| r778_7(glval) = FunctionAddress[~Base] : # 778| v778_8(void) = Call[~Base] : func:r778_7, this:r778_6 # 778| mu778_9(unknown) = ^CallSideEffect : ~m? @@ -7343,12 +7343,12 @@ ir.cpp: # 784| mu784_5(glval) = InitializeParameter[#this] : &:r784_4 # 784| r784_6(glval) = Load[#this] : &:r784_4, ~m? # 784| mu784_7(MiddleVB2) = InitializeIndirection[#this] : &:r784_6 -# 784| r784_8(glval) = ConvertToNonVirtualBase[MiddleVB2 : Base] : mu784_5 +# 784| r784_8(glval) = ConvertToNonVirtualBase[MiddleVB2 : Base] : r784_6 # 784| r784_9(glval) = FunctionAddress[Base] : # 784| v784_10(void) = Call[Base] : func:r784_9, this:r784_8 # 784| mu784_11(unknown) = ^CallSideEffect : ~m? # 784| mu784_12(Base) = ^IndirectMayWriteSideEffect[-1] : &:r784_8 -# 784| r784_13(glval) = FieldAddress[middlevb2_s] : mu784_5 +# 784| r784_13(glval) = FieldAddress[middlevb2_s] : r784_6 # 784| r784_14(glval) = FunctionAddress[String] : # 784| v784_15(void) = Call[String] : func:r784_14, this:r784_13 # 784| mu784_16(unknown) = ^CallSideEffect : ~m? @@ -7369,11 +7369,11 @@ ir.cpp: # 786| r786_6(glval) = Load[#this] : &:r786_4, ~m? # 786| mu786_7(MiddleVB2) = InitializeIndirection[#this] : &:r786_6 # 787| v787_1(void) = NoOp : -# 787| r787_2(glval) = FieldAddress[middlevb2_s] : mu786_5 +# 787| r787_2(glval) = FieldAddress[middlevb2_s] : r786_6 # 787| r787_3(glval) = FunctionAddress[~String] : # 787| v787_4(void) = Call[~String] : func:r787_3, this:r787_2 # 787| mu787_5(unknown) = ^CallSideEffect : ~m? -# 787| r787_6(glval) = ConvertToNonVirtualBase[MiddleVB2 : Base] : mu786_5 +# 787| r787_6(glval) = ConvertToNonVirtualBase[MiddleVB2 : Base] : r786_6 # 787| r787_7(glval) = FunctionAddress[~Base] : # 787| v787_8(void) = Call[~Base] : func:r787_7, this:r787_6 # 787| mu787_9(unknown) = ^CallSideEffect : ~m? @@ -7391,22 +7391,22 @@ ir.cpp: # 793| mu793_5(glval) = InitializeParameter[#this] : &:r793_4 # 793| r793_6(glval) = Load[#this] : &:r793_4, ~m? # 793| mu793_7(DerivedVB) = InitializeIndirection[#this] : &:r793_6 -# 793| r793_8(glval) = ConvertToNonVirtualBase[DerivedVB : Base] : mu793_5 +# 793| r793_8(glval) = ConvertToNonVirtualBase[DerivedVB : Base] : r793_6 # 793| r793_9(glval) = FunctionAddress[Base] : # 793| v793_10(void) = Call[Base] : func:r793_9, this:r793_8 # 793| mu793_11(unknown) = ^CallSideEffect : ~m? # 793| mu793_12(Base) = ^IndirectMayWriteSideEffect[-1] : &:r793_8 -# 793| r793_13(glval) = ConvertToNonVirtualBase[DerivedVB : MiddleVB1] : mu793_5 +# 793| r793_13(glval) = ConvertToNonVirtualBase[DerivedVB : MiddleVB1] : r793_6 # 793| r793_14(glval) = FunctionAddress[MiddleVB1] : # 793| v793_15(void) = Call[MiddleVB1] : func:r793_14, this:r793_13 # 793| mu793_16(unknown) = ^CallSideEffect : ~m? # 793| mu793_17(MiddleVB1) = ^IndirectMayWriteSideEffect[-1] : &:r793_13 -# 793| r793_18(glval) = ConvertToNonVirtualBase[DerivedVB : MiddleVB2] : mu793_5 +# 793| r793_18(glval) = ConvertToNonVirtualBase[DerivedVB : MiddleVB2] : r793_6 # 793| r793_19(glval) = FunctionAddress[MiddleVB2] : # 793| v793_20(void) = Call[MiddleVB2] : func:r793_19, this:r793_18 # 793| mu793_21(unknown) = ^CallSideEffect : ~m? # 793| mu793_22(MiddleVB2) = ^IndirectMayWriteSideEffect[-1] : &:r793_18 -# 793| r793_23(glval) = FieldAddress[derivedvb_s] : mu793_5 +# 793| r793_23(glval) = FieldAddress[derivedvb_s] : r793_6 # 793| r793_24(glval) = FunctionAddress[String] : # 793| v793_25(void) = Call[String] : func:r793_24, this:r793_23 # 793| mu793_26(unknown) = ^CallSideEffect : ~m? @@ -7427,19 +7427,19 @@ ir.cpp: # 795| r795_6(glval) = Load[#this] : &:r795_4, ~m? # 795| mu795_7(DerivedVB) = InitializeIndirection[#this] : &:r795_6 # 796| v796_1(void) = NoOp : -# 796| r796_2(glval) = FieldAddress[derivedvb_s] : mu795_5 +# 796| r796_2(glval) = FieldAddress[derivedvb_s] : r795_6 # 796| r796_3(glval) = FunctionAddress[~String] : # 796| v796_4(void) = Call[~String] : func:r796_3, this:r796_2 # 796| mu796_5(unknown) = ^CallSideEffect : ~m? -# 796| r796_6(glval) = ConvertToNonVirtualBase[DerivedVB : MiddleVB2] : mu795_5 +# 796| r796_6(glval) = ConvertToNonVirtualBase[DerivedVB : MiddleVB2] : r795_6 # 796| r796_7(glval) = FunctionAddress[~MiddleVB2] : # 796| v796_8(void) = Call[~MiddleVB2] : func:r796_7, this:r796_6 # 796| mu796_9(unknown) = ^CallSideEffect : ~m? -# 796| r796_10(glval) = ConvertToNonVirtualBase[DerivedVB : MiddleVB1] : mu795_5 +# 796| r796_10(glval) = ConvertToNonVirtualBase[DerivedVB : MiddleVB1] : r795_6 # 796| r796_11(glval) = FunctionAddress[~MiddleVB1] : # 796| v796_12(void) = Call[~MiddleVB1] : func:r796_11, this:r796_10 # 796| mu796_13(unknown) = ^CallSideEffect : ~m? -# 796| r796_14(glval) = ConvertToNonVirtualBase[DerivedVB : Base] : mu795_5 +# 796| r796_14(glval) = ConvertToNonVirtualBase[DerivedVB : Base] : r795_6 # 796| r796_15(glval) = FunctionAddress[~Base] : # 796| v796_16(void) = Call[~Base] : func:r796_15, this:r796_14 # 796| mu796_17(unknown) = ^CallSideEffect : ~m? @@ -7800,7 +7800,7 @@ ir.cpp: # 846| mu846_5(glval) = InitializeParameter[#this] : &:r846_4 # 846| r846_6(glval) = Load[#this] : &:r846_4, ~m? # 846| mu846_7(PolymorphicDerived) = InitializeIndirection[#this] : &:r846_6 -# 846| r846_8(glval) = ConvertToNonVirtualBase[PolymorphicDerived : PolymorphicBase] : mu846_5 +# 846| r846_8(glval) = ConvertToNonVirtualBase[PolymorphicDerived : PolymorphicBase] : r846_6 # 846| r846_9(glval) = FunctionAddress[PolymorphicBase] : # 846| v846_10(void) = Call[PolymorphicBase] : func:r846_9, this:r846_8 # 846| mu846_11(unknown) = ^CallSideEffect : ~m? @@ -7821,7 +7821,7 @@ ir.cpp: # 846| r846_6(glval) = Load[#this] : &:r846_4, ~m? # 846| mu846_7(PolymorphicDerived) = InitializeIndirection[#this] : &:r846_6 #-----| v0_1(void) = NoOp : -# 846| r846_8(glval) = ConvertToNonVirtualBase[PolymorphicDerived : PolymorphicBase] : mu846_5 +# 846| r846_8(glval) = ConvertToNonVirtualBase[PolymorphicDerived : PolymorphicBase] : r846_6 # 846| r846_9(glval) = FunctionAddress[~PolymorphicBase] : # 846| v846_10(void) = Call[~PolymorphicBase] : func:r846_9, this:r846_8 # 846| mu846_11(unknown) = ^CallSideEffect : ~m? @@ -7914,10 +7914,10 @@ ir.cpp: # 868| r868_1(glval) = FunctionAddress[String] : # 868| r868_2(glval) = StringConstant[""] : # 868| r868_3(char *) = Convert : r868_2 -# 868| v868_4(void) = Call[String] : func:r868_1, this:mu867_5, 0:r868_3 +# 868| v868_4(void) = Call[String] : func:r868_1, this:r867_6, 0:r868_3 # 868| mu868_5(unknown) = ^CallSideEffect : ~m? # 868| v868_6(void) = ^BufferReadSideEffect[0] : &:r868_3, ~m? -# 868| mu868_7(String) = ^IndirectMayWriteSideEffect[-1] : &:mu867_5 +# 868| mu868_7(String) = ^IndirectMayWriteSideEffect[-1] : &:r867_6 # 869| v869_1(void) = NoOp : # 867| v867_8(void) = ReturnIndirection[#this] : &:r867_6, ~m? # 867| v867_9(void) = ReturnVoid : @@ -9042,7 +9042,7 @@ ir.cpp: # 1045| r1045_6(glval) = Load[#this] : &:r1045_4, ~m? # 1045| mu1045_7(decltype([...](...){...})) = InitializeIndirection[#this] : &:r1045_6 #-----| v0_1(void) = NoOp : -# 1045| r1045_8(glval) = FieldAddress[s] : mu1045_5 +# 1045| r1045_8(glval) = FieldAddress[s] : r1045_6 # 1045| r1045_9(glval) = FunctionAddress[~String] : # 1045| v1045_10(void) = Call[~String] : func:r1045_9, this:r1045_8 # 1045| mu1045_11(unknown) = ^CallSideEffect : ~m? @@ -9124,7 +9124,7 @@ ir.cpp: # 1049| r1049_6(glval) = Load[#this] : &:r1049_4, ~m? # 1049| mu1049_7(decltype([...](...){...})) = InitializeIndirection[#this] : &:r1049_6 #-----| v0_1(void) = NoOp : -# 1049| r1049_8(glval) = FieldAddress[s] : mu1049_5 +# 1049| r1049_8(glval) = FieldAddress[s] : r1049_6 # 1049| r1049_9(glval) = FunctionAddress[~String] : # 1049| v1049_10(void) = Call[~String] : func:r1049_9, this:r1049_8 # 1049| mu1049_11(unknown) = ^CallSideEffect : ~m? @@ -11163,7 +11163,7 @@ ir.cpp: # 1506| mu1506_5(glval) = InitializeParameter[#this] : &:r1506_4 # 1506| r1506_6(glval) = Load[#this] : &:r1506_4, ~m? # 1506| mu1506_7(Inheritance_Test_A) = InitializeIndirection[#this] : &:r1506_6 -# 1506| r1506_8(glval) = FieldAddress[x] : mu1506_5 +# 1506| r1506_8(glval) = FieldAddress[x] : r1506_6 # 1506| r1506_9(int) = Constant[42] : # 1506| mu1506_10(int) = Store[?] : &:r1506_8, r1506_9 # 1507| r1507_1(int) = Constant[3] : @@ -11296,7 +11296,7 @@ ir.cpp: #-----| Goto -> Block 2 # 1535| Block 1 -# 1535| r1535_8(glval) = FieldAddress[m] : mu1535_5 +# 1535| r1535_8(glval) = FieldAddress[m] : r1535_6 # 1535| r1535_9(glval) = FunctionAddress[StructuredBindingDataMemberMemberStruct] : # 1535| v1535_10(void) = Call[StructuredBindingDataMemberMemberStruct] : func:r1535_9, this:r1535_8 # 1535| mu1535_11(unknown) = ^CallSideEffect : ~m? @@ -11323,56 +11323,56 @@ ir.cpp: #-----| mu0_2(StructuredBindingDataMemberStruct &) = InitializeParameter[(unnamed parameter 0)] : &:r0_1 #-----| r0_3(StructuredBindingDataMemberStruct &) = Load[(unnamed parameter 0)] : &:r0_1, ~m? #-----| mu0_4(unknown) = InitializeIndirection[(unnamed parameter 0)] : &:r0_3 -# 1535| r1535_8(glval) = FieldAddress[i] : mu1535_5 +# 1535| r1535_8(glval) = FieldAddress[i] : r1535_6 # 1535| r1535_9(glval) = VariableAddress[(unnamed parameter 0)] : # 1535| r1535_10(StructuredBindingDataMemberStruct &) = Load[(unnamed parameter 0)] : &:r1535_9, ~m? # 1535| r1535_11(glval) = CopyValue : r1535_10 # 1535| r1535_12(glval) = FieldAddress[i] : r1535_11 # 1535| r1535_13(int) = Load[?] : &:r1535_12, ~m? # 1535| mu1535_14(int) = Store[?] : &:r1535_8, r1535_13 -# 1535| r1535_15(glval) = FieldAddress[d] : mu1535_5 +# 1535| r1535_15(glval) = FieldAddress[d] : r1535_6 # 1535| r1535_16(glval) = VariableAddress[(unnamed parameter 0)] : # 1535| r1535_17(StructuredBindingDataMemberStruct &) = Load[(unnamed parameter 0)] : &:r1535_16, ~m? # 1535| r1535_18(glval) = CopyValue : r1535_17 # 1535| r1535_19(glval) = FieldAddress[d] : r1535_18 # 1535| r1535_20(double) = Load[?] : &:r1535_19, ~m? # 1535| mu1535_21(double) = Store[?] : &:r1535_15, r1535_20 -# 1535| r1535_22(glval) = FieldAddress[b] : mu1535_5 +# 1535| r1535_22(glval) = FieldAddress[b] : r1535_6 # 1535| r1535_23(glval) = VariableAddress[(unnamed parameter 0)] : # 1535| r1535_24(StructuredBindingDataMemberStruct &) = Load[(unnamed parameter 0)] : &:r1535_23, ~m? # 1535| r1535_25(glval) = CopyValue : r1535_24 # 1535| r1535_26(glval) = FieldAddress[b] : r1535_25 # 1535| r1535_27(unsigned int) = Load[?] : &:r1535_26, ~m? # 1535| mu1535_28(unsigned int) = Store[?] : &:r1535_22, r1535_27 -# 1535| r1535_29(glval) = FieldAddress[r] : mu1535_5 +# 1535| r1535_29(glval) = FieldAddress[r] : r1535_6 # 1535| r1535_30(glval) = VariableAddress[(unnamed parameter 0)] : # 1535| r1535_31(StructuredBindingDataMemberStruct &) = Load[(unnamed parameter 0)] : &:r1535_30, ~m? # 1535| r1535_32(glval) = CopyValue : r1535_31 # 1535| r1535_33(glval) = FieldAddress[r] : r1535_32 # 1535| r1535_34(int &) = Load[?] : &:r1535_33, ~m? # 1535| mu1535_35(int &) = Store[?] : &:r1535_29, r1535_34 -# 1535| r1535_36(glval) = FieldAddress[p] : mu1535_5 +# 1535| r1535_36(glval) = FieldAddress[p] : r1535_6 # 1535| r1535_37(glval) = VariableAddress[(unnamed parameter 0)] : # 1535| r1535_38(StructuredBindingDataMemberStruct &) = Load[(unnamed parameter 0)] : &:r1535_37, ~m? # 1535| r1535_39(glval) = CopyValue : r1535_38 # 1535| r1535_40(glval) = FieldAddress[p] : r1535_39 # 1535| r1535_41(int *) = Load[?] : &:r1535_40, ~m? # 1535| mu1535_42(int *) = Store[?] : &:r1535_36, r1535_41 -# 1535| r1535_43(glval) = FieldAddress[xs] : mu1535_5 +# 1535| r1535_43(glval) = FieldAddress[xs] : r1535_6 # 1535| r1535_44(glval) = VariableAddress[(unnamed parameter 0)] : # 1535| r1535_45(StructuredBindingDataMemberStruct &) = Load[(unnamed parameter 0)] : &:r1535_44, ~m? # 1535| r1535_46(glval) = CopyValue : r1535_45 # 1535| r1535_47(glval) = FieldAddress[xs] : r1535_46 # 1535| r1535_48(int[2]) = Load[?] : &:r1535_47, ~m? # 1535| mu1535_49(int[2]) = Store[?] : &:r1535_43, r1535_48 -# 1535| r1535_50(glval) = FieldAddress[r_alt] : mu1535_5 +# 1535| r1535_50(glval) = FieldAddress[r_alt] : r1535_6 # 1535| r1535_51(glval) = VariableAddress[(unnamed parameter 0)] : # 1535| r1535_52(StructuredBindingDataMemberStruct &) = Load[(unnamed parameter 0)] : &:r1535_51, ~m? # 1535| r1535_53(glval) = CopyValue : r1535_52 # 1535| r1535_54(glval) = FieldAddress[r_alt] : r1535_53 # 1535| r1535_55(int &) = Load[?] : &:r1535_54, ~m? # 1535| mu1535_56(int &) = Store[?] : &:r1535_50, r1535_55 -# 1535| r1535_57(glval) = FieldAddress[m] : mu1535_5 +# 1535| r1535_57(glval) = FieldAddress[m] : r1535_6 # 1535| r1535_58(glval) = VariableAddress[(unnamed parameter 0)] : # 1535| r1535_59(StructuredBindingDataMemberStruct &) = Load[(unnamed parameter 0)] : &:r1535_58, ~m? # 1535| r1535_60(glval) = CopyValue : r1535_59 @@ -11579,21 +11579,21 @@ ir.cpp: #-----| mu0_2(StructuredBindingTupleRefGet &) = InitializeParameter[(unnamed parameter 0)] : &:r0_1 #-----| r0_3(StructuredBindingTupleRefGet &) = Load[(unnamed parameter 0)] : &:r0_1, ~m? #-----| mu0_4(unknown) = InitializeIndirection[(unnamed parameter 0)] : &:r0_3 -# 1588| r1588_8(glval) = FieldAddress[i] : mu1588_5 +# 1588| r1588_8(glval) = FieldAddress[i] : r1588_6 # 1588| r1588_9(glval) = VariableAddress[(unnamed parameter 0)] : # 1588| r1588_10(StructuredBindingTupleRefGet &) = Load[(unnamed parameter 0)] : &:r1588_9, ~m? # 1588| r1588_11(glval) = CopyValue : r1588_10 # 1588| r1588_12(glval) = FieldAddress[i] : r1588_11 # 1588| r1588_13(int) = Load[?] : &:r1588_12, ~m? # 1588| mu1588_14(int) = Store[?] : &:r1588_8, r1588_13 -# 1588| r1588_15(glval) = FieldAddress[d] : mu1588_5 +# 1588| r1588_15(glval) = FieldAddress[d] : r1588_6 # 1588| r1588_16(glval) = VariableAddress[(unnamed parameter 0)] : # 1588| r1588_17(StructuredBindingTupleRefGet &) = Load[(unnamed parameter 0)] : &:r1588_16, ~m? # 1588| r1588_18(glval) = CopyValue : r1588_17 # 1588| r1588_19(glval) = FieldAddress[d] : r1588_18 # 1588| r1588_20(double) = Load[?] : &:r1588_19, ~m? # 1588| mu1588_21(double) = Store[?] : &:r1588_15, r1588_20 -# 1588| r1588_22(glval) = FieldAddress[r] : mu1588_5 +# 1588| r1588_22(glval) = FieldAddress[r] : r1588_6 # 1588| r1588_23(glval) = VariableAddress[(unnamed parameter 0)] : # 1588| r1588_24(StructuredBindingTupleRefGet &) = Load[(unnamed parameter 0)] : &:r1588_23, ~m? # 1588| r1588_25(glval) = CopyValue : r1588_24 @@ -12518,7 +12518,7 @@ ir.cpp: #-----| mu0_2(CopyConstructorTestNonVirtualClass &) = InitializeParameter[(unnamed parameter 0)] : &:r0_1 #-----| r0_3(CopyConstructorTestNonVirtualClass &) = Load[(unnamed parameter 0)] : &:r0_1, ~m? #-----| mu0_4(unknown) = InitializeIndirection[(unnamed parameter 0)] : &:r0_3 -# 1785| r1785_8(glval) = ConvertToNonVirtualBase[CopyConstructorTestNonVirtualClass : CopyConstructorWithImplicitArgumentClass] : mu1785_5 +# 1785| r1785_8(glval) = ConvertToNonVirtualBase[CopyConstructorTestNonVirtualClass : CopyConstructorWithImplicitArgumentClass] : r1785_6 # 1785| r1785_9(glval) = FunctionAddress[CopyConstructorWithImplicitArgumentClass] : # 1785| r1785_10(glval) = VariableAddress[(unnamed parameter 0)] : # 1785| r1785_11(CopyConstructorTestNonVirtualClass &) = Load[(unnamed parameter 0)] : &:r1785_10, ~m? @@ -12545,12 +12545,12 @@ ir.cpp: # 1789| mu1789_5(glval) = InitializeParameter[#this] : &:r1789_4 # 1789| r1789_6(glval) = Load[#this] : &:r1789_4, ~m? # 1789| mu1789_7(CopyConstructorTestNonVirtualClass) = InitializeIndirection[#this] : &:r1789_6 -# 1789| r1789_8(glval) = ConvertToNonVirtualBase[CopyConstructorTestNonVirtualClass : CopyConstructorWithImplicitArgumentClass] : mu1789_5 +# 1789| r1789_8(glval) = ConvertToNonVirtualBase[CopyConstructorTestNonVirtualClass : CopyConstructorWithImplicitArgumentClass] : r1789_6 # 1789| r1789_9(glval) = FunctionAddress[CopyConstructorWithImplicitArgumentClass] : # 1789| v1789_10(void) = Call[CopyConstructorWithImplicitArgumentClass] : func:r1789_9, this:r1789_8 # 1789| mu1789_11(unknown) = ^CallSideEffect : ~m? # 1789| mu1789_12(CopyConstructorWithImplicitArgumentClass) = ^IndirectMayWriteSideEffect[-1] : &:r1789_8 -# 1789| r1789_13(glval) = ConvertToNonVirtualBase[CopyConstructorTestNonVirtualClass : CopyConstructorWithBitwiseCopyClass] : mu1789_5 +# 1789| r1789_13(glval) = ConvertToNonVirtualBase[CopyConstructorTestNonVirtualClass : CopyConstructorWithBitwiseCopyClass] : r1789_6 # 1789| r1789_14(glval) = FunctionAddress[CopyConstructorWithBitwiseCopyClass] : # 1789| v1789_15(void) = Call[CopyConstructorWithBitwiseCopyClass] : func:r1789_14, this:r1789_13 # 1789| mu1789_16(unknown) = ^CallSideEffect : ~m? @@ -12574,7 +12574,7 @@ ir.cpp: #-----| mu0_2(CopyConstructorTestVirtualClass &) = InitializeParameter[(unnamed parameter 0)] : &:r0_1 #-----| r0_3(CopyConstructorTestVirtualClass &) = Load[(unnamed parameter 0)] : &:r0_1, ~m? #-----| mu0_4(unknown) = InitializeIndirection[(unnamed parameter 0)] : &:r0_3 -# 1792| r1792_8(glval) = ConvertToNonVirtualBase[CopyConstructorTestVirtualClass : CopyConstructorWithImplicitArgumentClass] : mu1792_5 +# 1792| r1792_8(glval) = ConvertToNonVirtualBase[CopyConstructorTestVirtualClass : CopyConstructorWithImplicitArgumentClass] : r1792_6 # 1792| r1792_9(glval) = FunctionAddress[CopyConstructorWithImplicitArgumentClass] : # 1792| r1792_10(glval) = VariableAddress[(unnamed parameter 0)] : # 1792| r1792_11(CopyConstructorTestVirtualClass &) = Load[(unnamed parameter 0)] : &:r1792_10, ~m? @@ -12601,12 +12601,12 @@ ir.cpp: # 1796| mu1796_5(glval) = InitializeParameter[#this] : &:r1796_4 # 1796| r1796_6(glval) = Load[#this] : &:r1796_4, ~m? # 1796| mu1796_7(CopyConstructorTestVirtualClass) = InitializeIndirection[#this] : &:r1796_6 -# 1796| r1796_8(glval) = ConvertToNonVirtualBase[CopyConstructorTestVirtualClass : CopyConstructorWithImplicitArgumentClass] : mu1796_5 +# 1796| r1796_8(glval) = ConvertToNonVirtualBase[CopyConstructorTestVirtualClass : CopyConstructorWithImplicitArgumentClass] : r1796_6 # 1796| r1796_9(glval) = FunctionAddress[CopyConstructorWithImplicitArgumentClass] : # 1796| v1796_10(void) = Call[CopyConstructorWithImplicitArgumentClass] : func:r1796_9, this:r1796_8 # 1796| mu1796_11(unknown) = ^CallSideEffect : ~m? # 1796| mu1796_12(CopyConstructorWithImplicitArgumentClass) = ^IndirectMayWriteSideEffect[-1] : &:r1796_8 -# 1796| r1796_13(glval) = ConvertToNonVirtualBase[CopyConstructorTestVirtualClass : CopyConstructorWithBitwiseCopyClass] : mu1796_5 +# 1796| r1796_13(glval) = ConvertToNonVirtualBase[CopyConstructorTestVirtualClass : CopyConstructorWithBitwiseCopyClass] : r1796_6 # 1796| r1796_14(glval) = FunctionAddress[CopyConstructorWithBitwiseCopyClass] : # 1796| v1796_15(void) = Call[CopyConstructorWithBitwiseCopyClass] : func:r1796_14, this:r1796_13 # 1796| mu1796_16(unknown) = ^CallSideEffect : ~m? @@ -14417,7 +14417,7 @@ ir.cpp: # 2109| mu2109_5(glval) = InitializeParameter[#this] : &:r2109_4 # 2109| r2109_6(glval) = Load[#this] : &:r2109_4, ~m? # 2109| mu2109_7(Derived2) = InitializeIndirection[#this] : &:r2109_6 -# 2109| r2109_8(glval) = ConvertToNonVirtualBase[Derived2 : Base2] : mu2109_5 +# 2109| r2109_8(glval) = ConvertToNonVirtualBase[Derived2 : Base2] : r2109_6 # 2109| r2109_9(glval) = FunctionAddress[Base2] : # 2109| v2109_10(void) = Call[Base2] : func:r2109_9, this:r2109_8 # 2109| mu2109_11(unknown) = ^CallSideEffect : ~m? @@ -14438,7 +14438,7 @@ ir.cpp: # 2112| r2112_6(glval) = Load[#this] : &:r2112_4, ~m? # 2112| mu2112_7(Derived2) = InitializeIndirection[#this] : &:r2112_6 # 2112| v2112_8(void) = NoOp : -# 2112| r2112_9(glval) = ConvertToNonVirtualBase[Derived2 : Base2] : mu2112_5 +# 2112| r2112_9(glval) = ConvertToNonVirtualBase[Derived2 : Base2] : r2112_6 # 2112| r2112_10(glval) = FunctionAddress[~Base2] : # 2112| v2112_11(void) = Call[~Base2] : func:r2112_10, this:r2112_9 # 2112| mu2112_12(unknown) = ^CallSideEffect : ~m? @@ -14802,7 +14802,7 @@ ir.cpp: #-----| mu0_2(ClassWithDestructor &) = InitializeParameter[(unnamed parameter 0)] : &:r0_1 #-----| r0_3(ClassWithDestructor &) = Load[(unnamed parameter 0)] : &:r0_1, ~m? #-----| mu0_4(unknown) = InitializeIndirection[(unnamed parameter 0)] : &:r0_3 -# 2186| r2186_8(glval) = FieldAddress[x] : mu2186_5 +# 2186| r2186_8(glval) = FieldAddress[x] : r2186_6 # 2186| r2186_9(glval) = VariableAddress[(unnamed parameter 0)] : # 2186| r2186_10(ClassWithDestructor &) = Load[(unnamed parameter 0)] : &:r2186_9, ~m? # 2186| r2186_11(glval) = CopyValue : r2186_10 @@ -37423,7 +37423,7 @@ perf-regression.cpp: # 6| mu6_5(glval) = InitializeParameter[#this] : &:r6_4 # 6| r6_6(glval) = Load[#this] : &:r6_4, ~m? # 6| mu6_7(Big) = InitializeIndirection[#this] : &:r6_6 -# 6| r6_8(glval) = FieldAddress[buffer] : mu6_5 +# 6| r6_8(glval) = FieldAddress[buffer] : r6_6 # 6| r6_9(int) = Constant[0] : # 6| r6_10(glval) = PointerAdd[1] : r6_8, r6_9 # 6| r6_11(unknown[1073741824]) = Constant[0] : diff --git a/cpp/ql/test/query-tests/Critical/UnsafeUseOfThis/UnsafeUseOfThis.expected b/cpp/ql/test/query-tests/Critical/UnsafeUseOfThis/UnsafeUseOfThis.expected index 7f1ee1356ab1..3e6f60abe37e 100644 --- a/cpp/ql/test/query-tests/Critical/UnsafeUseOfThis/UnsafeUseOfThis.expected +++ b/cpp/ql/test/query-tests/Critical/UnsafeUseOfThis/UnsafeUseOfThis.expected @@ -6,6 +6,7 @@ edges | test.cpp:12:5:12:5 | b | test.cpp:12:5:12:5 | (reference dereference) | | test.cpp:15:3:15:4 | ~B | test.cpp:16:5:16:5 | this | | test.cpp:16:5:16:5 | this | file://:0:0:0:0 | (A *)... | +| test.cpp:21:3:21:3 | C | test.cpp:21:3:21:3 | C | | test.cpp:21:3:21:3 | C | test.cpp:21:13:21:13 | call to B | | test.cpp:21:3:21:3 | C | test.cpp:22:12:22:15 | this | | test.cpp:21:3:21:3 | C | test.cpp:25:7:25:10 | this | @@ -35,6 +36,7 @@ nodes | test.cpp:15:3:15:4 | ~B | semmle.label | ~B | | test.cpp:16:5:16:5 | this | semmle.label | this | | test.cpp:21:3:21:3 | C | semmle.label | C | +| test.cpp:21:3:21:3 | C | semmle.label | C | | test.cpp:21:13:21:13 | call to B | semmle.label | call to B | | test.cpp:22:12:22:15 | (B *)... | semmle.label | (B *)... | | test.cpp:22:12:22:15 | this | semmle.label | this | From 063e5d300ec95bd19287964e7d23ccffbb6353f1 Mon Sep 17 00:00:00 2001 From: Jeroen Ketema Date: Tue, 6 Jan 2026 17:40:52 +0100 Subject: [PATCH 3/4] C++: Remove redundant SSA branch after IR fix --- .../code/cpp/ir/dataflow/internal/SsaImplCommon.qll | 11 +++-------- 1 file changed, 3 insertions(+), 8 deletions(-) diff --git a/cpp/ql/lib/semmle/code/cpp/ir/dataflow/internal/SsaImplCommon.qll b/cpp/ql/lib/semmle/code/cpp/ir/dataflow/internal/SsaImplCommon.qll index 552f504b84b0..05fa0e86d4af 100644 --- a/cpp/ql/lib/semmle/code/cpp/ir/dataflow/internal/SsaImplCommon.qll +++ b/cpp/ql/lib/semmle/code/cpp/ir/dataflow/internal/SsaImplCommon.qll @@ -688,14 +688,9 @@ private module Cached { conversionFlow(mid, instr, false, _) ) or - exists(int ind0 | - exists(Operand address | - isDereference(operand.getDef(), address, _) and - isUseImpl(address, base, ind0) - ) - or - isUseImpl(operand.getDef().(InitializeParameterInstruction).getAnOperand(), base, ind0) - | + exists(int ind0, Operand address | + isDereference(operand.getDef(), address, _) and + isUseImpl(address, base, ind0) and ind0 = ind - 1 ) } From c567197f293edb9eeac71d45c52a345984777b89 Mon Sep 17 00:00:00 2001 From: Jeroen Ketema Date: Tue, 6 Jan 2026 21:58:43 +0100 Subject: [PATCH 4/4] C++: Simplify expression --- .../semmle/code/cpp/ir/dataflow/internal/SsaImplCommon.qll | 5 ++--- 1 file changed, 2 insertions(+), 3 deletions(-) diff --git a/cpp/ql/lib/semmle/code/cpp/ir/dataflow/internal/SsaImplCommon.qll b/cpp/ql/lib/semmle/code/cpp/ir/dataflow/internal/SsaImplCommon.qll index 05fa0e86d4af..10ebfdb5be0d 100644 --- a/cpp/ql/lib/semmle/code/cpp/ir/dataflow/internal/SsaImplCommon.qll +++ b/cpp/ql/lib/semmle/code/cpp/ir/dataflow/internal/SsaImplCommon.qll @@ -688,10 +688,9 @@ private module Cached { conversionFlow(mid, instr, false, _) ) or - exists(int ind0, Operand address | + exists(Operand address | isDereference(operand.getDef(), address, _) and - isUseImpl(address, base, ind0) and - ind0 = ind - 1 + isUseImpl(address, base, ind - 1) ) }