diff --git a/cpp/ql/lib/semmle/code/cpp/exprs/Expr.qll b/cpp/ql/lib/semmle/code/cpp/exprs/Expr.qll index b87805d19671..8bc9d27d1ca9 100644 --- a/cpp/ql/lib/semmle/code/cpp/exprs/Expr.qll +++ b/cpp/ql/lib/semmle/code/cpp/exprs/Expr.qll @@ -1322,3 +1322,31 @@ class CoYieldExpr extends UnaryOperation, @co_yield { override int getPrecedence() { result = 2 } } + +class ReuseExpr extends Expr, @reuseexpr { + override string getAPrimaryQlClass() { result = "ReuseExpr" } + + override string toString() { + result = "reuse of " + this.getReusedExpr().toString() + } + + override Type getType() { + result = this.getReusedExpr().getType() + } + + override predicate isLValueCategory() { + none() + } + + override predicate isXValueCategory() { + any() + } + + override predicate isPRValueCategory() { + none() + } + + Expr getReusedExpr() { + expr_reuse(underlyingElement(this), unresolveElement(result)) + } +} diff --git a/cpp/ql/lib/semmle/code/cpp/ir/implementation/raw/internal/TranslatedElement.qll b/cpp/ql/lib/semmle/code/cpp/ir/implementation/raw/internal/TranslatedElement.qll index a9d4b6e1095f..aa8cc60f2fe6 100644 --- a/cpp/ql/lib/semmle/code/cpp/ir/implementation/raw/internal/TranslatedElement.qll +++ b/cpp/ql/lib/semmle/code/cpp/ir/implementation/raw/internal/TranslatedElement.qll @@ -97,8 +97,10 @@ private predicate ignoreExprAndDescendants(Expr expr) { vaStartExpr.getLastNamedParameter().getFullyConverted() = expr ) or - // suppress destructors of temporary variables until proper support is added for them. - exists(Expr parent | parent.getAnImplicitDestructorCall() = expr) + // Do not translate implicit destructor calls for unnamed temporary variables that are + // conditionally constructed (until we have a mechanism for calling these only when the + // temporary's constructor was run) + isConditionalTemporaryDestructorCall(expr) } /** @@ -229,6 +231,20 @@ private predicate usedAsCondition(Expr expr) { ) } +private predicate isInConditionalEvaluation(Expr e) { + exists(ConditionalExpr cond | + e = cond.getThen() and not cond.isTwoOperand() + or + e = cond.getElse() + ) + or + isInConditionalEvaluation(getRealParent(e)) +} + +private predicate isConditionalTemporaryDestructorCall(DestructorCall dc) { + isInConditionalEvaluation(dc.getQualifier().(ReuseExpr).getReusedExpr()) +} + /** * Holds if `conv` is an `InheritanceConversion` that requires a `TranslatedLoad`, despite not being * marked as having an lvalue-to-rvalue conversion. 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 51111c24572c..82fc9ecb6a83 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 @@ -97,6 +97,19 @@ abstract class TranslatedExpr extends TranslatedElement { ) } + final override predicate hasAnImplicitDestructorCall() { + exists(expr.getAnImplicitDestructorCall()) + } + + final override int getFirstDestructorCallIndex() { + not this.handlesDestructorsExplicitly() and + ( + result = max(int childId | exists(this.getChildInternal(childId))) + 1 + or + not exists(this.getChildInternal(_)) and result = 0 + ) + } + final override Locatable getAst() { result = expr } final override Declaration getFunction() { result = getEnclosingDeclaration(expr) } @@ -2769,6 +2782,43 @@ class TranslatedTemporaryObjectExpr extends TranslatedNonConstantExpr, final override Instruction getResult() { result = this.getTargetAddress() } } +class TranslatedReuseExpr extends TranslatedNonConstantExpr { + override ReuseExpr expr; + + override Instruction getFirstInstruction(EdgeKind kind) { + result = this.getInstruction(OnlyInstructionTag()) and + kind instanceof GotoEdge + } + + override predicate hasInstruction(Opcode opcode, InstructionTag tag, CppType resultType) { + opcode instanceof Opcode::CopyValue and + tag instanceof OnlyInstructionTag and + resultType = this.getResultType() + } + + override Instruction getResult() { result = this.getInstruction(OnlyInstructionTag()) } + + override Instruction getInstructionSuccessorInternal(InstructionTag tag, EdgeKind kind) { + tag = OnlyInstructionTag() and + kind instanceof GotoEdge and + result = this.getParent().getChildSuccessor(this, kind) + } + + override TranslatedElement getChildInternal(int id) { none() } + + override Instruction getALastInstructionInternal() { + result = this.getInstruction(OnlyInstructionTag()) + } + + override Instruction getInstructionRegisterOperand(InstructionTag tag, OperandTag operandTag) { + tag = OnlyInstructionTag() and + operandTag instanceof UnaryOperandTag and + if getTranslatedExpr(expr.getReusedExpr()) instanceof TranslatedLoad + then result = getTranslatedExpr(expr.getReusedExpr()).(TranslatedLoad).getOperand().getResult() + else result = getTranslatedExpr(expr.getReusedExpr()).getResult() + } +} + /** * IR translation of a `throw` expression. */ diff --git a/cpp/ql/lib/semmlecode.cpp.dbscheme b/cpp/ql/lib/semmlecode.cpp.dbscheme index 298438feb146..aa7ff0ab32cd 100644 --- a/cpp/ql/lib/semmlecode.cpp.dbscheme +++ b/cpp/ql/lib/semmlecode.cpp.dbscheme @@ -1513,6 +1513,11 @@ exprs( int location: @location_expr ref ); +expr_reuse( + int reuse: @expr ref, + int original: @expr ref +) + /* case @value.category of 1 = prval @@ -1741,6 +1746,7 @@ case @expr.kind of | 360 = @isunsigned | 361 = @isvoid | 362 = @isvolatile +| 363 = @reuseexpr ; @var_args_expr = @vastartexpr diff --git a/cpp/ql/test/library-tests/ir/ir/PrintAST.expected b/cpp/ql/test/library-tests/ir/ir/PrintAST.expected index 24501a4bcaeb..fb22aeaffbb1 100644 --- a/cpp/ql/test/library-tests/ir/ir/PrintAST.expected +++ b/cpp/ql/test/library-tests/ir/ir/PrintAST.expected @@ -6853,6 +6853,12 @@ ir.cpp: # 809| Conversion = [BaseClassConversion] base class conversion # 809| Type = [SpecifiedType] const Base # 809| ValueCategory = lvalue +# 809| getImplicitDestructorCall(0): [DestructorCall] call to ~Base +# 809| Type = [VoidType] void +# 809| ValueCategory = prvalue +# 809| getQualifier(): [ReuseExpr] reuse of temporary object +# 809| Type = [Struct,VirtualBaseClass] Base +# 809| ValueCategory = xvalue # 809| getArgument(0).getFullyConverted(): [ReferenceToExpr] (reference to) # 809| Type = [LValueReferenceType] const Base & # 809| ValueCategory = prvalue @@ -6886,6 +6892,12 @@ ir.cpp: # 810| Conversion = [BaseClassConversion] base class conversion # 810| Type = [SpecifiedType] const Base # 810| ValueCategory = lvalue +# 810| getImplicitDestructorCall(0): [DestructorCall] call to ~Base +# 810| Type = [VoidType] void +# 810| ValueCategory = prvalue +# 810| getQualifier(): [ReuseExpr] reuse of temporary object +# 810| Type = [Struct,VirtualBaseClass] Base +# 810| ValueCategory = xvalue # 810| getArgument(0).getFullyConverted(): [ReferenceToExpr] (reference to) # 810| Type = [LValueReferenceType] const Base & # 810| ValueCategory = prvalue @@ -7093,6 +7105,12 @@ ir.cpp: # 823| Conversion = [BaseClassConversion] base class conversion # 823| Type = [SpecifiedType] const Middle # 823| ValueCategory = lvalue +# 823| getImplicitDestructorCall(0): [DestructorCall] call to ~Base +# 823| Type = [VoidType] void +# 823| ValueCategory = prvalue +# 823| getQualifier(): [ReuseExpr] reuse of temporary object +# 823| Type = [Struct,VirtualBaseClass] Base +# 823| ValueCategory = xvalue # 823| getArgument(0).getFullyConverted(): [ReferenceToExpr] (reference to) # 823| Type = [LValueReferenceType] const Base & # 823| ValueCategory = prvalue @@ -7130,6 +7148,12 @@ ir.cpp: # 824| Conversion = [BaseClassConversion] base class conversion # 824| Type = [SpecifiedType] const Middle # 824| ValueCategory = lvalue +# 824| getImplicitDestructorCall(0): [DestructorCall] call to ~Base +# 824| Type = [VoidType] void +# 824| ValueCategory = prvalue +# 824| getQualifier(): [ReuseExpr] reuse of temporary object +# 824| Type = [Struct,VirtualBaseClass] Base +# 824| ValueCategory = xvalue # 824| getArgument(0).getFullyConverted(): [ReferenceToExpr] (reference to) # 824| Type = [LValueReferenceType] const Base & # 824| ValueCategory = prvalue @@ -11175,6 +11199,12 @@ ir.cpp: # 1372| getArgument(0).getFullyConverted(): [ArrayToPointerConversion] array to pointer conversion # 1372| Type = [PointerType] const char * # 1372| ValueCategory = prvalue +# 1372| getImplicitDestructorCall(0): [DestructorCall] call to ~String +# 1372| Type = [VoidType] void +# 1372| ValueCategory = prvalue +# 1372| getQualifier(): [ReuseExpr] reuse of temporary object +# 1372| Type = [SpecifiedType] const String +# 1372| ValueCategory = xvalue # 1372| getArgument(0).getFullyConverted(): [ReferenceToExpr] (reference to) # 1372| Type = [LValueReferenceType] const String & # 1372| ValueCategory = prvalue @@ -11198,6 +11228,12 @@ ir.cpp: # 1373| Conversion = [GlvalueConversion] glvalue conversion # 1373| Type = [SpecifiedType] const String # 1373| ValueCategory = lvalue +# 1373| getImplicitDestructorCall(0): [DestructorCall] call to ~String +# 1373| Type = [VoidType] void +# 1373| ValueCategory = prvalue +# 1373| getQualifier(): [ReuseExpr] reuse of temporary object +# 1373| Type = [Struct] String +# 1373| ValueCategory = xvalue # 1373| getArgument(0).getFullyConverted(): [TemporaryObjectExpr] temporary object # 1373| Type = [Struct] String # 1373| ValueCategory = lvalue @@ -11215,6 +11251,12 @@ ir.cpp: # 1374| getArgument(0).getFullyConverted(): [ArrayToPointerConversion] array to pointer conversion # 1374| Type = [PointerType] const char * # 1374| ValueCategory = prvalue +# 1374| getImplicitDestructorCall(0): [DestructorCall] call to ~String +# 1374| Type = [VoidType] void +# 1374| ValueCategory = prvalue +# 1374| getQualifier(): [ReuseExpr] reuse of temporary object +# 1374| Type = [Struct] String +# 1374| ValueCategory = xvalue # 1374| getArgument(0).getFullyConverted(): [TemporaryObjectExpr] temporary object # 1374| Type = [Struct] String # 1374| ValueCategory = lvalue @@ -11225,6 +11267,12 @@ ir.cpp: # 1375| getQualifier(): [ConstructorCall] call to String # 1375| Type = [VoidType] void # 1375| ValueCategory = prvalue +# 1375| getImplicitDestructorCall(0): [DestructorCall] call to ~String +# 1375| Type = [VoidType] void +# 1375| ValueCategory = prvalue +# 1375| getQualifier(): [ReuseExpr] reuse of temporary object +# 1375| Type = [Struct] String +# 1375| ValueCategory = xvalue # 1375| getQualifier().getFullyConverted(): [CStyleCast] (const String)... # 1375| Conversion = [PrvalueAdjustmentConversion] prvalue adjustment conversion # 1375| Type = [SpecifiedType] const String @@ -11239,6 +11287,12 @@ ir.cpp: # 1376| getQualifier(): [FunctionCall] call to returnValue # 1376| Type = [Struct] String # 1376| ValueCategory = prvalue +# 1376| getImplicitDestructorCall(0): [DestructorCall] call to ~String +# 1376| Type = [VoidType] void +# 1376| ValueCategory = prvalue +# 1376| getQualifier(): [ReuseExpr] reuse of temporary object +# 1376| Type = [Struct] String +# 1376| ValueCategory = xvalue # 1376| getQualifier().getFullyConverted(): [CStyleCast] (const String)... # 1376| Conversion = [PrvalueAdjustmentConversion] prvalue adjustment conversion # 1376| Type = [SpecifiedType] const String @@ -11250,6 +11304,12 @@ ir.cpp: # 1378| getExpr(): [FunctionCall] call to defaultConstruct # 1378| Type = [Struct] String # 1378| ValueCategory = prvalue +# 1378| getImplicitDestructorCall(0): [DestructorCall] call to ~String +# 1378| Type = [VoidType] void +# 1378| ValueCategory = prvalue +# 1378| getQualifier(): [ReuseExpr] reuse of temporary object +# 1378| Type = [Struct] String +# 1378| ValueCategory = xvalue # 1378| getExpr().getFullyConverted(): [TemporaryObjectExpr] temporary object # 1378| Type = [Struct] String # 1378| ValueCategory = prvalue @@ -11257,6 +11317,12 @@ ir.cpp: # 1379| getImplicitDestructorCall(0): [DestructorCall] call to ~String # 1379| Type = [VoidType] void # 1379| ValueCategory = prvalue +# 1379| getQualifier(): [ReuseExpr] reuse of temporary object +# 1379| Type = [Struct] String +# 1379| ValueCategory = xvalue +# 1379| getImplicitDestructorCall(1): [DestructorCall] call to ~String +# 1379| Type = [VoidType] void +# 1379| ValueCategory = prvalue # 1379| getQualifier(): [VariableAccess] s # 1379| Type = [Struct] String # 1379| ValueCategory = lvalue @@ -11311,6 +11377,12 @@ ir.cpp: # 1386| getArgument(0): [VariableAccess] d # 1386| Type = [Class] destructor_only # 1386| ValueCategory = prvalue(load) +# 1386| getImplicitDestructorCall(0): [DestructorCall] call to ~destructor_only +# 1386| Type = [VoidType] void +# 1386| ValueCategory = prvalue +# 1386| getQualifier(): [ReuseExpr] reuse of temporary object +# 1386| Type = [Class] destructor_only +# 1386| ValueCategory = xvalue # 1386| getArgument(0).getFullyConverted(): [TemporaryObjectExpr] temporary object # 1386| Type = [Class] destructor_only # 1386| ValueCategory = lvalue @@ -11322,6 +11394,12 @@ ir.cpp: # 1387| Type = [Class] destructor_only # 1387| Value = [Literal] 0 # 1387| ValueCategory = prvalue +# 1387| getImplicitDestructorCall(0): [DestructorCall] call to ~destructor_only +# 1387| Type = [VoidType] void +# 1387| ValueCategory = prvalue +# 1387| getQualifier(): [ReuseExpr] reuse of temporary object +# 1387| Type = [Class] destructor_only +# 1387| ValueCategory = xvalue # 1387| getQualifier().getFullyConverted(): [TemporaryObjectExpr] temporary object # 1387| Type = [Class] destructor_only # 1387| ValueCategory = prvalue(load) @@ -11332,6 +11410,12 @@ ir.cpp: # 1388| getQualifier(): [FunctionCall] call to returnValue # 1388| Type = [Class] destructor_only # 1388| ValueCategory = prvalue +# 1388| getImplicitDestructorCall(0): [DestructorCall] call to ~destructor_only +# 1388| Type = [VoidType] void +# 1388| ValueCategory = prvalue +# 1388| getQualifier(): [ReuseExpr] reuse of temporary object +# 1388| Type = [Class] destructor_only +# 1388| ValueCategory = xvalue # 1388| getQualifier().getFullyConverted(): [TemporaryObjectExpr] temporary object # 1388| Type = [Class] destructor_only # 1388| ValueCategory = prvalue(load) @@ -11339,6 +11423,12 @@ ir.cpp: # 1390| getExpr(): [FunctionCall] call to defaultConstruct # 1390| Type = [Class] destructor_only # 1390| ValueCategory = prvalue +# 1390| getImplicitDestructorCall(0): [DestructorCall] call to ~destructor_only +# 1390| Type = [VoidType] void +# 1390| ValueCategory = prvalue +# 1390| getQualifier(): [ReuseExpr] reuse of temporary object +# 1390| Type = [Class] destructor_only +# 1390| ValueCategory = xvalue # 1390| getExpr().getFullyConverted(): [TemporaryObjectExpr] temporary object # 1390| Type = [Class] destructor_only # 1390| ValueCategory = prvalue @@ -11352,6 +11442,12 @@ ir.cpp: # 1391| getImplicitDestructorCall(1): [DestructorCall] call to ~destructor_only # 1391| Type = [VoidType] void # 1391| ValueCategory = prvalue +# 1391| getQualifier(): [ReuseExpr] reuse of temporary object +# 1391| Type = [Class] destructor_only +# 1391| ValueCategory = xvalue +# 1391| getImplicitDestructorCall(2): [DestructorCall] call to ~destructor_only +# 1391| Type = [VoidType] void +# 1391| ValueCategory = prvalue # 1391| getQualifier(): [VariableAccess] d # 1391| Type = [Class] destructor_only # 1391| ValueCategory = lvalue @@ -15707,6 +15803,12 @@ ir.cpp: # 2021| getElse().getFullyConverted(): [TemporaryObjectExpr] temporary object # 2021| Type = [Struct] TernaryNonPodObj # 2021| ValueCategory = prvalue(load) +# 2021| getImplicitDestructorCall(0): [DestructorCall] call to ~TernaryNonPodObj +# 2021| Type = [VoidType] void +# 2021| ValueCategory = prvalue +# 2021| getQualifier(): [ReuseExpr] reuse of temporary object +# 2021| Type = [Struct] TernaryNonPodObj +# 2021| ValueCategory = xvalue # 2021| getArgument(0).getFullyConverted(): [ReferenceToExpr] (reference to) # 2021| Type = [LValueReferenceType] const TernaryNonPodObj & # 2021| ValueCategory = prvalue @@ -15745,6 +15847,12 @@ ir.cpp: # 2022| getElse().getFullyConverted(): [TemporaryObjectExpr] temporary object # 2022| Type = [Struct] TernaryNonPodObj # 2022| ValueCategory = prvalue(load) +# 2022| getImplicitDestructorCall(0): [DestructorCall] call to ~TernaryNonPodObj +# 2022| Type = [VoidType] void +# 2022| ValueCategory = prvalue +# 2022| getQualifier(): [ReuseExpr] reuse of temporary object +# 2022| Type = [Struct] TernaryNonPodObj +# 2022| ValueCategory = xvalue # 2022| getArgument(0).getFullyConverted(): [ReferenceToExpr] (reference to) # 2022| Type = [LValueReferenceType] const TernaryNonPodObj & # 2022| ValueCategory = prvalue @@ -15790,6 +15898,12 @@ ir.cpp: # 2023| getArgument(0): [ConstructorCall] call to TernaryNonPodObj # 2023| Type = [VoidType] void # 2023| ValueCategory = prvalue +# 2023| getImplicitDestructorCall(0): [DestructorCall] call to ~TernaryNonPodObj +# 2023| Type = [VoidType] void +# 2023| ValueCategory = prvalue +# 2023| getQualifier(): [ReuseExpr] reuse of temporary object +# 2023| Type = [Struct] TernaryNonPodObj +# 2023| ValueCategory = xvalue # 2023| getQualifier().getFullyConverted(): [ParenthesisExpr] (...) # 2023| Type = [Struct] TernaryNonPodObj # 2023| ValueCategory = lvalue @@ -17583,6 +17697,12 @@ ir.cpp: # 2246| getArgument(0).getFullyConverted(): [ArrayToPointerConversion] array to pointer conversion # 2246| Type = [PointerType] const char * # 2246| ValueCategory = prvalue +# 2246| getImplicitDestructorCall(0): [DestructorCall] call to ~String +# 2246| Type = [VoidType] void +# 2246| ValueCategory = prvalue +# 2246| getQualifier(): [ReuseExpr] reuse of temporary object +# 2246| Type = [Struct] String +# 2246| ValueCategory = xvalue # 2246| getArgument(0).getFullyConverted(): [TemporaryObjectExpr] temporary object # 2246| Type = [Struct] String # 2246| ValueCategory = lvalue @@ -18174,6 +18294,12 @@ smart_ptr.cpp: # 12| getArgument(0).getFullyConverted(): [ReferenceToExpr] (reference to) # 12| Type = [LValueReferenceType] unique_ptr> & # 12| ValueCategory = prvalue +# 12| getImplicitDestructorCall(0): [DestructorCall] call to ~unique_ptr +# 12| Type = [VoidType] void +# 12| ValueCategory = prvalue +# 12| getQualifier(): [ReuseExpr] reuse of temporary object +# 12| Type = [ClassTemplateInstantiation] unique_ptr> +# 12| ValueCategory = xvalue # 12| getArgument(0).getFullyConverted(): [TemporaryObjectExpr] temporary object # 12| Type = [ClassTemplateInstantiation] unique_ptr> # 12| ValueCategory = lvalue @@ -18223,6 +18349,12 @@ smart_ptr.cpp: # 19| Conversion = [GlvalueConversion] glvalue conversion # 19| Type = [SpecifiedType] const shared_ptr # 19| ValueCategory = lvalue +# 19| getImplicitDestructorCall(0): [DestructorCall] call to ~shared_ptr +# 19| Type = [VoidType] void +# 19| ValueCategory = prvalue +# 19| getQualifier(): [ReuseExpr] reuse of temporary object +# 19| Type = [ClassTemplateInstantiation] shared_ptr +# 19| ValueCategory = xvalue # 19| getArgument(0).getFullyConverted(): [TemporaryObjectExpr] temporary object # 19| Type = [ClassTemplateInstantiation] shared_ptr # 19| ValueCategory = lvalue @@ -18276,6 +18408,12 @@ smart_ptr.cpp: # 31| Conversion = [GlvalueConversion] glvalue conversion # 31| Type = [SpecifiedType] const shared_ptr # 31| ValueCategory = lvalue +# 31| getImplicitDestructorCall(0): [DestructorCall] call to ~shared_ptr +# 31| Type = [VoidType] void +# 31| ValueCategory = prvalue +# 31| getQualifier(): [ReuseExpr] reuse of temporary object +# 31| Type = [ClassTemplateInstantiation] shared_ptr +# 31| ValueCategory = xvalue # 31| getArgument(0).getFullyConverted(): [TemporaryObjectExpr] temporary object # 31| Type = [ClassTemplateInstantiation] shared_ptr # 31| ValueCategory = lvalue @@ -18299,6 +18437,12 @@ smart_ptr.cpp: # 35| Conversion = [GlvalueConversion] glvalue conversion # 35| Type = [SpecifiedType] const shared_ptr # 35| ValueCategory = lvalue +# 35| getImplicitDestructorCall(0): [DestructorCall] call to ~shared_ptr +# 35| Type = [VoidType] void +# 35| ValueCategory = prvalue +# 35| getQualifier(): [ReuseExpr] reuse of temporary object +# 35| Type = [ClassTemplateInstantiation] shared_ptr +# 35| ValueCategory = xvalue # 35| getArgument(0).getFullyConverted(): [TemporaryObjectExpr] temporary object # 35| Type = [ClassTemplateInstantiation] shared_ptr # 35| ValueCategory = lvalue @@ -18322,6 +18466,12 @@ smart_ptr.cpp: # 39| Conversion = [GlvalueConversion] glvalue conversion # 39| Type = [SpecifiedType] const shared_ptr> # 39| ValueCategory = lvalue +# 39| getImplicitDestructorCall(0): [DestructorCall] call to ~shared_ptr +# 39| Type = [VoidType] void +# 39| ValueCategory = prvalue +# 39| getQualifier(): [ReuseExpr] reuse of temporary object +# 39| Type = [ClassTemplateInstantiation] shared_ptr> +# 39| ValueCategory = xvalue # 39| getArgument(0).getFullyConverted(): [TemporaryObjectExpr] temporary object # 39| Type = [ClassTemplateInstantiation] shared_ptr> # 39| ValueCategory = lvalue @@ -18345,6 +18495,12 @@ smart_ptr.cpp: # 43| Conversion = [GlvalueConversion] glvalue conversion # 43| Type = [SpecifiedType] const shared_ptr> # 43| ValueCategory = lvalue +# 43| getImplicitDestructorCall(0): [DestructorCall] call to ~shared_ptr +# 43| Type = [VoidType] void +# 43| ValueCategory = prvalue +# 43| getQualifier(): [ReuseExpr] reuse of temporary object +# 43| Type = [ClassTemplateInstantiation] shared_ptr> +# 43| ValueCategory = xvalue # 43| getArgument(0).getFullyConverted(): [TemporaryObjectExpr] temporary object # 43| Type = [ClassTemplateInstantiation] shared_ptr> # 43| ValueCategory = lvalue @@ -18368,6 +18524,12 @@ smart_ptr.cpp: # 47| Conversion = [GlvalueConversion] glvalue conversion # 47| Type = [SpecifiedType] const shared_ptr> # 47| ValueCategory = lvalue +# 47| getImplicitDestructorCall(0): [DestructorCall] call to ~shared_ptr +# 47| Type = [VoidType] void +# 47| ValueCategory = prvalue +# 47| getQualifier(): [ReuseExpr] reuse of temporary object +# 47| Type = [ClassTemplateInstantiation] shared_ptr> +# 47| ValueCategory = xvalue # 47| getArgument(0).getFullyConverted(): [TemporaryObjectExpr] temporary object # 47| Type = [ClassTemplateInstantiation] shared_ptr> # 47| ValueCategory = lvalue @@ -18617,6 +18779,317 @@ struct_init.cpp: # 41| Type = [PointerType] Info * # 41| ValueCategory = prvalue # 42| getStmt(2): [ReturnStmt] return ... +temp.cpp: +# 1| [CopyAssignmentOperator] ClassWithDestructor2& ClassWithDestructor2::operator=(ClassWithDestructor2 const&) +# 1| : +#-----| getParameter(0): [Parameter] (unnamed parameter 0) +#-----| Type = [LValueReferenceType] const ClassWithDestructor2 & +# 1| [CopyConstructor] void ClassWithDestructor2::ClassWithDestructor2(ClassWithDestructor2 const&) +# 1| : +#-----| getParameter(0): [Parameter] (unnamed parameter 0) +#-----| Type = [LValueReferenceType] const ClassWithDestructor2 & +# 3| [Constructor] void ClassWithDestructor2::ClassWithDestructor2() +# 3| : +# 4| [Destructor] void ClassWithDestructor2::~ClassWithDestructor2() +# 4| : +# 6| [MemberFunction] char ClassWithDestructor2::get_x() +# 6| : +# 9| [CopyAssignmentOperator] ClassWithConstructor& ClassWithConstructor::operator=(ClassWithConstructor const&) +# 9| : +#-----| getParameter(0): [Parameter] (unnamed parameter 0) +#-----| Type = [LValueReferenceType] const ClassWithConstructor & +# 9| [MoveAssignmentOperator] ClassWithConstructor& ClassWithConstructor::operator=(ClassWithConstructor&&) +# 9| : +#-----| getParameter(0): [Parameter] (unnamed parameter 0) +#-----| Type = [RValueReferenceType] ClassWithConstructor && +# 9| [CopyConstructor] void ClassWithConstructor::ClassWithConstructor(ClassWithConstructor const&) +# 9| : +#-----| getParameter(0): [Parameter] (unnamed parameter 0) +#-----| Type = [LValueReferenceType] const ClassWithConstructor & +# 9| [MoveConstructor] void ClassWithConstructor::ClassWithConstructor(ClassWithConstructor&&) +# 9| : +#-----| getParameter(0): [Parameter] (unnamed parameter 0) +#-----| Type = [RValueReferenceType] ClassWithConstructor && +# 11| [Constructor] void ClassWithConstructor::ClassWithConstructor(char, char) +# 11| : +# 11| getParameter(0): [Parameter] x +# 11| Type = [PlainCharType] char +# 11| getParameter(1): [Parameter] y +# 11| Type = [PlainCharType] char +# 14| [TopLevelFunction] char temp_test() +# 14| : +# 14| getEntryPoint(): [BlockStmt] { ... } +# 15| getStmt(0): [DeclStmt] declaration +# 15| getDeclarationEntry(0): [VariableDeclarationEntry] definition of x +# 15| Type = [PlainCharType] char +# 15| getVariable().getInitializer(): [Initializer] initializer for x +# 15| getExpr(): [FunctionCall] call to get_x +# 15| Type = [PlainCharType] char +# 15| ValueCategory = prvalue +# 15| getQualifier(): [ConstructorCall] call to ClassWithDestructor2 +# 15| Type = [VoidType] void +# 15| ValueCategory = prvalue +# 15| getImplicitDestructorCall(0): [DestructorCall] call to ~ClassWithDestructor2 +# 15| Type = [VoidType] void +# 15| ValueCategory = prvalue +# 15| getQualifier(): [ReuseExpr] reuse of temporary object +# 15| Type = [Class] ClassWithDestructor2 +# 15| ValueCategory = xvalue +# 15| getQualifier().getFullyConverted(): [TemporaryObjectExpr] temporary object +# 15| Type = [Class] ClassWithDestructor2 +# 15| ValueCategory = prvalue(load) +# 16| getStmt(1): [DeclStmt] declaration +# 16| getDeclarationEntry(0): [VariableDeclarationEntry] definition of y +# 16| Type = [Class] ClassWithConstructor +# 16| getVariable().getInitializer(): [Initializer] initializer for y +# 16| getExpr(): [ConstructorCall] call to ClassWithConstructor +# 16| Type = [VoidType] void +# 16| ValueCategory = prvalue +# 16| getArgument(0): [CharLiteral] 97 +# 16| Type = [PlainCharType] char +# 16| Value = [CharLiteral] 97 +# 16| ValueCategory = prvalue +# 16| getArgument(1): [FunctionCall] call to get_x +# 16| Type = [PlainCharType] char +# 16| ValueCategory = prvalue +# 16| getQualifier(): [ConstructorCall] call to ClassWithDestructor2 +# 16| Type = [VoidType] void +# 16| ValueCategory = prvalue +# 16| getQualifier().getFullyConverted(): [TemporaryObjectExpr] temporary object +# 16| Type = [Class] ClassWithDestructor2 +# 16| ValueCategory = prvalue(load) +# 16| getImplicitDestructorCall(0): [DestructorCall] call to ~ClassWithDestructor2 +# 16| Type = [VoidType] void +# 16| ValueCategory = prvalue +# 16| getQualifier(): [ReuseExpr] reuse of temporary object +# 16| Type = [Class] ClassWithDestructor2 +# 16| ValueCategory = xvalue +# 17| getStmt(2): [ReturnStmt] return ... +# 17| getExpr(): [FunctionCall] call to get_x +# 17| Type = [PlainCharType] char +# 17| ValueCategory = prvalue +# 17| getQualifier(): [ConstructorCall] call to ClassWithDestructor2 +# 17| Type = [VoidType] void +# 17| ValueCategory = prvalue +# 17| getImplicitDestructorCall(0): [DestructorCall] call to ~ClassWithDestructor2 +# 17| Type = [VoidType] void +# 17| ValueCategory = prvalue +# 17| getQualifier(): [ReuseExpr] reuse of temporary object +# 17| Type = [Class] ClassWithDestructor2 +# 17| ValueCategory = xvalue +# 17| getQualifier().getFullyConverted(): [TemporaryObjectExpr] temporary object +# 17| Type = [Class] ClassWithDestructor2 +# 17| ValueCategory = prvalue(load) +# 18| getImplicitDestructorCall(0): [DestructorCall] call to ~ClassWithDestructor2 +# 18| Type = [VoidType] void +# 18| ValueCategory = prvalue +# 18| getQualifier(): [ReuseExpr] reuse of temporary object +# 18| Type = [Class] ClassWithDestructor2 +# 18| ValueCategory = xvalue +# 21| [TopLevelFunction] char temp_test2() +# 21| : +# 21| getEntryPoint(): [BlockStmt] { ... } +# 22| getStmt(0): [ExprStmt] ExprStmt +# 22| getExpr(): [NewExpr] new +# 22| Type = [PointerType] ClassWithDestructor2 * +# 22| ValueCategory = prvalue +# 22| getInitializer(): [ConstructorCall] call to ClassWithDestructor2 +# 22| Type = [VoidType] void +# 22| ValueCategory = prvalue +# 23| getStmt(1): [ReturnStmt] return ... +# 23| getExpr(): [AddExpr] ... + ... +# 23| Type = [IntType] int +# 23| ValueCategory = prvalue +# 23| getLeftOperand(): [FunctionCall] call to get_x +# 23| Type = [PlainCharType] char +# 23| ValueCategory = prvalue +# 23| getQualifier(): [ConstructorCall] call to ClassWithDestructor2 +# 23| Type = [VoidType] void +# 23| ValueCategory = prvalue +# 23| getQualifier().getFullyConverted(): [TemporaryObjectExpr] temporary object +# 23| Type = [Class] ClassWithDestructor2 +# 23| ValueCategory = prvalue(load) +# 23| getRightOperand(): [FunctionCall] call to get_x +# 23| Type = [PlainCharType] char +# 23| ValueCategory = prvalue +# 23| getQualifier(): [ConstructorCall] call to ClassWithDestructor2 +# 23| Type = [VoidType] void +# 23| ValueCategory = prvalue +# 23| getQualifier().getFullyConverted(): [TemporaryObjectExpr] temporary object +# 23| Type = [Class] ClassWithDestructor2 +# 23| ValueCategory = prvalue(load) +# 23| getImplicitDestructorCall(0): [DestructorCall] call to ~ClassWithDestructor2 +# 23| Type = [VoidType] void +# 23| ValueCategory = prvalue +# 23| getQualifier(): [ReuseExpr] reuse of temporary object +# 23| Type = [Class] ClassWithDestructor2 +# 23| ValueCategory = xvalue +# 23| getImplicitDestructorCall(1): [DestructorCall] call to ~ClassWithDestructor2 +# 23| Type = [VoidType] void +# 23| ValueCategory = prvalue +# 23| getQualifier(): [ReuseExpr] reuse of temporary object +# 23| Type = [Class] ClassWithDestructor2 +# 23| ValueCategory = xvalue +# 23| getLeftOperand().getFullyConverted(): [CStyleCast] (int)... +# 23| Conversion = [IntegralConversion] integral conversion +# 23| Type = [IntType] int +# 23| ValueCategory = prvalue +# 23| getRightOperand().getFullyConverted(): [CStyleCast] (int)... +# 23| Conversion = [IntegralConversion] integral conversion +# 23| Type = [IntType] int +# 23| ValueCategory = prvalue +# 23| getExpr().getFullyConverted(): [CStyleCast] (char)... +# 23| Conversion = [IntegralConversion] integral conversion +# 23| Type = [PlainCharType] char +# 23| ValueCategory = prvalue +# 27| [FunctionTemplateInstantiation,TopLevelFunction] ClassWithDestructor2 returnValue() +# 27| : +# 27| [TemplateFunction,TopLevelFunction] T returnValue() +# 27| : +# 29| [TopLevelFunction] void temp_test3() +# 29| : +# 29| getEntryPoint(): [BlockStmt] { ... } +# 30| getStmt(0): [DeclStmt] declaration +# 30| getDeclarationEntry(0): [VariableDeclarationEntry] definition of rs +# 30| Type = [LValueReferenceType] const ClassWithDestructor2 & +# 30| getVariable().getInitializer(): [Initializer] initializer for rs +# 30| getExpr(): [FunctionCall] call to returnValue +# 30| Type = [Class] ClassWithDestructor2 +# 30| ValueCategory = prvalue +# 30| getExpr().getFullyConverted(): [ReferenceToExpr] (reference to) +# 30| Type = [LValueReferenceType] const ClassWithDestructor2 & +# 30| ValueCategory = prvalue +# 30| getExpr(): [CStyleCast] (const ClassWithDestructor2)... +# 30| Conversion = [GlvalueConversion] glvalue conversion +# 30| Type = [SpecifiedType] const ClassWithDestructor2 +# 30| ValueCategory = lvalue +# 30| getExpr(): [TemporaryObjectExpr] temporary object +# 30| Type = [Class] ClassWithDestructor2 +# 30| ValueCategory = lvalue +# 31| getStmt(1): [ReturnStmt] return ... +# 31| getImplicitDestructorCall(0): [DestructorCall] call to ~ClassWithDestructor2 +# 31| Type = [VoidType] void +# 31| ValueCategory = prvalue +# 31| getQualifier(): [ReuseExpr] reuse of temporary object +# 31| Type = [Class] ClassWithDestructor2 +# 31| ValueCategory = xvalue +# 33| [TopLevelFunction] void temp_test4() +# 33| : +# 33| getEntryPoint(): [BlockStmt] { ... } +# 34| getStmt(0): [DeclStmt] declaration +# 34| getDeclarationEntry(0): [VariableDeclarationEntry] definition of c +# 34| Type = [Class] ClassWithDestructor2 +# 34| getVariable().getInitializer(): [Initializer] initializer for c +# 34| getExpr(): [ConstructorCall] call to ClassWithDestructor2 +# 34| Type = [VoidType] void +# 34| ValueCategory = prvalue +# 35| getStmt(1): [DeclStmt] declaration +# 35| getDeclarationEntry(0): [VariableDeclarationEntry] definition of rs2 +# 35| Type = [LValueReferenceType] const ClassWithDestructor2 & +# 35| getVariable().getInitializer(): [Initializer] initializer for rs2 +# 35| getExpr(): [FunctionCall] call to returnValue +# 35| Type = [Class] ClassWithDestructor2 +# 35| ValueCategory = prvalue +# 35| getExpr().getFullyConverted(): [ReferenceToExpr] (reference to) +# 35| Type = [LValueReferenceType] const ClassWithDestructor2 & +# 35| ValueCategory = prvalue +# 35| getExpr(): [CStyleCast] (const ClassWithDestructor2)... +# 35| Conversion = [GlvalueConversion] glvalue conversion +# 35| Type = [SpecifiedType] const ClassWithDestructor2 +# 35| ValueCategory = lvalue +# 35| getExpr(): [TemporaryObjectExpr] temporary object +# 35| Type = [Class] ClassWithDestructor2 +# 35| ValueCategory = lvalue +# 36| getStmt(2): [ReturnStmt] return ... +# 36| getImplicitDestructorCall(0): [DestructorCall] call to ~ClassWithDestructor2 +# 36| Type = [VoidType] void +# 36| ValueCategory = prvalue +# 36| getQualifier(): [ReuseExpr] reuse of temporary object +# 36| Type = [Class] ClassWithDestructor2 +# 36| ValueCategory = xvalue +# 36| getImplicitDestructorCall(1): [DestructorCall] call to ~ClassWithDestructor2 +# 36| Type = [VoidType] void +# 36| ValueCategory = prvalue +# 36| getQualifier(): [VariableAccess] c +# 36| Type = [Class] ClassWithDestructor2 +# 36| ValueCategory = lvalue +# 38| [TopLevelFunction] void temp_test5(bool) +# 38| : +# 38| getParameter(0): [Parameter] b +# 38| Type = [BoolType] bool +# 38| getEntryPoint(): [BlockStmt] { ... } +# 39| getStmt(0): [ExprStmt] ExprStmt +# 39| getExpr(): [ConditionalExpr] ... ? ... : ... +# 39| Type = [Class] ClassWithDestructor2 +# 39| ValueCategory = prvalue +# 39| getCondition(): [VariableAccess] b +# 39| Type = [BoolType] bool +# 39| ValueCategory = prvalue(load) +# 39| getThen(): [ConstructorCall] call to ClassWithDestructor2 +# 39| Type = [VoidType] void +# 39| ValueCategory = prvalue +# 39| getElse(): [ConstructorCall] call to ClassWithDestructor2 +# 39| Type = [VoidType] void +# 39| ValueCategory = prvalue +# 39| getImplicitDestructorCall(0): [DestructorCall] call to ~ClassWithDestructor2 +# 39| Type = [VoidType] void +# 39| ValueCategory = prvalue +# 39| getQualifier(): [ReuseExpr] reuse of temporary object +# 39| Type = [Class] ClassWithDestructor2 +# 39| ValueCategory = xvalue +# 39| getThen().getFullyConverted(): [TemporaryObjectExpr] temporary object +# 39| Type = [Class] ClassWithDestructor2 +# 39| ValueCategory = prvalue(load) +# 39| getElse().getFullyConverted(): [TemporaryObjectExpr] temporary object +# 39| Type = [Class] ClassWithDestructor2 +# 39| ValueCategory = prvalue(load) +# 39| getExpr().getFullyConverted(): [TemporaryObjectExpr] temporary object +# 39| Type = [Class] ClassWithDestructor2 +# 39| ValueCategory = prvalue +# 40| getStmt(1): [ReturnStmt] return ... +# 42| [TopLevelFunction] void temp_test6(bool) +# 42| : +# 42| getParameter(0): [Parameter] b +# 42| Type = [BoolType] bool +# 42| getEntryPoint(): [BlockStmt] { ... } +# 43| getStmt(0): [ExprStmt] ExprStmt +# 43| getExpr(): [ConditionalExpr] ... ? ... : ... +# 43| Type = [PlainCharType] char +# 43| ValueCategory = prvalue +# 43| getCondition(): [VariableAccess] b +# 43| Type = [BoolType] bool +# 43| ValueCategory = prvalue(load) +# 43| getThen(): [FunctionCall] call to get_x +# 43| Type = [PlainCharType] char +# 43| ValueCategory = prvalue +# 43| getQualifier(): [ConstructorCall] call to ClassWithDestructor2 +# 43| Type = [VoidType] void +# 43| ValueCategory = prvalue +# 43| getQualifier().getFullyConverted(): [TemporaryObjectExpr] temporary object +# 43| Type = [Class] ClassWithDestructor2 +# 43| ValueCategory = prvalue(load) +# 43| getElse(): [FunctionCall] call to get_x +# 43| Type = [PlainCharType] char +# 43| ValueCategory = prvalue +# 43| getQualifier(): [ConstructorCall] call to ClassWithDestructor2 +# 43| Type = [VoidType] void +# 43| ValueCategory = prvalue +# 43| getQualifier().getFullyConverted(): [TemporaryObjectExpr] temporary object +# 43| Type = [Class] ClassWithDestructor2 +# 43| ValueCategory = prvalue(load) +# 43| getImplicitDestructorCall(0): [DestructorCall] call to ~ClassWithDestructor2 +# 43| Type = [VoidType] void +# 43| ValueCategory = prvalue +# 43| getQualifier(): [ReuseExpr] reuse of temporary object +# 43| Type = [Class] ClassWithDestructor2 +# 43| ValueCategory = xvalue +# 43| getImplicitDestructorCall(1): [DestructorCall] call to ~ClassWithDestructor2 +# 43| Type = [VoidType] void +# 43| ValueCategory = prvalue +# 43| getQualifier(): [ReuseExpr] reuse of temporary object +# 43| Type = [Class] ClassWithDestructor2 +# 43| ValueCategory = xvalue +# 44| getStmt(1): [ReturnStmt] return ... try_except.c: # 3| [TopLevelFunction] void ProbeFunction() # 3| : 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 510a271b7ace..c5d286543c74 100644 --- a/cpp/ql/test/library-tests/ir/ir/aliased_ir.expected +++ b/cpp/ql/test/library-tests/ir/ir/aliased_ir.expected @@ -4951,7 +4951,15 @@ ir.cpp: # 809| v809_21(void) = ^BufferReadSideEffect[0] : &:r809_16, ~m809_14 # 809| m809_22(Base) = ^IndirectMayWriteSideEffect[-1] : &:r809_1 # 809| m809_23(Base) = Chi : total:m808_12, partial:m809_22 -# 809| r809_24(glval) = CopyValue : r809_17 +# 809| r809_24(glval) = CopyValue : r809_3 +# 809| r809_25(glval) = FunctionAddress[~Base] : +# 809| v809_26(void) = Call[~Base] : func:r809_25, this:r809_24 +# 809| m809_27(unknown) = ^CallSideEffect : ~m809_19 +# 809| m809_28(unknown) = Chi : total:m809_19, partial:m809_27 +# 809| v809_29(void) = ^IndirectReadSideEffect[-1] : &:r809_24, m809_14 +# 809| m809_30(Base) = ^IndirectMayWriteSideEffect[-1] : &:r809_24 +# 809| m809_31(Base) = Chi : total:m809_14, partial:m809_30 +# 809| r809_32(glval) = CopyValue : r809_17 # 810| r810_1(glval) = VariableAddress[b] : # 810| r810_2(glval) = FunctionAddress[operator=] : # 810| r810_3(glval) = VariableAddress[#temp810:7] : @@ -4961,8 +4969,8 @@ ir.cpp: # 810| r810_7(glval) = ConvertToNonVirtualBase[Middle : Base] : r810_6 # 810| r810_8(Base &) = CopyValue : r810_7 # 810| v810_9(void) = Call[Base] : func:r810_5, this:r810_3, 0:r810_8 -# 810| m810_10(unknown) = ^CallSideEffect : ~m809_19 -# 810| m810_11(unknown) = Chi : total:m809_19, partial:m810_10 +# 810| m810_10(unknown) = ^CallSideEffect : ~m809_28 +# 810| m810_11(unknown) = Chi : total:m809_28, partial:m810_10 # 810| v810_12(void) = ^BufferReadSideEffect[0] : &:r810_8, ~m801_8 # 810| m810_13(Base) = ^IndirectMayWriteSideEffect[-1] : &:r810_3 # 810| m810_14(Base) = Chi : total:m810_4, partial:m810_13 @@ -4975,7 +4983,15 @@ ir.cpp: # 810| v810_21(void) = ^BufferReadSideEffect[0] : &:r810_16, ~m810_14 # 810| m810_22(Base) = ^IndirectMayWriteSideEffect[-1] : &:r810_1 # 810| m810_23(Base) = Chi : total:m809_23, partial:m810_22 -# 810| r810_24(glval) = CopyValue : r810_17 +# 810| r810_24(glval) = CopyValue : r810_3 +# 810| r810_25(glval) = FunctionAddress[~Base] : +# 810| v810_26(void) = Call[~Base] : func:r810_25, this:r810_24 +# 810| m810_27(unknown) = ^CallSideEffect : ~m810_19 +# 810| m810_28(unknown) = Chi : total:m810_19, partial:m810_27 +# 810| v810_29(void) = ^IndirectReadSideEffect[-1] : &:r810_24, m810_14 +# 810| m810_30(Base) = ^IndirectMayWriteSideEffect[-1] : &:r810_24 +# 810| m810_31(Base) = Chi : total:m810_14, partial:m810_30 +# 810| r810_32(glval) = CopyValue : r810_17 # 811| r811_1(glval) = VariableAddress[pm] : # 811| r811_2(Middle *) = Load[pm] : &:r811_1, m805_4 # 811| r811_3(Base *) = ConvertToNonVirtualBase[Middle : Base] : r811_2 @@ -5003,8 +5019,8 @@ ir.cpp: # 816| r816_5(glval) = Convert : r816_4 # 816| r816_6(Middle &) = CopyValue : r816_5 # 816| r816_7(Middle &) = Call[operator=] : func:r816_2, this:r816_1, 0:r816_6 -# 816| m816_8(unknown) = ^CallSideEffect : ~m810_19 -# 816| m816_9(unknown) = Chi : total:m810_19, partial:m816_8 +# 816| m816_8(unknown) = ^CallSideEffect : ~m810_28 +# 816| m816_9(unknown) = Chi : total:m810_28, partial:m816_8 # 816| v816_10(void) = ^IndirectReadSideEffect[-1] : &:r816_1, m801_8 # 816| v816_11(void) = ^BufferReadSideEffect[0] : &:r816_6, ~m810_23 # 816| m816_12(Middle) = ^IndirectMayWriteSideEffect[-1] : &:r816_1 @@ -5077,7 +5093,15 @@ ir.cpp: # 823| v823_22(void) = ^BufferReadSideEffect[0] : &:r823_17, ~m823_15 # 823| m823_23(Base) = ^IndirectMayWriteSideEffect[-1] : &:r823_1 # 823| m823_24(Base) = Chi : total:m822_13, partial:m823_23 -# 823| r823_25(glval) = CopyValue : r823_18 +# 823| r823_25(glval) = CopyValue : r823_3 +# 823| r823_26(glval) = FunctionAddress[~Base] : +# 823| v823_27(void) = Call[~Base] : func:r823_26, this:r823_25 +# 823| m823_28(unknown) = ^CallSideEffect : ~m823_20 +# 823| m823_29(unknown) = Chi : total:m823_20, partial:m823_28 +# 823| v823_30(void) = ^IndirectReadSideEffect[-1] : &:r823_25, m823_15 +# 823| m823_31(Base) = ^IndirectMayWriteSideEffect[-1] : &:r823_25 +# 823| m823_32(Base) = Chi : total:m823_15, partial:m823_31 +# 823| r823_33(glval) = CopyValue : r823_18 # 824| r824_1(glval) = VariableAddress[b] : # 824| r824_2(glval) = FunctionAddress[operator=] : # 824| r824_3(glval) = VariableAddress[#temp824:7] : @@ -5088,8 +5112,8 @@ ir.cpp: # 824| r824_8(glval) = ConvertToNonVirtualBase[Middle : Base] : r824_7 # 824| r824_9(Base &) = CopyValue : r824_8 # 824| v824_10(void) = Call[Base] : func:r824_5, this:r824_3, 0:r824_9 -# 824| m824_11(unknown) = ^CallSideEffect : ~m823_20 -# 824| m824_12(unknown) = Chi : total:m823_20, partial:m824_11 +# 824| m824_11(unknown) = ^CallSideEffect : ~m823_29 +# 824| m824_12(unknown) = Chi : total:m823_29, partial:m824_11 # 824| v824_13(void) = ^BufferReadSideEffect[0] : &:r824_9, ~m802_8 # 824| m824_14(Base) = ^IndirectMayWriteSideEffect[-1] : &:r824_3 # 824| m824_15(Base) = Chi : total:m824_4, partial:m824_14 @@ -5102,7 +5126,15 @@ ir.cpp: # 824| v824_22(void) = ^BufferReadSideEffect[0] : &:r824_17, ~m824_15 # 824| m824_23(Base) = ^IndirectMayWriteSideEffect[-1] : &:r824_1 # 824| m824_24(Base) = Chi : total:m823_24, partial:m824_23 -# 824| r824_25(glval) = CopyValue : r824_18 +# 824| r824_25(glval) = CopyValue : r824_3 +# 824| r824_26(glval) = FunctionAddress[~Base] : +# 824| v824_27(void) = Call[~Base] : func:r824_26, this:r824_25 +# 824| m824_28(unknown) = ^CallSideEffect : ~m824_20 +# 824| m824_29(unknown) = Chi : total:m824_20, partial:m824_28 +# 824| v824_30(void) = ^IndirectReadSideEffect[-1] : &:r824_25, m824_15 +# 824| m824_31(Base) = ^IndirectMayWriteSideEffect[-1] : &:r824_25 +# 824| m824_32(Base) = Chi : total:m824_15, partial:m824_31 +# 824| r824_33(glval) = CopyValue : r824_18 # 825| r825_1(glval) = VariableAddress[pd] : # 825| r825_2(Derived *) = Load[pd] : &:r825_1, m806_4 # 825| r825_3(Middle *) = ConvertToNonVirtualBase[Derived : Middle] : r825_2 @@ -5134,8 +5166,8 @@ ir.cpp: # 830| r830_6(glval) = Convert : r830_5 # 830| r830_7(Derived &) = CopyValue : r830_6 # 830| r830_8(Derived &) = Call[operator=] : func:r830_2, this:r830_1, 0:r830_7 -# 830| m830_9(unknown) = ^CallSideEffect : ~m824_20 -# 830| m830_10(unknown) = Chi : total:m824_20, partial:m830_9 +# 830| m830_9(unknown) = ^CallSideEffect : ~m824_29 +# 830| m830_10(unknown) = Chi : total:m824_29, partial:m830_9 # 830| v830_11(void) = ^IndirectReadSideEffect[-1] : &:r830_1, m802_8 # 830| v830_12(void) = ^BufferReadSideEffect[0] : &:r830_7, ~m824_24 # 830| m830_13(Derived) = ^IndirectMayWriteSideEffect[-1] : &:r830_1 @@ -8309,6 +8341,14 @@ ir.cpp: # 1372| m1372_15(unknown) = ^CallSideEffect : ~m1372_9 # 1372| m1372_16(unknown) = Chi : total:m1372_9, partial:m1372_15 # 1372| v1372_17(void) = ^BufferReadSideEffect[0] : &:r1372_13, ~m1372_12 +# 1372| r1372_18(glval) = CopyValue : r1372_2 +# 1372| r1372_19(glval) = FunctionAddress[~String] : +# 1372| v1372_20(void) = Call[~String] : func:r1372_19, this:r1372_18 +# 1372| m1372_21(unknown) = ^CallSideEffect : ~m1372_16 +# 1372| m1372_22(unknown) = Chi : total:m1372_16, partial:m1372_21 +# 1372| v1372_23(void) = ^IndirectReadSideEffect[-1] : &:r1372_18, m1372_12 +# 1372| m1372_24(String) = ^IndirectMayWriteSideEffect[-1] : &:r1372_18 +# 1372| m1372_25(String) = Chi : total:m1372_12, partial:m1372_24 # 1373| r1373_1(glval) = FunctionAddress[acceptValue] : # 1373| r1373_2(glval) = VariableAddress[#temp1373:17] : # 1373| m1373_3(String) = Uninitialized[#temp1373:17] : &:r1373_2 @@ -8317,8 +8357,8 @@ ir.cpp: # 1373| r1373_6(glval) = Convert : r1373_5 # 1373| r1373_7(String &) = CopyValue : r1373_6 # 1373| v1373_8(void) = Call[String] : func:r1373_4, this:r1373_2, 0:r1373_7 -# 1373| m1373_9(unknown) = ^CallSideEffect : ~m1372_16 -# 1373| m1373_10(unknown) = Chi : total:m1372_16, partial:m1373_9 +# 1373| m1373_9(unknown) = ^CallSideEffect : ~m1372_22 +# 1373| m1373_10(unknown) = Chi : total:m1372_22, partial:m1373_9 # 1373| v1373_11(void) = ^BufferReadSideEffect[0] : &:r1373_7, ~m1368_6 # 1373| m1373_12(String) = ^IndirectMayWriteSideEffect[-1] : &:r1373_2 # 1373| m1373_13(String) = Chi : total:m1373_3, partial:m1373_12 @@ -8326,6 +8366,14 @@ ir.cpp: # 1373| v1373_15(void) = Call[acceptValue] : func:r1373_1, 0:r1373_14 # 1373| m1373_16(unknown) = ^CallSideEffect : ~m1373_10 # 1373| m1373_17(unknown) = Chi : total:m1373_10, partial:m1373_16 +# 1373| r1373_18(glval) = CopyValue : r1373_2 +# 1373| r1373_19(glval) = FunctionAddress[~String] : +# 1373| v1373_20(void) = Call[~String] : func:r1373_19, this:r1373_18 +# 1373| m1373_21(unknown) = ^CallSideEffect : ~m1373_17 +# 1373| m1373_22(unknown) = Chi : total:m1373_17, partial:m1373_21 +# 1373| v1373_23(void) = ^IndirectReadSideEffect[-1] : &:r1373_18, m1373_13 +# 1373| m1373_24(String) = ^IndirectMayWriteSideEffect[-1] : &:r1373_18 +# 1373| m1373_25(String) = Chi : total:m1373_13, partial:m1373_24 # 1374| r1374_1(glval) = FunctionAddress[acceptValue] : # 1374| r1374_2(glval) = VariableAddress[#temp1374:25] : # 1374| m1374_3(String) = Uninitialized[#temp1374:25] : &:r1374_2 @@ -8333,8 +8381,8 @@ ir.cpp: # 1374| r1374_5(glval) = StringConstant["foo"] : # 1374| r1374_6(char *) = Convert : r1374_5 # 1374| v1374_7(void) = Call[String] : func:r1374_4, this:r1374_2, 0:r1374_6 -# 1374| m1374_8(unknown) = ^CallSideEffect : ~m1373_17 -# 1374| m1374_9(unknown) = Chi : total:m1373_17, partial:m1374_8 +# 1374| m1374_8(unknown) = ^CallSideEffect : ~m1373_22 +# 1374| m1374_9(unknown) = Chi : total:m1373_22, partial:m1374_8 # 1374| v1374_10(void) = ^BufferReadSideEffect[0] : &:r1374_6, ~m1367_3 # 1374| m1374_11(String) = ^IndirectMayWriteSideEffect[-1] : &:r1374_2 # 1374| m1374_12(String) = Chi : total:m1374_3, partial:m1374_11 @@ -8342,12 +8390,20 @@ ir.cpp: # 1374| v1374_14(void) = Call[acceptValue] : func:r1374_1, 0:r1374_13 # 1374| m1374_15(unknown) = ^CallSideEffect : ~m1374_9 # 1374| m1374_16(unknown) = Chi : total:m1374_9, partial:m1374_15 +# 1374| r1374_17(glval) = CopyValue : r1374_2 +# 1374| r1374_18(glval) = FunctionAddress[~String] : +# 1374| v1374_19(void) = Call[~String] : func:r1374_18, this:r1374_17 +# 1374| m1374_20(unknown) = ^CallSideEffect : ~m1374_16 +# 1374| m1374_21(unknown) = Chi : total:m1374_16, partial:m1374_20 +# 1374| v1374_22(void) = ^IndirectReadSideEffect[-1] : &:r1374_17, m1374_12 +# 1374| m1374_23(String) = ^IndirectMayWriteSideEffect[-1] : &:r1374_17 +# 1374| m1374_24(String) = Chi : total:m1374_12, partial:m1374_23 # 1375| r1375_1(glval) = VariableAddress[#temp1375:5] : # 1375| m1375_2(String) = Uninitialized[#temp1375:5] : &:r1375_1 # 1375| r1375_3(glval) = FunctionAddress[String] : # 1375| v1375_4(void) = Call[String] : func:r1375_3, this:r1375_1 -# 1375| m1375_5(unknown) = ^CallSideEffect : ~m1374_16 -# 1375| m1375_6(unknown) = Chi : total:m1374_16, partial:m1375_5 +# 1375| m1375_5(unknown) = ^CallSideEffect : ~m1374_21 +# 1375| m1375_6(unknown) = Chi : total:m1374_21, partial:m1375_5 # 1375| m1375_7(String) = ^IndirectMayWriteSideEffect[-1] : &:r1375_1 # 1375| m1375_8(String) = Chi : total:m1375_2, partial:m1375_7 # 1375| r1375_9(glval) = Convert : r1375_1 @@ -8356,11 +8412,19 @@ ir.cpp: # 1375| m1375_12(unknown) = ^CallSideEffect : ~m1375_6 # 1375| m1375_13(unknown) = Chi : total:m1375_6, partial:m1375_12 # 1375| v1375_14(void) = ^IndirectReadSideEffect[-1] : &:r1375_9, m1375_8 +# 1375| r1375_15(glval) = CopyValue : r1375_1 +# 1375| r1375_16(glval) = FunctionAddress[~String] : +# 1375| v1375_17(void) = Call[~String] : func:r1375_16, this:r1375_15 +# 1375| m1375_18(unknown) = ^CallSideEffect : ~m1375_13 +# 1375| m1375_19(unknown) = Chi : total:m1375_13, partial:m1375_18 +# 1375| v1375_20(void) = ^IndirectReadSideEffect[-1] : &:r1375_15, m1375_8 +# 1375| m1375_21(String) = ^IndirectMayWriteSideEffect[-1] : &:r1375_15 +# 1375| m1375_22(String) = Chi : total:m1375_8, partial:m1375_21 # 1376| r1376_1(glval) = VariableAddress[#temp1376:5] : # 1376| r1376_2(glval) = FunctionAddress[returnValue] : # 1376| r1376_3(String) = Call[returnValue] : func:r1376_2 -# 1376| m1376_4(unknown) = ^CallSideEffect : ~m1375_13 -# 1376| m1376_5(unknown) = Chi : total:m1375_13, partial:m1376_4 +# 1376| m1376_4(unknown) = ^CallSideEffect : ~m1375_19 +# 1376| m1376_5(unknown) = Chi : total:m1375_19, partial:m1376_4 # 1376| m1376_6(String) = Store[#temp1376:5] : &:r1376_1, r1376_3 # 1376| r1376_7(glval) = Convert : r1376_1 # 1376| r1376_8(glval) = FunctionAddress[c_str] : @@ -8368,23 +8432,47 @@ ir.cpp: # 1376| m1376_10(unknown) = ^CallSideEffect : ~m1376_5 # 1376| m1376_11(unknown) = Chi : total:m1376_5, partial:m1376_10 # 1376| v1376_12(void) = ^IndirectReadSideEffect[-1] : &:r1376_7, m1376_6 +# 1376| r1376_13(glval) = CopyValue : r1376_1 +# 1376| r1376_14(glval) = FunctionAddress[~String] : +# 1376| v1376_15(void) = Call[~String] : func:r1376_14, this:r1376_13 +# 1376| m1376_16(unknown) = ^CallSideEffect : ~m1376_11 +# 1376| m1376_17(unknown) = Chi : total:m1376_11, partial:m1376_16 +# 1376| v1376_18(void) = ^IndirectReadSideEffect[-1] : &:r1376_13, m1376_6 +# 1376| m1376_19(String) = ^IndirectMayWriteSideEffect[-1] : &:r1376_13 +# 1376| m1376_20(String) = Chi : total:m1376_6, partial:m1376_19 # 1378| r1378_1(glval) = VariableAddress[#temp1378:5] : # 1378| r1378_2(glval) = FunctionAddress[defaultConstruct] : # 1378| r1378_3(String) = Call[defaultConstruct] : func:r1378_2 -# 1378| m1378_4(unknown) = ^CallSideEffect : ~m1376_11 -# 1378| m1378_5(unknown) = Chi : total:m1376_11, partial:m1378_4 -# 1378| m1378_6(String) = Store[#temp1378:5] : &:r1378_1, r1378_3 +# 1378| m1378_4(unknown) = ^CallSideEffect : ~m1376_17 +# 1378| m1378_5(unknown) = Chi : total:m1376_17, partial:m1378_4 +# 1378| r1378_6(glval) = CopyValue : r1378_1 +# 1378| r1378_7(glval) = FunctionAddress[~String] : +# 1378| v1378_8(void) = Call[~String] : func:r1378_7, this:r1378_6 +# 1378| m1378_9(unknown) = ^CallSideEffect : ~m1378_5 +# 1378| m1378_10(unknown) = Chi : total:m1378_5, partial:m1378_9 +# 1378| v1378_11(void) = ^IndirectReadSideEffect[-1] : &:r1378_6, ~m? +# 1378| m1378_12(String) = ^IndirectMayWriteSideEffect[-1] : &:r1378_6 +# 1378| m1378_13(String) = Chi : total:~m?, partial:m1378_12 +# 1378| m1378_14(String) = Store[#temp1378:5] : &:r1378_1, r1378_3 # 1379| v1379_1(void) = NoOp : -# 1379| r1379_2(glval) = VariableAddress[s] : +# 1379| r1379_2(glval) = CopyValue : r1369_2 # 1379| r1379_3(glval) = FunctionAddress[~String] : # 1379| v1379_4(void) = Call[~String] : func:r1379_3, this:r1379_2 -# 1379| m1379_5(unknown) = ^CallSideEffect : ~m1378_5 -# 1379| m1379_6(unknown) = Chi : total:m1378_5, partial:m1379_5 -# 1379| v1379_7(void) = ^IndirectReadSideEffect[-1] : &:r1379_2, m1368_6 +# 1379| m1379_5(unknown) = ^CallSideEffect : ~m1378_10 +# 1379| m1379_6(unknown) = Chi : total:m1378_10, partial:m1379_5 +# 1379| v1379_7(void) = ^IndirectReadSideEffect[-1] : &:r1379_2, m1369_7 # 1379| m1379_8(String) = ^IndirectMayWriteSideEffect[-1] : &:r1379_2 -# 1379| m1379_9(String) = Chi : total:m1368_6, partial:m1379_8 +# 1379| m1379_9(String) = Chi : total:m1369_7, partial:m1379_8 +# 1379| r1379_10(glval) = VariableAddress[s] : +# 1379| r1379_11(glval) = FunctionAddress[~String] : +# 1379| v1379_12(void) = Call[~String] : func:r1379_11, this:r1379_10 +# 1379| m1379_13(unknown) = ^CallSideEffect : ~m1379_6 +# 1379| m1379_14(unknown) = Chi : total:m1379_6, partial:m1379_13 +# 1379| v1379_15(void) = ^IndirectReadSideEffect[-1] : &:r1379_10, m1368_6 +# 1379| m1379_16(String) = ^IndirectMayWriteSideEffect[-1] : &:r1379_10 +# 1379| m1379_17(String) = Chi : total:m1368_6, partial:m1379_16 # 1367| v1367_5(void) = ReturnVoid : -# 1367| v1367_6(void) = AliasedUse : ~m1379_6 +# 1367| v1367_6(void) = AliasedUse : ~m1379_14 # 1367| v1367_7(void) = ExitFunction : # 1381| void temporary_destructor_only() @@ -8428,21 +8516,37 @@ ir.cpp: # 1386| v1386_7(void) = Call[acceptValue] : func:r1386_1, 0:r1386_6 # 1386| m1386_8(unknown) = ^CallSideEffect : ~m1385_7 # 1386| m1386_9(unknown) = Chi : total:m1385_7, partial:m1386_8 +# 1386| r1386_10(glval) = CopyValue : r1386_2 +# 1386| r1386_11(glval) = FunctionAddress[~destructor_only] : +# 1386| v1386_12(void) = Call[~destructor_only] : func:r1386_11, this:r1386_10 +# 1386| m1386_13(unknown) = ^CallSideEffect : ~m1386_9 +# 1386| m1386_14(unknown) = Chi : total:m1386_9, partial:m1386_13 +# 1386| v1386_15(void) = ^IndirectReadSideEffect[-1] : &:r1386_10, m1386_5 +# 1386| m1386_16(destructor_only) = ^IndirectMayWriteSideEffect[-1] : &:r1386_10 +# 1386| m1386_17(destructor_only) = Chi : total:m1386_5, partial:m1386_16 # 1387| r1387_1(glval) = VariableAddress[#temp1387:5] : # 1387| r1387_2(destructor_only) = Constant[0] : # 1387| m1387_3(destructor_only) = Store[#temp1387:5] : &:r1387_1, r1387_2 # 1387| r1387_4(glval) = FunctionAddress[method] : # 1387| v1387_5(void) = Call[method] : func:r1387_4, this:r1387_1 -# 1387| m1387_6(unknown) = ^CallSideEffect : ~m1386_9 -# 1387| m1387_7(unknown) = Chi : total:m1386_9, partial:m1387_6 +# 1387| m1387_6(unknown) = ^CallSideEffect : ~m1386_14 +# 1387| m1387_7(unknown) = Chi : total:m1386_14, partial:m1387_6 # 1387| v1387_8(void) = ^IndirectReadSideEffect[-1] : &:r1387_1, m1387_3 # 1387| m1387_9(destructor_only) = ^IndirectMayWriteSideEffect[-1] : &:r1387_1 # 1387| m1387_10(destructor_only) = Chi : total:m1387_3, partial:m1387_9 +# 1387| r1387_11(glval) = CopyValue : r1387_1 +# 1387| r1387_12(glval) = FunctionAddress[~destructor_only] : +# 1387| v1387_13(void) = Call[~destructor_only] : func:r1387_12, this:r1387_11 +# 1387| m1387_14(unknown) = ^CallSideEffect : ~m1387_7 +# 1387| m1387_15(unknown) = Chi : total:m1387_7, partial:m1387_14 +# 1387| v1387_16(void) = ^IndirectReadSideEffect[-1] : &:r1387_11, m1387_10 +# 1387| m1387_17(destructor_only) = ^IndirectMayWriteSideEffect[-1] : &:r1387_11 +# 1387| m1387_18(destructor_only) = Chi : total:m1387_10, partial:m1387_17 # 1388| r1388_1(glval) = VariableAddress[#temp1388:5] : # 1388| r1388_2(glval) = FunctionAddress[returnValue] : # 1388| r1388_3(destructor_only) = Call[returnValue] : func:r1388_2 -# 1388| m1388_4(unknown) = ^CallSideEffect : ~m1387_7 -# 1388| m1388_5(unknown) = Chi : total:m1387_7, partial:m1388_4 +# 1388| m1388_4(unknown) = ^CallSideEffect : ~m1387_15 +# 1388| m1388_5(unknown) = Chi : total:m1387_15, partial:m1388_4 # 1388| m1388_6(destructor_only) = Store[#temp1388:5] : &:r1388_1, r1388_3 # 1388| r1388_7(glval) = FunctionAddress[method] : # 1388| v1388_8(void) = Call[method] : func:r1388_7, this:r1388_1 @@ -8451,31 +8555,55 @@ ir.cpp: # 1388| v1388_11(void) = ^IndirectReadSideEffect[-1] : &:r1388_1, m1388_6 # 1388| m1388_12(destructor_only) = ^IndirectMayWriteSideEffect[-1] : &:r1388_1 # 1388| m1388_13(destructor_only) = Chi : total:m1388_6, partial:m1388_12 +# 1388| r1388_14(glval) = CopyValue : r1388_1 +# 1388| r1388_15(glval) = FunctionAddress[~destructor_only] : +# 1388| v1388_16(void) = Call[~destructor_only] : func:r1388_15, this:r1388_14 +# 1388| m1388_17(unknown) = ^CallSideEffect : ~m1388_10 +# 1388| m1388_18(unknown) = Chi : total:m1388_10, partial:m1388_17 +# 1388| v1388_19(void) = ^IndirectReadSideEffect[-1] : &:r1388_14, m1388_13 +# 1388| m1388_20(destructor_only) = ^IndirectMayWriteSideEffect[-1] : &:r1388_14 +# 1388| m1388_21(destructor_only) = Chi : total:m1388_13, partial:m1388_20 # 1390| r1390_1(glval) = VariableAddress[#temp1390:5] : # 1390| r1390_2(glval) = FunctionAddress[defaultConstruct] : # 1390| r1390_3(destructor_only) = Call[defaultConstruct] : func:r1390_2 -# 1390| m1390_4(unknown) = ^CallSideEffect : ~m1388_10 -# 1390| m1390_5(unknown) = Chi : total:m1388_10, partial:m1390_4 -# 1390| m1390_6(destructor_only) = Store[#temp1390:5] : &:r1390_1, r1390_3 +# 1390| m1390_4(unknown) = ^CallSideEffect : ~m1388_18 +# 1390| m1390_5(unknown) = Chi : total:m1388_18, partial:m1390_4 +# 1390| r1390_6(glval) = CopyValue : r1390_1 +# 1390| r1390_7(glval) = FunctionAddress[~destructor_only] : +# 1390| v1390_8(void) = Call[~destructor_only] : func:r1390_7, this:r1390_6 +# 1390| m1390_9(unknown) = ^CallSideEffect : ~m1390_5 +# 1390| m1390_10(unknown) = Chi : total:m1390_5, partial:m1390_9 +# 1390| v1390_11(void) = ^IndirectReadSideEffect[-1] : &:r1390_6, ~m? +# 1390| m1390_12(destructor_only) = ^IndirectMayWriteSideEffect[-1] : &:r1390_6 +# 1390| m1390_13(destructor_only) = Chi : total:~m?, partial:m1390_12 +# 1390| m1390_14(destructor_only) = Store[#temp1390:5] : &:r1390_1, r1390_3 # 1391| v1391_1(void) = NoOp : # 1391| r1391_2(glval) = VariableAddress[d2] : # 1391| r1391_3(glval) = FunctionAddress[~destructor_only] : # 1391| v1391_4(void) = Call[~destructor_only] : func:r1391_3, this:r1391_2 -# 1391| m1391_5(unknown) = ^CallSideEffect : ~m1390_5 -# 1391| m1391_6(unknown) = Chi : total:m1390_5, partial:m1391_5 +# 1391| m1391_5(unknown) = ^CallSideEffect : ~m1390_10 +# 1391| m1391_6(unknown) = Chi : total:m1390_10, partial:m1391_5 # 1391| v1391_7(void) = ^IndirectReadSideEffect[-1] : &:r1391_2, m1384_2 # 1391| m1391_8(destructor_only) = ^IndirectMayWriteSideEffect[-1] : &:r1391_2 # 1391| m1391_9(destructor_only) = Chi : total:m1384_2, partial:m1391_8 -# 1391| r1391_10(glval) = VariableAddress[d] : +# 1391| r1391_10(glval) = CopyValue : r1383_2 # 1391| r1391_11(glval) = FunctionAddress[~destructor_only] : # 1391| v1391_12(void) = Call[~destructor_only] : func:r1391_11, this:r1391_10 # 1391| m1391_13(unknown) = ^CallSideEffect : ~m1391_6 # 1391| m1391_14(unknown) = Chi : total:m1391_6, partial:m1391_13 -# 1391| v1391_15(void) = ^IndirectReadSideEffect[-1] : &:r1391_10, m1382_6 +# 1391| v1391_15(void) = ^IndirectReadSideEffect[-1] : &:r1391_10, m1383_7 # 1391| m1391_16(destructor_only) = ^IndirectMayWriteSideEffect[-1] : &:r1391_10 -# 1391| m1391_17(destructor_only) = Chi : total:m1382_6, partial:m1391_16 +# 1391| m1391_17(destructor_only) = Chi : total:m1383_7, partial:m1391_16 +# 1391| r1391_18(glval) = VariableAddress[d] : +# 1391| r1391_19(glval) = FunctionAddress[~destructor_only] : +# 1391| v1391_20(void) = Call[~destructor_only] : func:r1391_19, this:r1391_18 +# 1391| m1391_21(unknown) = ^CallSideEffect : ~m1391_14 +# 1391| m1391_22(unknown) = Chi : total:m1391_14, partial:m1391_21 +# 1391| v1391_23(void) = ^IndirectReadSideEffect[-1] : &:r1391_18, m1382_6 +# 1391| m1391_24(destructor_only) = ^IndirectMayWriteSideEffect[-1] : &:r1391_18 +# 1391| m1391_25(destructor_only) = Chi : total:m1382_6, partial:m1391_24 # 1381| v1381_5(void) = ReturnVoid : -# 1381| v1381_6(void) = AliasedUse : ~m1391_14 +# 1381| v1381_6(void) = AliasedUse : ~m1391_22 # 1381| v1381_7(void) = ExitFunction : # 1393| void temporary_copy_constructor() @@ -11912,162 +12040,186 @@ ir.cpp: #-----| Goto -> Block 1 # 2021| Block 4 -# 2021| m2021_7(unknown) = Phi : from 5:~m2021_30, from 6:~m2021_42 -# 2021| m2021_8(TernaryNonPodObj) = Phi : from 5:m2021_36, from 6:m2021_47 -# 2021| r2021_9(glval) = VariableAddress[#temp2021:9] : -# 2021| r2021_10(TernaryNonPodObj) = Load[#temp2021:9] : &:r2021_9, m2021_8 -# 2021| m2021_11(TernaryNonPodObj) = Store[#temp2021:9] : &:r2021_3, r2021_10 -# 2021| r2021_12(glval) = Convert : r2021_3 -# 2021| r2021_13(TernaryNonPodObj &) = CopyValue : r2021_12 -# 2021| r2021_14(TernaryNonPodObj &) = Call[operator=] : func:r2021_2, this:r2021_1, 0:r2021_13 -# 2021| m2021_15(unknown) = ^CallSideEffect : ~m2021_7 -# 2021| m2021_16(unknown) = Chi : total:m2021_7, partial:m2021_15 -# 2021| v2021_17(void) = ^IndirectReadSideEffect[-1] : &:r2021_1, m2020_17 -# 2021| v2021_18(void) = ^BufferReadSideEffect[0] : &:r2021_13, ~m2021_11 -# 2021| m2021_19(TernaryNonPodObj) = ^IndirectMayWriteSideEffect[-1] : &:r2021_1 -# 2021| m2021_20(TernaryNonPodObj) = Chi : total:m2020_17, partial:m2021_19 -# 2021| r2021_21(glval) = CopyValue : r2021_14 -# 2022| r2022_1(glval) = VariableAddress[z] : -# 2022| r2022_2(glval) = FunctionAddress[operator=] : -# 2022| r2022_3(glval) = VariableAddress[#temp2022:9] : -# 2022| r2022_4(glval) = VariableAddress[a] : -# 2022| r2022_5(bool) = Load[a] : &:r2022_4, m2019_6 -# 2022| v2022_6(void) = ConditionalBranch : r2022_5 +# 2021| m2021_7(unknown) = Phi : from 5:~m2021_38, from 6:~m2021_50 +# 2021| m2021_8(TernaryNonPodObj) = Phi : from 5:m2021_44, from 6:m2021_55 +# 2021| r2021_9(glval) = VariableAddress[#temp2021:9] : +# 2021| r2021_10(TernaryNonPodObj) = Load[#temp2021:9] : &:r2021_9, m2021_8 +# 2021| m2021_11(TernaryNonPodObj) = Store[#temp2021:9] : &:r2021_3, r2021_10 +# 2021| r2021_12(glval) = Convert : r2021_3 +# 2021| r2021_13(TernaryNonPodObj &) = CopyValue : r2021_12 +# 2021| r2021_14(TernaryNonPodObj &) = Call[operator=] : func:r2021_2, this:r2021_1, 0:r2021_13 +# 2021| m2021_15(unknown) = ^CallSideEffect : ~m2021_7 +# 2021| m2021_16(unknown) = Chi : total:m2021_7, partial:m2021_15 +# 2021| v2021_17(void) = ^IndirectReadSideEffect[-1] : &:r2021_1, m2020_17 +# 2021| v2021_18(void) = ^BufferReadSideEffect[0] : &:r2021_13, ~m2021_11 +# 2021| m2021_19(TernaryNonPodObj) = ^IndirectMayWriteSideEffect[-1] : &:r2021_1 +# 2021| m2021_20(TernaryNonPodObj) = Chi : total:m2020_17, partial:m2021_19 +# 2021| r2021_21(glval) = CopyValue : r2021_3 +# 2021| r2021_22(glval) = FunctionAddress[~TernaryNonPodObj] : +# 2021| v2021_23(void) = Call[~TernaryNonPodObj] : func:r2021_22, this:r2021_21 +# 2021| m2021_24(unknown) = ^CallSideEffect : ~m2021_16 +# 2021| m2021_25(unknown) = Chi : total:m2021_16, partial:m2021_24 +# 2021| v2021_26(void) = ^IndirectReadSideEffect[-1] : &:r2021_21, m2021_11 +# 2021| m2021_27(TernaryNonPodObj) = ^IndirectMayWriteSideEffect[-1] : &:r2021_21 +# 2021| m2021_28(TernaryNonPodObj) = Chi : total:m2021_11, partial:m2021_27 +# 2021| r2021_29(glval) = CopyValue : r2021_14 +# 2022| r2022_1(glval) = VariableAddress[z] : +# 2022| r2022_2(glval) = FunctionAddress[operator=] : +# 2022| r2022_3(glval) = VariableAddress[#temp2022:9] : +# 2022| r2022_4(glval) = VariableAddress[a] : +# 2022| r2022_5(bool) = Load[a] : &:r2022_4, m2019_6 +# 2022| v2022_6(void) = ConditionalBranch : r2022_5 #-----| False -> Block 9 #-----| True -> Block 8 # 2021| Block 5 -# 2021| r2021_22(glval) = VariableAddress[#temp2021:13] : -# 2021| m2021_23(TernaryNonPodObj) = Uninitialized[#temp2021:13] : &:r2021_22 -# 2021| r2021_24(glval) = FunctionAddress[TernaryNonPodObj] : -# 2021| r2021_25(glval) = VariableAddress[x] : -# 2021| r2021_26(glval) = Convert : r2021_25 -# 2021| r2021_27(TernaryNonPodObj &) = CopyValue : r2021_26 -# 2021| v2021_28(void) = Call[TernaryNonPodObj] : func:r2021_24, this:r2021_22, 0:r2021_27 -# 2021| m2021_29(unknown) = ^CallSideEffect : ~m2020_13 -# 2021| m2021_30(unknown) = Chi : total:m2020_13, partial:m2021_29 -# 2021| v2021_31(void) = ^BufferReadSideEffect[0] : &:r2021_27, ~m2019_8 -# 2021| m2021_32(TernaryNonPodObj) = ^IndirectMayWriteSideEffect[-1] : &:r2021_22 -# 2021| m2021_33(TernaryNonPodObj) = Chi : total:m2021_23, partial:m2021_32 -# 2021| r2021_34(TernaryNonPodObj) = Load[#temp2021:13] : &:r2021_22, m2021_33 -# 2021| r2021_35(glval) = VariableAddress[#temp2021:9] : -# 2021| m2021_36(TernaryNonPodObj) = Store[#temp2021:9] : &:r2021_35, r2021_34 +# 2021| r2021_30(glval) = VariableAddress[#temp2021:13] : +# 2021| m2021_31(TernaryNonPodObj) = Uninitialized[#temp2021:13] : &:r2021_30 +# 2021| r2021_32(glval) = FunctionAddress[TernaryNonPodObj] : +# 2021| r2021_33(glval) = VariableAddress[x] : +# 2021| r2021_34(glval) = Convert : r2021_33 +# 2021| r2021_35(TernaryNonPodObj &) = CopyValue : r2021_34 +# 2021| v2021_36(void) = Call[TernaryNonPodObj] : func:r2021_32, this:r2021_30, 0:r2021_35 +# 2021| m2021_37(unknown) = ^CallSideEffect : ~m2020_13 +# 2021| m2021_38(unknown) = Chi : total:m2020_13, partial:m2021_37 +# 2021| v2021_39(void) = ^BufferReadSideEffect[0] : &:r2021_35, ~m2019_8 +# 2021| m2021_40(TernaryNonPodObj) = ^IndirectMayWriteSideEffect[-1] : &:r2021_30 +# 2021| m2021_41(TernaryNonPodObj) = Chi : total:m2021_31, partial:m2021_40 +# 2021| r2021_42(TernaryNonPodObj) = Load[#temp2021:13] : &:r2021_30, m2021_41 +# 2021| r2021_43(glval) = VariableAddress[#temp2021:9] : +# 2021| m2021_44(TernaryNonPodObj) = Store[#temp2021:9] : &:r2021_43, r2021_42 #-----| Goto -> Block 4 # 2021| Block 6 -# 2021| r2021_37(glval) = VariableAddress[#temp2021:17] : -# 2021| m2021_38(TernaryNonPodObj) = Uninitialized[#temp2021:17] : &:r2021_37 -# 2021| r2021_39(glval) = FunctionAddress[TernaryNonPodObj] : -# 2021| v2021_40(void) = Call[TernaryNonPodObj] : func:r2021_39, this:r2021_37 -# 2021| m2021_41(unknown) = ^CallSideEffect : ~m2020_13 -# 2021| m2021_42(unknown) = Chi : total:m2020_13, partial:m2021_41 -# 2021| m2021_43(TernaryNonPodObj) = ^IndirectMayWriteSideEffect[-1] : &:r2021_37 -# 2021| m2021_44(TernaryNonPodObj) = Chi : total:m2021_38, partial:m2021_43 -# 2021| r2021_45(TernaryNonPodObj) = Load[#temp2021:17] : &:r2021_37, m2021_44 -# 2021| r2021_46(glval) = VariableAddress[#temp2021:9] : -# 2021| m2021_47(TernaryNonPodObj) = Store[#temp2021:9] : &:r2021_46, r2021_45 +# 2021| r2021_45(glval) = VariableAddress[#temp2021:17] : +# 2021| m2021_46(TernaryNonPodObj) = Uninitialized[#temp2021:17] : &:r2021_45 +# 2021| r2021_47(glval) = FunctionAddress[TernaryNonPodObj] : +# 2021| v2021_48(void) = Call[TernaryNonPodObj] : func:r2021_47, this:r2021_45 +# 2021| m2021_49(unknown) = ^CallSideEffect : ~m2020_13 +# 2021| m2021_50(unknown) = Chi : total:m2020_13, partial:m2021_49 +# 2021| m2021_51(TernaryNonPodObj) = ^IndirectMayWriteSideEffect[-1] : &:r2021_45 +# 2021| m2021_52(TernaryNonPodObj) = Chi : total:m2021_46, partial:m2021_51 +# 2021| r2021_53(TernaryNonPodObj) = Load[#temp2021:17] : &:r2021_45, m2021_52 +# 2021| r2021_54(glval) = VariableAddress[#temp2021:9] : +# 2021| m2021_55(TernaryNonPodObj) = Store[#temp2021:9] : &:r2021_54, r2021_53 #-----| Goto -> Block 4 # 2022| Block 7 -# 2022| m2022_7(unknown) = Phi : from 8:~m2022_27, from 9:~m2022_38 -# 2022| m2022_8(TernaryNonPodObj) = Phi : from 8:m2022_32, from 9:m2022_43 -# 2022| r2022_9(glval) = VariableAddress[#temp2022:9] : -# 2022| r2022_10(TernaryNonPodObj) = Load[#temp2022:9] : &:r2022_9, m2022_8 -# 2022| m2022_11(TernaryNonPodObj) = Store[#temp2022:9] : &:r2022_3, r2022_10 -# 2022| r2022_12(glval) = Convert : r2022_3 -# 2022| r2022_13(TernaryNonPodObj &) = CopyValue : r2022_12 -# 2022| r2022_14(TernaryNonPodObj &) = Call[operator=] : func:r2022_2, this:r2022_1, 0:r2022_13 -# 2022| m2022_15(unknown) = ^CallSideEffect : ~m2022_7 -# 2022| m2022_16(unknown) = Chi : total:m2022_7, partial:m2022_15 -# 2022| v2022_17(void) = ^IndirectReadSideEffect[-1] : &:r2022_1, m2021_20 -# 2022| v2022_18(void) = ^BufferReadSideEffect[0] : &:r2022_13, ~m2022_11 -# 2022| m2022_19(TernaryNonPodObj) = ^IndirectMayWriteSideEffect[-1] : &:r2022_1 -# 2022| m2022_20(TernaryNonPodObj) = Chi : total:m2021_20, partial:m2022_19 -# 2022| r2022_21(glval) = CopyValue : r2022_14 -# 2023| r2023_1(glval) = VariableAddress[z] : -# 2023| r2023_2(glval) = FunctionAddress[operator=] : -# 2023| r2023_3(glval) = VariableAddress[a] : -# 2023| r2023_4(bool) = Load[a] : &:r2023_3, m2019_6 -# 2023| v2023_5(void) = ConditionalBranch : r2023_4 +# 2022| m2022_7(unknown) = Phi : from 8:~m2022_35, from 9:~m2022_46 +# 2022| m2022_8(TernaryNonPodObj) = Phi : from 8:m2022_40, from 9:m2022_51 +# 2022| r2022_9(glval) = VariableAddress[#temp2022:9] : +# 2022| r2022_10(TernaryNonPodObj) = Load[#temp2022:9] : &:r2022_9, m2022_8 +# 2022| m2022_11(TernaryNonPodObj) = Store[#temp2022:9] : &:r2022_3, r2022_10 +# 2022| r2022_12(glval) = Convert : r2022_3 +# 2022| r2022_13(TernaryNonPodObj &) = CopyValue : r2022_12 +# 2022| r2022_14(TernaryNonPodObj &) = Call[operator=] : func:r2022_2, this:r2022_1, 0:r2022_13 +# 2022| m2022_15(unknown) = ^CallSideEffect : ~m2022_7 +# 2022| m2022_16(unknown) = Chi : total:m2022_7, partial:m2022_15 +# 2022| v2022_17(void) = ^IndirectReadSideEffect[-1] : &:r2022_1, m2021_20 +# 2022| v2022_18(void) = ^BufferReadSideEffect[0] : &:r2022_13, ~m2022_11 +# 2022| m2022_19(TernaryNonPodObj) = ^IndirectMayWriteSideEffect[-1] : &:r2022_1 +# 2022| m2022_20(TernaryNonPodObj) = Chi : total:m2021_20, partial:m2022_19 +# 2022| r2022_21(glval) = CopyValue : r2022_3 +# 2022| r2022_22(glval) = FunctionAddress[~TernaryNonPodObj] : +# 2022| v2022_23(void) = Call[~TernaryNonPodObj] : func:r2022_22, this:r2022_21 +# 2022| m2022_24(unknown) = ^CallSideEffect : ~m2022_16 +# 2022| m2022_25(unknown) = Chi : total:m2022_16, partial:m2022_24 +# 2022| v2022_26(void) = ^IndirectReadSideEffect[-1] : &:r2022_21, m2022_11 +# 2022| m2022_27(TernaryNonPodObj) = ^IndirectMayWriteSideEffect[-1] : &:r2022_21 +# 2022| m2022_28(TernaryNonPodObj) = Chi : total:m2022_11, partial:m2022_27 +# 2022| r2022_29(glval) = CopyValue : r2022_14 +# 2023| r2023_1(glval) = VariableAddress[z] : +# 2023| r2023_2(glval) = FunctionAddress[operator=] : +# 2023| r2023_3(glval) = VariableAddress[a] : +# 2023| r2023_4(bool) = Load[a] : &:r2023_3, m2019_6 +# 2023| v2023_5(void) = ConditionalBranch : r2023_4 #-----| False -> Block 12 #-----| True -> Block 11 # 2022| Block 8 -# 2022| r2022_22(glval) = VariableAddress[#temp2022:13] : -# 2022| m2022_23(TernaryNonPodObj) = Uninitialized[#temp2022:13] : &:r2022_22 -# 2022| r2022_24(glval) = FunctionAddress[TernaryNonPodObj] : -# 2022| v2022_25(void) = Call[TernaryNonPodObj] : func:r2022_24, this:r2022_22 -# 2022| m2022_26(unknown) = ^CallSideEffect : ~m2021_16 -# 2022| m2022_27(unknown) = Chi : total:m2021_16, partial:m2022_26 -# 2022| m2022_28(TernaryNonPodObj) = ^IndirectMayWriteSideEffect[-1] : &:r2022_22 -# 2022| m2022_29(TernaryNonPodObj) = Chi : total:m2022_23, partial:m2022_28 -# 2022| r2022_30(TernaryNonPodObj) = Load[#temp2022:13] : &:r2022_22, m2022_29 -# 2022| r2022_31(glval) = VariableAddress[#temp2022:9] : -# 2022| m2022_32(TernaryNonPodObj) = Store[#temp2022:9] : &:r2022_31, r2022_30 +# 2022| r2022_30(glval) = VariableAddress[#temp2022:13] : +# 2022| m2022_31(TernaryNonPodObj) = Uninitialized[#temp2022:13] : &:r2022_30 +# 2022| r2022_32(glval) = FunctionAddress[TernaryNonPodObj] : +# 2022| v2022_33(void) = Call[TernaryNonPodObj] : func:r2022_32, this:r2022_30 +# 2022| m2022_34(unknown) = ^CallSideEffect : ~m2021_25 +# 2022| m2022_35(unknown) = Chi : total:m2021_25, partial:m2022_34 +# 2022| m2022_36(TernaryNonPodObj) = ^IndirectMayWriteSideEffect[-1] : &:r2022_30 +# 2022| m2022_37(TernaryNonPodObj) = Chi : total:m2022_31, partial:m2022_36 +# 2022| r2022_38(TernaryNonPodObj) = Load[#temp2022:13] : &:r2022_30, m2022_37 +# 2022| r2022_39(glval) = VariableAddress[#temp2022:9] : +# 2022| m2022_40(TernaryNonPodObj) = Store[#temp2022:9] : &:r2022_39, r2022_38 #-----| Goto -> Block 7 # 2022| Block 9 -# 2022| r2022_33(glval) = VariableAddress[#temp2022:34] : -# 2022| m2022_34(TernaryNonPodObj) = Uninitialized[#temp2022:34] : &:r2022_33 -# 2022| r2022_35(glval) = FunctionAddress[TernaryNonPodObj] : -# 2022| v2022_36(void) = Call[TernaryNonPodObj] : func:r2022_35, this:r2022_33 -# 2022| m2022_37(unknown) = ^CallSideEffect : ~m2021_16 -# 2022| m2022_38(unknown) = Chi : total:m2021_16, partial:m2022_37 -# 2022| m2022_39(TernaryNonPodObj) = ^IndirectMayWriteSideEffect[-1] : &:r2022_33 -# 2022| m2022_40(TernaryNonPodObj) = Chi : total:m2022_34, partial:m2022_39 -# 2022| r2022_41(TernaryNonPodObj) = Load[#temp2022:34] : &:r2022_33, m2022_40 -# 2022| r2022_42(glval) = VariableAddress[#temp2022:9] : -# 2022| m2022_43(TernaryNonPodObj) = Store[#temp2022:9] : &:r2022_42, r2022_41 +# 2022| r2022_41(glval) = VariableAddress[#temp2022:34] : +# 2022| m2022_42(TernaryNonPodObj) = Uninitialized[#temp2022:34] : &:r2022_41 +# 2022| r2022_43(glval) = FunctionAddress[TernaryNonPodObj] : +# 2022| v2022_44(void) = Call[TernaryNonPodObj] : func:r2022_43, this:r2022_41 +# 2022| m2022_45(unknown) = ^CallSideEffect : ~m2021_25 +# 2022| m2022_46(unknown) = Chi : total:m2021_25, partial:m2022_45 +# 2022| m2022_47(TernaryNonPodObj) = ^IndirectMayWriteSideEffect[-1] : &:r2022_41 +# 2022| m2022_48(TernaryNonPodObj) = Chi : total:m2022_42, partial:m2022_47 +# 2022| r2022_49(TernaryNonPodObj) = Load[#temp2022:34] : &:r2022_41, m2022_48 +# 2022| r2022_50(glval) = VariableAddress[#temp2022:9] : +# 2022| m2022_51(TernaryNonPodObj) = Store[#temp2022:9] : &:r2022_50, r2022_49 #-----| Goto -> Block 7 # 2023| Block 10 -# 2023| m2023_6(glval) = Phi : from 11:m2023_40, from 12:m2023_43 -# 2023| r2023_7(glval) = VariableAddress[#temp2023:10] : -# 2023| r2023_8(glval) = Load[#temp2023:10] : &:r2023_7, m2023_6 -# 2023| r2023_9(glval) = Convert : r2023_8 -# 2023| r2023_10(TernaryNonPodObj &) = CopyValue : r2023_9 -# 2023| r2023_11(TernaryNonPodObj &) = Call[operator=] : func:r2023_2, this:r2023_1, 0:r2023_10 -# 2023| m2023_12(unknown) = ^CallSideEffect : ~m2022_16 -# 2023| m2023_13(unknown) = Chi : total:m2022_16, partial:m2023_12 -# 2023| v2023_14(void) = ^IndirectReadSideEffect[-1] : &:r2023_1, m2022_20 -# 2023| v2023_15(void) = ^BufferReadSideEffect[0] : &:r2023_10, ~m2023_13 -# 2023| m2023_16(TernaryNonPodObj) = ^IndirectMayWriteSideEffect[-1] : &:r2023_1 -# 2023| m2023_17(TernaryNonPodObj) = Chi : total:m2022_20, partial:m2023_16 -# 2023| r2023_18(glval) = CopyValue : r2023_11 -# 2023| r2023_19(glval) = FunctionAddress[operator=] : -# 2023| r2023_20(glval) = VariableAddress[#temp2023:23] : -# 2023| m2023_21(TernaryNonPodObj) = Uninitialized[#temp2023:23] : &:r2023_20 -# 2023| r2023_22(glval) = FunctionAddress[TernaryNonPodObj] : -# 2023| v2023_23(void) = Call[TernaryNonPodObj] : func:r2023_22, this:r2023_20 -# 2023| m2023_24(unknown) = ^CallSideEffect : ~m2023_13 -# 2023| m2023_25(unknown) = Chi : total:m2023_13, partial:m2023_24 -# 2023| m2023_26(TernaryNonPodObj) = ^IndirectMayWriteSideEffect[-1] : &:r2023_20 -# 2023| m2023_27(TernaryNonPodObj) = Chi : total:m2023_21, partial:m2023_26 -# 2023| r2023_28(glval) = Convert : r2023_20 -# 2023| r2023_29(TernaryNonPodObj &) = CopyValue : r2023_28 -# 2023| r2023_30(TernaryNonPodObj &) = Call[operator=] : func:r2023_19, this:r2023_18, 0:r2023_29 -# 2023| m2023_31(unknown) = ^CallSideEffect : ~m2023_25 -# 2023| m2023_32(unknown) = Chi : total:m2023_25, partial:m2023_31 -# 2023| v2023_33(void) = ^IndirectReadSideEffect[-1] : &:r2023_18, m2023_17 -# 2023| v2023_34(void) = ^BufferReadSideEffect[0] : &:r2023_29, ~m2023_27 -# 2023| m2023_35(TernaryNonPodObj) = ^IndirectMayWriteSideEffect[-1] : &:r2023_18 -# 2023| m2023_36(TernaryNonPodObj) = Chi : total:m2023_17, partial:m2023_35 -# 2023| r2023_37(glval) = CopyValue : r2023_30 -# 2024| v2024_1(void) = NoOp : -# 2019| v2019_13(void) = ReturnVoid : -# 2019| v2019_14(void) = AliasedUse : ~m2023_32 -# 2019| v2019_15(void) = ExitFunction : +# 2023| m2023_6(glval) = Phi : from 11:m2023_48, from 12:m2023_51 +# 2023| r2023_7(glval) = VariableAddress[#temp2023:10] : +# 2023| r2023_8(glval) = Load[#temp2023:10] : &:r2023_7, m2023_6 +# 2023| r2023_9(glval) = Convert : r2023_8 +# 2023| r2023_10(TernaryNonPodObj &) = CopyValue : r2023_9 +# 2023| r2023_11(TernaryNonPodObj &) = Call[operator=] : func:r2023_2, this:r2023_1, 0:r2023_10 +# 2023| m2023_12(unknown) = ^CallSideEffect : ~m2022_25 +# 2023| m2023_13(unknown) = Chi : total:m2022_25, partial:m2023_12 +# 2023| v2023_14(void) = ^IndirectReadSideEffect[-1] : &:r2023_1, m2022_20 +# 2023| v2023_15(void) = ^BufferReadSideEffect[0] : &:r2023_10, ~m2023_13 +# 2023| m2023_16(TernaryNonPodObj) = ^IndirectMayWriteSideEffect[-1] : &:r2023_1 +# 2023| m2023_17(TernaryNonPodObj) = Chi : total:m2022_20, partial:m2023_16 +# 2023| r2023_18(glval) = CopyValue : r2023_11 +# 2023| r2023_19(glval) = FunctionAddress[operator=] : +# 2023| r2023_20(glval) = VariableAddress[#temp2023:23] : +# 2023| m2023_21(TernaryNonPodObj) = Uninitialized[#temp2023:23] : &:r2023_20 +# 2023| r2023_22(glval) = FunctionAddress[TernaryNonPodObj] : +# 2023| v2023_23(void) = Call[TernaryNonPodObj] : func:r2023_22, this:r2023_20 +# 2023| m2023_24(unknown) = ^CallSideEffect : ~m2023_13 +# 2023| m2023_25(unknown) = Chi : total:m2023_13, partial:m2023_24 +# 2023| m2023_26(TernaryNonPodObj) = ^IndirectMayWriteSideEffect[-1] : &:r2023_20 +# 2023| m2023_27(TernaryNonPodObj) = Chi : total:m2023_21, partial:m2023_26 +# 2023| r2023_28(glval) = Convert : r2023_20 +# 2023| r2023_29(TernaryNonPodObj &) = CopyValue : r2023_28 +# 2023| r2023_30(TernaryNonPodObj &) = Call[operator=] : func:r2023_19, this:r2023_18, 0:r2023_29 +# 2023| m2023_31(unknown) = ^CallSideEffect : ~m2023_25 +# 2023| m2023_32(unknown) = Chi : total:m2023_25, partial:m2023_31 +# 2023| v2023_33(void) = ^IndirectReadSideEffect[-1] : &:r2023_18, m2023_17 +# 2023| v2023_34(void) = ^BufferReadSideEffect[0] : &:r2023_29, ~m2023_27 +# 2023| m2023_35(TernaryNonPodObj) = ^IndirectMayWriteSideEffect[-1] : &:r2023_18 +# 2023| m2023_36(TernaryNonPodObj) = Chi : total:m2023_17, partial:m2023_35 +# 2023| r2023_37(glval) = CopyValue : r2023_20 +# 2023| r2023_38(glval) = FunctionAddress[~TernaryNonPodObj] : +# 2023| v2023_39(void) = Call[~TernaryNonPodObj] : func:r2023_38, this:r2023_37 +# 2023| m2023_40(unknown) = ^CallSideEffect : ~m2023_32 +# 2023| m2023_41(unknown) = Chi : total:m2023_32, partial:m2023_40 +# 2023| v2023_42(void) = ^IndirectReadSideEffect[-1] : &:r2023_37, m2023_27 +# 2023| m2023_43(TernaryNonPodObj) = ^IndirectMayWriteSideEffect[-1] : &:r2023_37 +# 2023| m2023_44(TernaryNonPodObj) = Chi : total:m2023_27, partial:m2023_43 +# 2023| r2023_45(glval) = CopyValue : r2023_30 +# 2024| v2024_1(void) = NoOp : +# 2019| v2019_13(void) = ReturnVoid : +# 2019| v2019_14(void) = AliasedUse : ~m2023_41 +# 2019| v2019_15(void) = ExitFunction : # 2023| Block 11 -# 2023| r2023_38(glval) = VariableAddress[x] : -# 2023| r2023_39(glval) = VariableAddress[#temp2023:10] : -# 2023| m2023_40(glval) = Store[#temp2023:10] : &:r2023_39, r2023_38 +# 2023| r2023_46(glval) = VariableAddress[x] : +# 2023| r2023_47(glval) = VariableAddress[#temp2023:10] : +# 2023| m2023_48(glval) = Store[#temp2023:10] : &:r2023_47, r2023_46 #-----| Goto -> Block 10 # 2023| Block 12 -# 2023| r2023_41(glval) = VariableAddress[y] : -# 2023| r2023_42(glval) = VariableAddress[#temp2023:10] : -# 2023| m2023_43(glval) = Store[#temp2023:10] : &:r2023_42, r2023_41 +# 2023| r2023_49(glval) = VariableAddress[y] : +# 2023| r2023_50(glval) = VariableAddress[#temp2023:10] : +# 2023| m2023_51(glval) = Store[#temp2023:10] : &:r2023_50, r2023_49 #-----| Goto -> Block 10 # 2028| unsigned int CommaTest(unsigned int) @@ -13998,74 +14150,82 @@ ir.cpp: # 2246| m2246_19(unknown) = Chi : total:m2246_12, partial:m2246_18 # 2246| m2246_20(vector) = ^IndirectMayWriteSideEffect[-1] : &:r2246_2 # 2246| m2246_21(vector) = Chi : total:m2246_3, partial:m2246_20 -# 2246| r2246_22(vector &) = CopyValue : r2246_2 -# 2246| m2246_23(vector &&) = Store[(__range)] : &:r2246_1, r2246_22 -# 2246| r2246_24(glval) = VariableAddress[(__begin)] : -# 2246| r2246_25(glval &&>) = VariableAddress[(__range)] : -# 2246| r2246_26(vector &&) = Load[(__range)] : &:r2246_25, m2246_23 -#-----| r0_1(glval>) = CopyValue : r2246_26 +# 2246| r2246_22(glval) = CopyValue : r2246_5 +# 2246| r2246_23(glval) = FunctionAddress[~String] : +# 2246| v2246_24(void) = Call[~String] : func:r2246_23, this:r2246_22 +# 2246| m2246_25(unknown) = ^CallSideEffect : ~m2246_19 +# 2246| m2246_26(unknown) = Chi : total:m2246_19, partial:m2246_25 +# 2246| v2246_27(void) = ^IndirectReadSideEffect[-1] : &:r2246_22, m2246_15 +# 2246| m2246_28(String) = ^IndirectMayWriteSideEffect[-1] : &:r2246_22 +# 2246| m2246_29(String) = Chi : total:m2246_15, partial:m2246_28 +# 2246| r2246_30(vector &) = CopyValue : r2246_2 +# 2246| m2246_31(vector &&) = Store[(__range)] : &:r2246_1, r2246_30 +# 2246| r2246_32(glval) = VariableAddress[(__begin)] : +# 2246| r2246_33(glval &&>) = VariableAddress[(__range)] : +# 2246| r2246_34(vector &&) = Load[(__range)] : &:r2246_33, m2246_31 +#-----| r0_1(glval>) = CopyValue : r2246_34 #-----| r0_2(glval>) = Convert : r0_1 -# 2246| r2246_27(glval) = FunctionAddress[begin] : -# 2246| r2246_28(iterator) = Call[begin] : func:r2246_27, this:r0_2 -# 2246| m2246_29(unknown) = ^CallSideEffect : ~m2246_19 -# 2246| m2246_30(unknown) = Chi : total:m2246_19, partial:m2246_29 +# 2246| r2246_35(glval) = FunctionAddress[begin] : +# 2246| r2246_36(iterator) = Call[begin] : func:r2246_35, this:r0_2 +# 2246| m2246_37(unknown) = ^CallSideEffect : ~m2246_26 +# 2246| m2246_38(unknown) = Chi : total:m2246_26, partial:m2246_37 #-----| v0_3(void) = ^IndirectReadSideEffect[-1] : &:r0_2, m2246_21 -# 2246| m2246_31(iterator) = Store[(__begin)] : &:r2246_24, r2246_28 -# 2246| r2246_32(glval) = VariableAddress[(__end)] : -# 2246| r2246_33(glval &&>) = VariableAddress[(__range)] : -# 2246| r2246_34(vector &&) = Load[(__range)] : &:r2246_33, m2246_23 -#-----| r0_4(glval>) = CopyValue : r2246_34 +# 2246| m2246_39(iterator) = Store[(__begin)] : &:r2246_32, r2246_36 +# 2246| r2246_40(glval) = VariableAddress[(__end)] : +# 2246| r2246_41(glval &&>) = VariableAddress[(__range)] : +# 2246| r2246_42(vector &&) = Load[(__range)] : &:r2246_41, m2246_31 +#-----| r0_4(glval>) = CopyValue : r2246_42 #-----| r0_5(glval>) = Convert : r0_4 -# 2246| r2246_35(glval) = FunctionAddress[end] : -# 2246| r2246_36(iterator) = Call[end] : func:r2246_35, this:r0_5 -# 2246| m2246_37(unknown) = ^CallSideEffect : ~m2246_30 -# 2246| m2246_38(unknown) = Chi : total:m2246_30, partial:m2246_37 +# 2246| r2246_43(glval) = FunctionAddress[end] : +# 2246| r2246_44(iterator) = Call[end] : func:r2246_43, this:r0_5 +# 2246| m2246_45(unknown) = ^CallSideEffect : ~m2246_38 +# 2246| m2246_46(unknown) = Chi : total:m2246_38, partial:m2246_45 #-----| v0_6(void) = ^IndirectReadSideEffect[-1] : &:r0_5, m2246_21 -# 2246| m2246_39(iterator) = Store[(__end)] : &:r2246_32, r2246_36 +# 2246| m2246_47(iterator) = Store[(__end)] : &:r2246_40, r2246_44 #-----| Goto -> Block 4 # 2246| Block 4 -# 2246| m2246_40(iterator) = Phi : from 3:m2246_31, from 5:m2246_82 -# 2246| m2246_41(unknown) = Phi : from 3:~m2246_38, from 5:~m2246_79 -# 2246| r2246_42(glval) = VariableAddress[(__begin)] : -#-----| r0_7(glval) = Convert : r2246_42 -# 2246| r2246_43(glval) = FunctionAddress[operator!=] : -# 2246| r2246_44(glval) = VariableAddress[(__end)] : -# 2246| r2246_45(iterator) = Load[(__end)] : &:r2246_44, m2246_39 -# 2246| r2246_46(bool) = Call[operator!=] : func:r2246_43, this:r0_7, 0:r2246_45 -# 2246| m2246_47(unknown) = ^CallSideEffect : ~m2246_41 -# 2246| m2246_48(unknown) = Chi : total:m2246_41, partial:m2246_47 -#-----| v0_8(void) = ^IndirectReadSideEffect[-1] : &:r0_7, m2246_40 -# 2246| v2246_49(void) = ConditionalBranch : r2246_46 +# 2246| m2246_48(iterator) = Phi : from 3:m2246_39, from 5:m2246_90 +# 2246| m2246_49(unknown) = Phi : from 3:~m2246_46, from 5:~m2246_87 +# 2246| r2246_50(glval) = VariableAddress[(__begin)] : +#-----| r0_7(glval) = Convert : r2246_50 +# 2246| r2246_51(glval) = FunctionAddress[operator!=] : +# 2246| r2246_52(glval) = VariableAddress[(__end)] : +# 2246| r2246_53(iterator) = Load[(__end)] : &:r2246_52, m2246_47 +# 2246| r2246_54(bool) = Call[operator!=] : func:r2246_51, this:r0_7, 0:r2246_53 +# 2246| m2246_55(unknown) = ^CallSideEffect : ~m2246_49 +# 2246| m2246_56(unknown) = Chi : total:m2246_49, partial:m2246_55 +#-----| v0_8(void) = ^IndirectReadSideEffect[-1] : &:r0_7, m2246_48 +# 2246| v2246_57(void) = ConditionalBranch : r2246_54 #-----| False -> Block 6 #-----| True -> Block 5 # 2246| Block 5 -# 2246| r2246_50(glval) = VariableAddress[s] : -# 2246| m2246_51(String) = Uninitialized[s] : &:r2246_50 -# 2246| r2246_52(glval) = FunctionAddress[String] : -# 2246| r2246_53(glval) = VariableAddress[(__begin)] : -#-----| r0_9(glval) = Convert : r2246_53 -# 2246| r2246_54(glval) = FunctionAddress[operator*] : -# 2246| r2246_55(String &) = Call[operator*] : func:r2246_54, this:r0_9 -# 2246| m2246_56(unknown) = ^CallSideEffect : ~m2246_48 -# 2246| m2246_57(unknown) = Chi : total:m2246_48, partial:m2246_56 -#-----| v0_10(void) = ^IndirectReadSideEffect[-1] : &:r0_9, m2246_40 -# 2246| r2246_58(glval) = CopyValue : r2246_55 -# 2246| r2246_59(glval) = Convert : r2246_58 -# 2246| r2246_60(String &) = CopyValue : r2246_59 -# 2246| v2246_61(void) = Call[String] : func:r2246_52, this:r2246_50, 0:r2246_60 -# 2246| m2246_62(unknown) = ^CallSideEffect : ~m2246_57 -# 2246| m2246_63(unknown) = Chi : total:m2246_57, partial:m2246_62 -# 2246| v2246_64(void) = ^BufferReadSideEffect[0] : &:r2246_60, ~m2246_63 -# 2246| m2246_65(String) = ^IndirectMayWriteSideEffect[-1] : &:r2246_50 -# 2246| m2246_66(String) = Chi : total:m2246_51, partial:m2246_65 +# 2246| r2246_58(glval) = VariableAddress[s] : +# 2246| m2246_59(String) = Uninitialized[s] : &:r2246_58 +# 2246| r2246_60(glval) = FunctionAddress[String] : +# 2246| r2246_61(glval) = VariableAddress[(__begin)] : +#-----| r0_9(glval) = Convert : r2246_61 +# 2246| r2246_62(glval) = FunctionAddress[operator*] : +# 2246| r2246_63(String &) = Call[operator*] : func:r2246_62, this:r0_9 +# 2246| m2246_64(unknown) = ^CallSideEffect : ~m2246_56 +# 2246| m2246_65(unknown) = Chi : total:m2246_56, partial:m2246_64 +#-----| v0_10(void) = ^IndirectReadSideEffect[-1] : &:r0_9, m2246_48 +# 2246| r2246_66(glval) = CopyValue : r2246_63 +# 2246| r2246_67(glval) = Convert : r2246_66 +# 2246| r2246_68(String &) = CopyValue : r2246_67 +# 2246| v2246_69(void) = Call[String] : func:r2246_60, this:r2246_58, 0:r2246_68 +# 2246| m2246_70(unknown) = ^CallSideEffect : ~m2246_65 +# 2246| m2246_71(unknown) = Chi : total:m2246_65, partial:m2246_70 +# 2246| v2246_72(void) = ^BufferReadSideEffect[0] : &:r2246_68, ~m2246_71 +# 2246| m2246_73(String) = ^IndirectMayWriteSideEffect[-1] : &:r2246_58 +# 2246| m2246_74(String) = Chi : total:m2246_59, partial:m2246_73 # 2247| r2247_1(glval) = VariableAddress[s2] : # 2247| m2247_2(String) = Uninitialized[s2] : &:r2247_1 # 2247| r2247_3(glval) = FunctionAddress[String] : # 2247| v2247_4(void) = Call[String] : func:r2247_3, this:r2247_1 -# 2247| m2247_5(unknown) = ^CallSideEffect : ~m2246_63 -# 2247| m2247_6(unknown) = Chi : total:m2246_63, partial:m2247_5 +# 2247| m2247_5(unknown) = ^CallSideEffect : ~m2246_71 +# 2247| m2247_6(unknown) = Chi : total:m2246_71, partial:m2247_5 # 2247| m2247_7(String) = ^IndirectMayWriteSideEffect[-1] : &:r2247_1 # 2247| m2247_8(String) = Chi : total:m2247_2, partial:m2247_7 # 2248| r2248_1(glval) = VariableAddress[s2] : @@ -14076,23 +14236,23 @@ ir.cpp: # 2248| v2248_6(void) = ^IndirectReadSideEffect[-1] : &:r2248_1, m2247_8 # 2248| m2248_7(String) = ^IndirectMayWriteSideEffect[-1] : &:r2248_1 # 2248| m2248_8(String) = Chi : total:m2247_8, partial:m2248_7 -# 2246| r2246_67(glval) = VariableAddress[s] : -# 2246| r2246_68(glval) = FunctionAddress[~String] : -# 2246| v2246_69(void) = Call[~String] : func:r2246_68, this:r2246_67 -# 2246| m2246_70(unknown) = ^CallSideEffect : ~m2248_5 -# 2246| m2246_71(unknown) = Chi : total:m2248_5, partial:m2246_70 -# 2246| v2246_72(void) = ^IndirectReadSideEffect[-1] : &:r2246_67, m2246_66 -# 2246| m2246_73(String) = ^IndirectMayWriteSideEffect[-1] : &:r2246_67 -# 2246| m2246_74(String) = Chi : total:m2246_66, partial:m2246_73 -# 2246| r2246_75(glval) = VariableAddress[(__begin)] : -# 2246| r2246_76(glval) = FunctionAddress[operator++] : -# 2246| r2246_77(iterator &) = Call[operator++] : func:r2246_76, this:r2246_75 -# 2246| m2246_78(unknown) = ^CallSideEffect : ~m2246_71 -# 2246| m2246_79(unknown) = Chi : total:m2246_71, partial:m2246_78 -# 2246| v2246_80(void) = ^IndirectReadSideEffect[-1] : &:r2246_75, m2246_40 -# 2246| m2246_81(iterator) = ^IndirectMayWriteSideEffect[-1] : &:r2246_75 -# 2246| m2246_82(iterator) = Chi : total:m2246_40, partial:m2246_81 -# 2246| r2246_83(glval) = CopyValue : r2246_77 +# 2246| r2246_75(glval) = VariableAddress[s] : +# 2246| r2246_76(glval) = FunctionAddress[~String] : +# 2246| v2246_77(void) = Call[~String] : func:r2246_76, this:r2246_75 +# 2246| m2246_78(unknown) = ^CallSideEffect : ~m2248_5 +# 2246| m2246_79(unknown) = Chi : total:m2248_5, partial:m2246_78 +# 2246| v2246_80(void) = ^IndirectReadSideEffect[-1] : &:r2246_75, m2246_74 +# 2246| m2246_81(String) = ^IndirectMayWriteSideEffect[-1] : &:r2246_75 +# 2246| m2246_82(String) = Chi : total:m2246_74, partial:m2246_81 +# 2246| r2246_83(glval) = VariableAddress[(__begin)] : +# 2246| r2246_84(glval) = FunctionAddress[operator++] : +# 2246| r2246_85(iterator &) = Call[operator++] : func:r2246_84, this:r2246_83 +# 2246| m2246_86(unknown) = ^CallSideEffect : ~m2246_79 +# 2246| m2246_87(unknown) = Chi : total:m2246_79, partial:m2246_86 +# 2246| v2246_88(void) = ^IndirectReadSideEffect[-1] : &:r2246_83, m2246_48 +# 2246| m2246_89(iterator) = ^IndirectMayWriteSideEffect[-1] : &:r2246_83 +# 2246| m2246_90(iterator) = Chi : total:m2246_48, partial:m2246_89 +# 2246| r2246_91(glval) = CopyValue : r2246_85 #-----| Goto (back edge) -> Block 4 # 2250| Block 6 @@ -14102,8 +14262,8 @@ ir.cpp: # 2250| r2250_4(glval) = StringConstant["hello"] : # 2250| r2250_5(char *) = Convert : r2250_4 # 2250| v2250_6(void) = Call[String] : func:r2250_3, this:r2250_1, 0:r2250_5 -# 2250| m2250_7(unknown) = ^CallSideEffect : ~m2246_48 -# 2250| m2250_8(unknown) = Chi : total:m2246_48, partial:m2250_7 +# 2250| m2250_7(unknown) = ^CallSideEffect : ~m2246_56 +# 2250| m2250_8(unknown) = Chi : total:m2246_56, partial:m2250_7 # 2250| v2250_9(void) = ^BufferReadSideEffect[0] : &:r2250_5, ~m2240_3 # 2250| m2250_10(String) = ^IndirectMayWriteSideEffect[-1] : &:r2250_1 # 2250| m2250_11(String) = Chi : total:m2250_2, partial:m2250_10 @@ -14648,234 +14808,269 @@ perf-regression.cpp: smart_ptr.cpp: # 10| void call_unique_ptr_arg(int*) # 10| Block 0 -# 10| v10_1(void) = EnterFunction : -# 10| m10_2(unknown) = AliasedDefinition : -# 10| m10_3(unknown) = InitializeNonLocal : -# 10| m10_4(unknown) = Chi : total:m10_2, partial:m10_3 -# 10| r10_5(glval) = VariableAddress[p] : -# 10| m10_6(int *) = InitializeParameter[p] : &:r10_5 -# 10| r10_7(int *) = Load[p] : &:r10_5, m10_6 -# 10| m10_8(unknown) = InitializeIndirection[p] : &:r10_7 -# 11| r11_1(glval>>) = VariableAddress[up] : -# 11| m11_2(unique_ptr>) = Uninitialized[up] : &:r11_1 -# 11| r11_3(glval) = FunctionAddress[unique_ptr] : -# 11| r11_4(glval) = VariableAddress[p] : -# 11| r11_5(int *) = Load[p] : &:r11_4, m10_6 -# 11| v11_6(void) = Call[unique_ptr] : func:r11_3, this:r11_1, 0:r11_5 -# 11| m11_7(unknown) = ^CallSideEffect : ~m10_4 -# 11| m11_8(unknown) = Chi : total:m10_4, partial:m11_7 -# 11| m11_9(unique_ptr>) = ^IndirectMustWriteSideEffect[-1] : &:r11_1 -# 12| r12_1(glval) = FunctionAddress[unique_ptr_arg] : -# 12| r12_2(glval>>) = VariableAddress[#temp12:20] : -# 12| r12_3(glval) = FunctionAddress[move] : -# 12| r12_4(glval>>) = VariableAddress[up] : -# 12| r12_5(unique_ptr> &) = CopyValue : r12_4 -# 12| r12_6(unique_ptr> &&) = Call[move] : func:r12_3, 0:r12_5 -# 12| r12_7(unique_ptr>) = Load[?] : &:r12_6, m11_9 -# 12| m12_8(unique_ptr>) = Store[#temp12:20] : &:r12_2, r12_7 -# 12| r12_9(unique_ptr>) = Load[#temp12:20] : &:r12_2, m12_8 -# 12| v12_10(void) = Call[unique_ptr_arg] : func:r12_1, 0:r12_9 -# 12| m12_11(unknown) = ^CallSideEffect : ~m11_8 -# 12| m12_12(unknown) = Chi : total:m11_8, partial:m12_11 -# 12| v12_13(void) = ^BufferReadSideEffect[0] : &:r12_9, ~m10_8 -# 12| m12_14(unknown) = ^BufferMayWriteSideEffect[0] : &:r12_9 -# 12| m12_15(unknown) = Chi : total:m10_8, partial:m12_14 -# 13| v13_1(void) = NoOp : -# 13| r13_2(glval>>) = VariableAddress[up] : -# 13| r13_3(glval) = FunctionAddress[~unique_ptr] : -# 13| v13_4(void) = Call[~unique_ptr] : func:r13_3, this:r13_2 -# 13| v13_5(void) = ^IndirectReadSideEffect[-1] : &:r13_2, m11_9 -# 13| m13_6(unique_ptr>) = ^IndirectMustWriteSideEffect[-1] : &:r13_2 -# 10| v10_9(void) = ReturnIndirection[p] : &:r10_7, m12_15 -# 10| v10_10(void) = ReturnVoid : -# 10| v10_11(void) = AliasedUse : ~m12_12 -# 10| v10_12(void) = ExitFunction : +# 10| v10_1(void) = EnterFunction : +# 10| m10_2(unknown) = AliasedDefinition : +# 10| m10_3(unknown) = InitializeNonLocal : +# 10| m10_4(unknown) = Chi : total:m10_2, partial:m10_3 +# 10| r10_5(glval) = VariableAddress[p] : +# 10| m10_6(int *) = InitializeParameter[p] : &:r10_5 +# 10| r10_7(int *) = Load[p] : &:r10_5, m10_6 +# 10| m10_8(unknown) = InitializeIndirection[p] : &:r10_7 +# 11| r11_1(glval>>) = VariableAddress[up] : +# 11| m11_2(unique_ptr>) = Uninitialized[up] : &:r11_1 +# 11| r11_3(glval) = FunctionAddress[unique_ptr] : +# 11| r11_4(glval) = VariableAddress[p] : +# 11| r11_5(int *) = Load[p] : &:r11_4, m10_6 +# 11| v11_6(void) = Call[unique_ptr] : func:r11_3, this:r11_1, 0:r11_5 +# 11| m11_7(unknown) = ^CallSideEffect : ~m10_4 +# 11| m11_8(unknown) = Chi : total:m10_4, partial:m11_7 +# 11| m11_9(unique_ptr>) = ^IndirectMustWriteSideEffect[-1] : &:r11_1 +# 12| r12_1(glval) = FunctionAddress[unique_ptr_arg] : +# 12| r12_2(glval>>) = VariableAddress[#temp12:20] : +# 12| r12_3(glval) = FunctionAddress[move] : +# 12| r12_4(glval>>) = VariableAddress[up] : +# 12| r12_5(unique_ptr> &) = CopyValue : r12_4 +# 12| r12_6(unique_ptr> &&) = Call[move] : func:r12_3, 0:r12_5 +# 12| r12_7(unique_ptr>) = Load[?] : &:r12_6, m11_9 +# 12| m12_8(unique_ptr>) = Store[#temp12:20] : &:r12_2, r12_7 +# 12| r12_9(unique_ptr>) = Load[#temp12:20] : &:r12_2, m12_8 +# 12| v12_10(void) = Call[unique_ptr_arg] : func:r12_1, 0:r12_9 +# 12| m12_11(unknown) = ^CallSideEffect : ~m11_8 +# 12| m12_12(unknown) = Chi : total:m11_8, partial:m12_11 +# 12| v12_13(void) = ^BufferReadSideEffect[0] : &:r12_9, ~m10_8 +# 12| m12_14(unknown) = ^BufferMayWriteSideEffect[0] : &:r12_9 +# 12| m12_15(unknown) = Chi : total:m10_8, partial:m12_14 +# 12| r12_16(glval>>) = CopyValue : r12_2 +# 12| r12_17(glval) = FunctionAddress[~unique_ptr] : +# 12| v12_18(void) = Call[~unique_ptr] : func:r12_17, this:r12_16 +# 12| v12_19(void) = ^IndirectReadSideEffect[-1] : &:r12_16, m12_8 +# 12| m12_20(unique_ptr>) = ^IndirectMustWriteSideEffect[-1] : &:r12_16 +# 13| v13_1(void) = NoOp : +# 13| r13_2(glval>>) = VariableAddress[up] : +# 13| r13_3(glval) = FunctionAddress[~unique_ptr] : +# 13| v13_4(void) = Call[~unique_ptr] : func:r13_3, this:r13_2 +# 13| v13_5(void) = ^IndirectReadSideEffect[-1] : &:r13_2, m11_9 +# 13| m13_6(unique_ptr>) = ^IndirectMustWriteSideEffect[-1] : &:r13_2 +# 10| v10_9(void) = ReturnIndirection[p] : &:r10_7, m12_15 +# 10| v10_10(void) = ReturnVoid : +# 10| v10_11(void) = AliasedUse : ~m12_12 +# 10| v10_12(void) = ExitFunction : # 17| void call_shared_ptr_arg(float*) # 17| Block 0 -# 17| v17_1(void) = EnterFunction : -# 17| m17_2(unknown) = AliasedDefinition : -# 17| m17_3(unknown) = InitializeNonLocal : -# 17| m17_4(unknown) = Chi : total:m17_2, partial:m17_3 -# 17| r17_5(glval) = VariableAddress[p] : -# 17| m17_6(float *) = InitializeParameter[p] : &:r17_5 -# 17| r17_7(float *) = Load[p] : &:r17_5, m17_6 -# 17| m17_8(unknown) = InitializeIndirection[p] : &:r17_7 -# 18| r18_1(glval>) = VariableAddress[sp] : -# 18| m18_2(shared_ptr) = Uninitialized[sp] : &:r18_1 -# 18| r18_3(glval) = FunctionAddress[shared_ptr] : -# 18| r18_4(glval) = VariableAddress[p] : -# 18| r18_5(float *) = Load[p] : &:r18_4, m17_6 -# 18| v18_6(void) = Call[shared_ptr] : func:r18_3, this:r18_1, 0:r18_5 -# 18| m18_7(unknown) = ^CallSideEffect : ~m17_4 -# 18| m18_8(unknown) = Chi : total:m17_4, partial:m18_7 -# 18| m18_9(shared_ptr) = ^IndirectMustWriteSideEffect[-1] : &:r18_1 -# 19| r19_1(glval) = FunctionAddress[shared_ptr_arg] : -# 19| r19_2(glval>) = VariableAddress[#temp19:20] : -# 19| m19_3(shared_ptr) = Uninitialized[#temp19:20] : &:r19_2 -# 19| r19_4(glval) = FunctionAddress[shared_ptr] : -# 19| r19_5(glval>) = VariableAddress[sp] : -# 19| r19_6(glval>) = Convert : r19_5 -# 19| r19_7(shared_ptr &) = CopyValue : r19_6 -# 19| v19_8(void) = Call[shared_ptr] : func:r19_4, this:r19_2, 0:r19_7 -# 19| m19_9(unknown) = ^CallSideEffect : ~m18_8 -# 19| m19_10(unknown) = Chi : total:m18_8, partial:m19_9 -# 19| v19_11(void) = ^IndirectReadSideEffect[0] : &:r19_7, m18_9 -# 19| m19_12(shared_ptr) = ^IndirectMustWriteSideEffect[-1] : &:r19_2 -# 19| r19_13(shared_ptr) = Load[#temp19:20] : &:r19_2, m19_12 -# 19| v19_14(void) = Call[shared_ptr_arg] : func:r19_1, 0:r19_13 -# 19| m19_15(unknown) = ^CallSideEffect : ~m19_10 -# 19| m19_16(unknown) = Chi : total:m19_10, partial:m19_15 -# 19| v19_17(void) = ^BufferReadSideEffect[0] : &:r19_13, ~m17_8 -# 19| m19_18(unknown) = ^BufferMayWriteSideEffect[0] : &:r19_13 -# 19| m19_19(unknown) = Chi : total:m17_8, partial:m19_18 -# 20| v20_1(void) = NoOp : -# 20| r20_2(glval>) = VariableAddress[sp] : -# 20| r20_3(glval) = FunctionAddress[~shared_ptr] : -# 20| v20_4(void) = Call[~shared_ptr] : func:r20_3, this:r20_2 -# 20| v20_5(void) = ^IndirectReadSideEffect[-1] : &:r20_2, m18_9 -# 20| m20_6(shared_ptr) = ^IndirectMustWriteSideEffect[-1] : &:r20_2 -# 17| v17_9(void) = ReturnIndirection[p] : &:r17_7, m19_19 -# 17| v17_10(void) = ReturnVoid : -# 17| v17_11(void) = AliasedUse : ~m19_16 -# 17| v17_12(void) = ExitFunction : +# 17| v17_1(void) = EnterFunction : +# 17| m17_2(unknown) = AliasedDefinition : +# 17| m17_3(unknown) = InitializeNonLocal : +# 17| m17_4(unknown) = Chi : total:m17_2, partial:m17_3 +# 17| r17_5(glval) = VariableAddress[p] : +# 17| m17_6(float *) = InitializeParameter[p] : &:r17_5 +# 17| r17_7(float *) = Load[p] : &:r17_5, m17_6 +# 17| m17_8(unknown) = InitializeIndirection[p] : &:r17_7 +# 18| r18_1(glval>) = VariableAddress[sp] : +# 18| m18_2(shared_ptr) = Uninitialized[sp] : &:r18_1 +# 18| r18_3(glval) = FunctionAddress[shared_ptr] : +# 18| r18_4(glval) = VariableAddress[p] : +# 18| r18_5(float *) = Load[p] : &:r18_4, m17_6 +# 18| v18_6(void) = Call[shared_ptr] : func:r18_3, this:r18_1, 0:r18_5 +# 18| m18_7(unknown) = ^CallSideEffect : ~m17_4 +# 18| m18_8(unknown) = Chi : total:m17_4, partial:m18_7 +# 18| m18_9(shared_ptr) = ^IndirectMustWriteSideEffect[-1] : &:r18_1 +# 19| r19_1(glval) = FunctionAddress[shared_ptr_arg] : +# 19| r19_2(glval>) = VariableAddress[#temp19:20] : +# 19| m19_3(shared_ptr) = Uninitialized[#temp19:20] : &:r19_2 +# 19| r19_4(glval) = FunctionAddress[shared_ptr] : +# 19| r19_5(glval>) = VariableAddress[sp] : +# 19| r19_6(glval>) = Convert : r19_5 +# 19| r19_7(shared_ptr &) = CopyValue : r19_6 +# 19| v19_8(void) = Call[shared_ptr] : func:r19_4, this:r19_2, 0:r19_7 +# 19| m19_9(unknown) = ^CallSideEffect : ~m18_8 +# 19| m19_10(unknown) = Chi : total:m18_8, partial:m19_9 +# 19| v19_11(void) = ^IndirectReadSideEffect[0] : &:r19_7, m18_9 +# 19| m19_12(shared_ptr) = ^IndirectMustWriteSideEffect[-1] : &:r19_2 +# 19| r19_13(shared_ptr) = Load[#temp19:20] : &:r19_2, m19_12 +# 19| v19_14(void) = Call[shared_ptr_arg] : func:r19_1, 0:r19_13 +# 19| m19_15(unknown) = ^CallSideEffect : ~m19_10 +# 19| m19_16(unknown) = Chi : total:m19_10, partial:m19_15 +# 19| v19_17(void) = ^BufferReadSideEffect[0] : &:r19_13, ~m17_8 +# 19| m19_18(unknown) = ^BufferMayWriteSideEffect[0] : &:r19_13 +# 19| m19_19(unknown) = Chi : total:m17_8, partial:m19_18 +# 19| r19_20(glval>) = CopyValue : r19_2 +# 19| r19_21(glval) = FunctionAddress[~shared_ptr] : +# 19| v19_22(void) = Call[~shared_ptr] : func:r19_21, this:r19_20 +# 19| v19_23(void) = ^IndirectReadSideEffect[-1] : &:r19_20, m19_12 +# 19| m19_24(shared_ptr) = ^IndirectMustWriteSideEffect[-1] : &:r19_20 +# 20| v20_1(void) = NoOp : +# 20| r20_2(glval>) = VariableAddress[sp] : +# 20| r20_3(glval) = FunctionAddress[~shared_ptr] : +# 20| v20_4(void) = Call[~shared_ptr] : func:r20_3, this:r20_2 +# 20| v20_5(void) = ^IndirectReadSideEffect[-1] : &:r20_2, m18_9 +# 20| m20_6(shared_ptr) = ^IndirectMustWriteSideEffect[-1] : &:r20_2 +# 17| v17_9(void) = ReturnIndirection[p] : &:r17_7, m19_19 +# 17| v17_10(void) = ReturnVoid : +# 17| v17_11(void) = AliasedUse : ~m19_16 +# 17| v17_12(void) = ExitFunction : # 28| void call_shared_ptr_consts() # 28| Block 0 -# 28| v28_1(void) = EnterFunction : -# 28| m28_2(unknown) = AliasedDefinition : -# 28| m28_3(unknown) = InitializeNonLocal : -# 28| m28_4(unknown) = Chi : total:m28_2, partial:m28_3 -# 29| r29_1(glval>) = VariableAddress[sp_const_int] : -# 29| m29_2(shared_ptr) = Uninitialized[sp_const_int] : &:r29_1 -# 31| r31_1(glval) = FunctionAddress[shared_ptr_const_int] : -# 31| r31_2(glval>) = VariableAddress[#temp31:26] : -# 31| m31_3(shared_ptr) = Uninitialized[#temp31:26] : &:r31_2 -# 31| r31_4(glval) = FunctionAddress[shared_ptr] : -# 31| r31_5(glval>) = VariableAddress[sp_const_int] : -# 31| r31_6(glval>) = Convert : r31_5 -# 31| r31_7(shared_ptr &) = CopyValue : r31_6 -# 31| v31_8(void) = Call[shared_ptr] : func:r31_4, this:r31_2, 0:r31_7 -# 31| m31_9(unknown) = ^CallSideEffect : ~m28_4 -# 31| m31_10(unknown) = Chi : total:m28_4, partial:m31_9 -# 31| v31_11(void) = ^IndirectReadSideEffect[0] : &:r31_7, m29_2 -# 31| m31_12(shared_ptr) = ^IndirectMustWriteSideEffect[-1] : &:r31_2 -# 31| r31_13(shared_ptr) = Load[#temp31:26] : &:r31_2, m31_12 -# 31| v31_14(void) = Call[shared_ptr_const_int] : func:r31_1, 0:r31_13 -# 31| m31_15(unknown) = ^CallSideEffect : ~m31_10 -# 31| m31_16(unknown) = Chi : total:m31_10, partial:m31_15 -# 31| v31_17(void) = ^BufferReadSideEffect[0] : &:r31_13, ~m31_16 -# 33| r33_1(glval>) = VariableAddress[sp_const_int_pointer] : -# 33| m33_2(shared_ptr) = Uninitialized[sp_const_int_pointer] : &:r33_1 -# 35| r35_1(glval) = FunctionAddress[shared_ptr_const_int_ptr] : -# 35| r35_2(glval>) = VariableAddress[#temp35:30] : -# 35| m35_3(shared_ptr) = Uninitialized[#temp35:30] : &:r35_2 -# 35| r35_4(glval) = FunctionAddress[shared_ptr] : -# 35| r35_5(glval>) = VariableAddress[sp_const_int_pointer] : -# 35| r35_6(glval>) = Convert : r35_5 -# 35| r35_7(shared_ptr &) = CopyValue : r35_6 -# 35| v35_8(void) = Call[shared_ptr] : func:r35_4, this:r35_2, 0:r35_7 -# 35| m35_9(unknown) = ^CallSideEffect : ~m31_16 -# 35| m35_10(unknown) = Chi : total:m31_16, partial:m35_9 -# 35| v35_11(void) = ^IndirectReadSideEffect[0] : &:r35_7, m33_2 -# 35| m35_12(shared_ptr) = ^IndirectMustWriteSideEffect[-1] : &:r35_2 -# 35| r35_13(shared_ptr) = Load[#temp35:30] : &:r35_2, m35_12 -# 35| v35_14(void) = Call[shared_ptr_const_int_ptr] : func:r35_1, 0:r35_13 -# 35| m35_15(unknown) = ^CallSideEffect : ~m35_10 -# 35| m35_16(unknown) = Chi : total:m35_10, partial:m35_15 -# 35| v35_17(void) = ^BufferReadSideEffect[0] : &:r35_13, ~m35_16 -# 35| m35_18(unknown) = ^BufferMayWriteSideEffect[0] : &:r35_13 -# 35| m35_19(unknown) = Chi : total:m35_16, partial:m35_18 -# 37| r37_1(glval>>) = VariableAddress[sp_sp_const_int] : -# 37| m37_2(shared_ptr>) = Uninitialized[sp_sp_const_int] : &:r37_1 -# 39| r39_1(glval) = FunctionAddress[shared_ptr_shared_ptr_const_int] : -# 39| r39_2(glval>>) = VariableAddress[#temp39:37] : -# 39| m39_3(shared_ptr>) = Uninitialized[#temp39:37] : &:r39_2 -# 39| r39_4(glval) = FunctionAddress[shared_ptr] : -# 39| r39_5(glval>>) = VariableAddress[sp_sp_const_int] : -# 39| r39_6(glval>>) = Convert : r39_5 -# 39| r39_7(shared_ptr> &) = CopyValue : r39_6 -# 39| v39_8(void) = Call[shared_ptr] : func:r39_4, this:r39_2, 0:r39_7 -# 39| m39_9(unknown) = ^CallSideEffect : ~m35_19 -# 39| m39_10(unknown) = Chi : total:m35_19, partial:m39_9 -# 39| v39_11(void) = ^IndirectReadSideEffect[0] : &:r39_7, m37_2 -# 39| m39_12(shared_ptr>) = ^IndirectMustWriteSideEffect[-1] : &:r39_2 -# 39| r39_13(shared_ptr>) = Load[#temp39:37] : &:r39_2, m39_12 -# 39| v39_14(void) = Call[shared_ptr_shared_ptr_const_int] : func:r39_1, 0:r39_13 -# 39| m39_15(unknown) = ^CallSideEffect : ~m39_10 -# 39| m39_16(unknown) = Chi : total:m39_10, partial:m39_15 -# 39| v39_17(void) = ^BufferReadSideEffect[0] : &:r39_13, ~m39_16 -# 39| m39_18(unknown) = ^BufferMayWriteSideEffect[0] : &:r39_13 -# 39| m39_19(unknown) = Chi : total:m39_16, partial:m39_18 -# 41| r41_1(glval>>) = VariableAddress[sp_const_sp_int] : -# 41| m41_2(shared_ptr>) = Uninitialized[sp_const_sp_int] : &:r41_1 -# 43| r43_1(glval) = FunctionAddress[shared_ptr_const_shared_ptr_int] : -# 43| r43_2(glval>>) = VariableAddress[#temp43:37] : -# 43| m43_3(shared_ptr>) = Uninitialized[#temp43:37] : &:r43_2 -# 43| r43_4(glval) = FunctionAddress[shared_ptr] : -# 43| r43_5(glval>>) = VariableAddress[sp_const_sp_int] : -# 43| r43_6(glval>>) = Convert : r43_5 -# 43| r43_7(shared_ptr> &) = CopyValue : r43_6 -# 43| v43_8(void) = Call[shared_ptr] : func:r43_4, this:r43_2, 0:r43_7 -# 43| m43_9(unknown) = ^CallSideEffect : ~m39_19 -# 43| m43_10(unknown) = Chi : total:m39_19, partial:m43_9 -# 43| v43_11(void) = ^IndirectReadSideEffect[0] : &:r43_7, m41_2 -# 43| m43_12(shared_ptr>) = ^IndirectMustWriteSideEffect[-1] : &:r43_2 -# 43| r43_13(shared_ptr>) = Load[#temp43:37] : &:r43_2, m43_12 -# 43| v43_14(void) = Call[shared_ptr_const_shared_ptr_int] : func:r43_1, 0:r43_13 -# 43| m43_15(unknown) = ^CallSideEffect : ~m43_10 -# 43| m43_16(unknown) = Chi : total:m43_10, partial:m43_15 -# 43| v43_17(void) = ^BufferReadSideEffect[0] : &:r43_13, ~m43_16 -# 43| m43_18(unknown) = ^BufferMayWriteSideEffect[0] : &:r43_13 -# 43| m43_19(unknown) = Chi : total:m43_16, partial:m43_18 -# 45| r45_1(glval>>) = VariableAddress[sp_const_sp_const_int] : -# 45| m45_2(shared_ptr>) = Uninitialized[sp_const_sp_const_int] : &:r45_1 -# 47| r47_1(glval) = FunctionAddress[shared_ptr_const_shared_ptr_const_int] : -# 47| r47_2(glval>>) = VariableAddress[#temp47:43] : -# 47| m47_3(shared_ptr>) = Uninitialized[#temp47:43] : &:r47_2 -# 47| r47_4(glval) = FunctionAddress[shared_ptr] : -# 47| r47_5(glval>>) = VariableAddress[sp_const_sp_const_int] : -# 47| r47_6(glval>>) = Convert : r47_5 -# 47| r47_7(shared_ptr> &) = CopyValue : r47_6 -# 47| v47_8(void) = Call[shared_ptr] : func:r47_4, this:r47_2, 0:r47_7 -# 47| m47_9(unknown) = ^CallSideEffect : ~m43_19 -# 47| m47_10(unknown) = Chi : total:m43_19, partial:m47_9 -# 47| v47_11(void) = ^IndirectReadSideEffect[0] : &:r47_7, m45_2 -# 47| m47_12(shared_ptr>) = ^IndirectMustWriteSideEffect[-1] : &:r47_2 -# 47| r47_13(shared_ptr>) = Load[#temp47:43] : &:r47_2, m47_12 -# 47| v47_14(void) = Call[shared_ptr_const_shared_ptr_const_int] : func:r47_1, 0:r47_13 -# 47| m47_15(unknown) = ^CallSideEffect : ~m47_10 -# 47| m47_16(unknown) = Chi : total:m47_10, partial:m47_15 -# 47| v47_17(void) = ^BufferReadSideEffect[0] : &:r47_13, ~m47_16 -# 48| v48_1(void) = NoOp : -# 48| r48_2(glval>>) = VariableAddress[sp_const_sp_const_int] : -# 48| r48_3(glval) = FunctionAddress[~shared_ptr] : -# 48| v48_4(void) = Call[~shared_ptr] : func:r48_3, this:r48_2 -# 48| v48_5(void) = ^IndirectReadSideEffect[-1] : &:r48_2, m45_2 -# 48| m48_6(shared_ptr>) = ^IndirectMustWriteSideEffect[-1] : &:r48_2 -# 48| r48_7(glval>>) = VariableAddress[sp_const_sp_int] : -# 48| r48_8(glval) = FunctionAddress[~shared_ptr] : -# 48| v48_9(void) = Call[~shared_ptr] : func:r48_8, this:r48_7 -# 48| v48_10(void) = ^IndirectReadSideEffect[-1] : &:r48_7, m41_2 -# 48| m48_11(shared_ptr>) = ^IndirectMustWriteSideEffect[-1] : &:r48_7 -# 48| r48_12(glval>>) = VariableAddress[sp_sp_const_int] : -# 48| r48_13(glval) = FunctionAddress[~shared_ptr] : -# 48| v48_14(void) = Call[~shared_ptr] : func:r48_13, this:r48_12 -# 48| v48_15(void) = ^IndirectReadSideEffect[-1] : &:r48_12, m37_2 -# 48| m48_16(shared_ptr>) = ^IndirectMustWriteSideEffect[-1] : &:r48_12 -# 48| r48_17(glval>) = VariableAddress[sp_const_int_pointer] : -# 48| r48_18(glval) = FunctionAddress[~shared_ptr] : -# 48| v48_19(void) = Call[~shared_ptr] : func:r48_18, this:r48_17 -# 48| v48_20(void) = ^IndirectReadSideEffect[-1] : &:r48_17, m33_2 -# 48| m48_21(shared_ptr) = ^IndirectMustWriteSideEffect[-1] : &:r48_17 -# 48| r48_22(glval>) = VariableAddress[sp_const_int] : -# 48| r48_23(glval) = FunctionAddress[~shared_ptr] : -# 48| v48_24(void) = Call[~shared_ptr] : func:r48_23, this:r48_22 -# 48| v48_25(void) = ^IndirectReadSideEffect[-1] : &:r48_22, m29_2 -# 48| m48_26(shared_ptr) = ^IndirectMustWriteSideEffect[-1] : &:r48_22 -# 28| v28_5(void) = ReturnVoid : -# 28| v28_6(void) = AliasedUse : ~m47_16 -# 28| v28_7(void) = ExitFunction : +# 28| v28_1(void) = EnterFunction : +# 28| m28_2(unknown) = AliasedDefinition : +# 28| m28_3(unknown) = InitializeNonLocal : +# 28| m28_4(unknown) = Chi : total:m28_2, partial:m28_3 +# 29| r29_1(glval>) = VariableAddress[sp_const_int] : +# 29| m29_2(shared_ptr) = Uninitialized[sp_const_int] : &:r29_1 +# 31| r31_1(glval) = FunctionAddress[shared_ptr_const_int] : +# 31| r31_2(glval>) = VariableAddress[#temp31:26] : +# 31| m31_3(shared_ptr) = Uninitialized[#temp31:26] : &:r31_2 +# 31| r31_4(glval) = FunctionAddress[shared_ptr] : +# 31| r31_5(glval>) = VariableAddress[sp_const_int] : +# 31| r31_6(glval>) = Convert : r31_5 +# 31| r31_7(shared_ptr &) = CopyValue : r31_6 +# 31| v31_8(void) = Call[shared_ptr] : func:r31_4, this:r31_2, 0:r31_7 +# 31| m31_9(unknown) = ^CallSideEffect : ~m28_4 +# 31| m31_10(unknown) = Chi : total:m28_4, partial:m31_9 +# 31| v31_11(void) = ^IndirectReadSideEffect[0] : &:r31_7, m29_2 +# 31| m31_12(shared_ptr) = ^IndirectMustWriteSideEffect[-1] : &:r31_2 +# 31| r31_13(shared_ptr) = Load[#temp31:26] : &:r31_2, m31_12 +# 31| v31_14(void) = Call[shared_ptr_const_int] : func:r31_1, 0:r31_13 +# 31| m31_15(unknown) = ^CallSideEffect : ~m31_10 +# 31| m31_16(unknown) = Chi : total:m31_10, partial:m31_15 +# 31| v31_17(void) = ^BufferReadSideEffect[0] : &:r31_13, ~m31_16 +# 31| r31_18(glval>) = CopyValue : r31_2 +# 31| r31_19(glval) = FunctionAddress[~shared_ptr] : +# 31| v31_20(void) = Call[~shared_ptr] : func:r31_19, this:r31_18 +# 31| v31_21(void) = ^IndirectReadSideEffect[-1] : &:r31_18, m31_12 +# 31| m31_22(shared_ptr) = ^IndirectMustWriteSideEffect[-1] : &:r31_18 +# 33| r33_1(glval>) = VariableAddress[sp_const_int_pointer] : +# 33| m33_2(shared_ptr) = Uninitialized[sp_const_int_pointer] : &:r33_1 +# 35| r35_1(glval) = FunctionAddress[shared_ptr_const_int_ptr] : +# 35| r35_2(glval>) = VariableAddress[#temp35:30] : +# 35| m35_3(shared_ptr) = Uninitialized[#temp35:30] : &:r35_2 +# 35| r35_4(glval) = FunctionAddress[shared_ptr] : +# 35| r35_5(glval>) = VariableAddress[sp_const_int_pointer] : +# 35| r35_6(glval>) = Convert : r35_5 +# 35| r35_7(shared_ptr &) = CopyValue : r35_6 +# 35| v35_8(void) = Call[shared_ptr] : func:r35_4, this:r35_2, 0:r35_7 +# 35| m35_9(unknown) = ^CallSideEffect : ~m31_16 +# 35| m35_10(unknown) = Chi : total:m31_16, partial:m35_9 +# 35| v35_11(void) = ^IndirectReadSideEffect[0] : &:r35_7, m33_2 +# 35| m35_12(shared_ptr) = ^IndirectMustWriteSideEffect[-1] : &:r35_2 +# 35| r35_13(shared_ptr) = Load[#temp35:30] : &:r35_2, m35_12 +# 35| v35_14(void) = Call[shared_ptr_const_int_ptr] : func:r35_1, 0:r35_13 +# 35| m35_15(unknown) = ^CallSideEffect : ~m35_10 +# 35| m35_16(unknown) = Chi : total:m35_10, partial:m35_15 +# 35| v35_17(void) = ^BufferReadSideEffect[0] : &:r35_13, ~m35_16 +# 35| m35_18(unknown) = ^BufferMayWriteSideEffect[0] : &:r35_13 +# 35| m35_19(unknown) = Chi : total:m35_16, partial:m35_18 +# 35| r35_20(glval>) = CopyValue : r35_2 +# 35| r35_21(glval) = FunctionAddress[~shared_ptr] : +# 35| v35_22(void) = Call[~shared_ptr] : func:r35_21, this:r35_20 +# 35| v35_23(void) = ^IndirectReadSideEffect[-1] : &:r35_20, m35_12 +# 35| m35_24(shared_ptr) = ^IndirectMustWriteSideEffect[-1] : &:r35_20 +# 37| r37_1(glval>>) = VariableAddress[sp_sp_const_int] : +# 37| m37_2(shared_ptr>) = Uninitialized[sp_sp_const_int] : &:r37_1 +# 39| r39_1(glval) = FunctionAddress[shared_ptr_shared_ptr_const_int] : +# 39| r39_2(glval>>) = VariableAddress[#temp39:37] : +# 39| m39_3(shared_ptr>) = Uninitialized[#temp39:37] : &:r39_2 +# 39| r39_4(glval) = FunctionAddress[shared_ptr] : +# 39| r39_5(glval>>) = VariableAddress[sp_sp_const_int] : +# 39| r39_6(glval>>) = Convert : r39_5 +# 39| r39_7(shared_ptr> &) = CopyValue : r39_6 +# 39| v39_8(void) = Call[shared_ptr] : func:r39_4, this:r39_2, 0:r39_7 +# 39| m39_9(unknown) = ^CallSideEffect : ~m35_19 +# 39| m39_10(unknown) = Chi : total:m35_19, partial:m39_9 +# 39| v39_11(void) = ^IndirectReadSideEffect[0] : &:r39_7, m37_2 +# 39| m39_12(shared_ptr>) = ^IndirectMustWriteSideEffect[-1] : &:r39_2 +# 39| r39_13(shared_ptr>) = Load[#temp39:37] : &:r39_2, m39_12 +# 39| v39_14(void) = Call[shared_ptr_shared_ptr_const_int] : func:r39_1, 0:r39_13 +# 39| m39_15(unknown) = ^CallSideEffect : ~m39_10 +# 39| m39_16(unknown) = Chi : total:m39_10, partial:m39_15 +# 39| v39_17(void) = ^BufferReadSideEffect[0] : &:r39_13, ~m39_16 +# 39| m39_18(unknown) = ^BufferMayWriteSideEffect[0] : &:r39_13 +# 39| m39_19(unknown) = Chi : total:m39_16, partial:m39_18 +# 39| r39_20(glval>>) = CopyValue : r39_2 +# 39| r39_21(glval) = FunctionAddress[~shared_ptr] : +# 39| v39_22(void) = Call[~shared_ptr] : func:r39_21, this:r39_20 +# 39| v39_23(void) = ^IndirectReadSideEffect[-1] : &:r39_20, m39_12 +# 39| m39_24(shared_ptr>) = ^IndirectMustWriteSideEffect[-1] : &:r39_20 +# 41| r41_1(glval>>) = VariableAddress[sp_const_sp_int] : +# 41| m41_2(shared_ptr>) = Uninitialized[sp_const_sp_int] : &:r41_1 +# 43| r43_1(glval) = FunctionAddress[shared_ptr_const_shared_ptr_int] : +# 43| r43_2(glval>>) = VariableAddress[#temp43:37] : +# 43| m43_3(shared_ptr>) = Uninitialized[#temp43:37] : &:r43_2 +# 43| r43_4(glval) = FunctionAddress[shared_ptr] : +# 43| r43_5(glval>>) = VariableAddress[sp_const_sp_int] : +# 43| r43_6(glval>>) = Convert : r43_5 +# 43| r43_7(shared_ptr> &) = CopyValue : r43_6 +# 43| v43_8(void) = Call[shared_ptr] : func:r43_4, this:r43_2, 0:r43_7 +# 43| m43_9(unknown) = ^CallSideEffect : ~m39_19 +# 43| m43_10(unknown) = Chi : total:m39_19, partial:m43_9 +# 43| v43_11(void) = ^IndirectReadSideEffect[0] : &:r43_7, m41_2 +# 43| m43_12(shared_ptr>) = ^IndirectMustWriteSideEffect[-1] : &:r43_2 +# 43| r43_13(shared_ptr>) = Load[#temp43:37] : &:r43_2, m43_12 +# 43| v43_14(void) = Call[shared_ptr_const_shared_ptr_int] : func:r43_1, 0:r43_13 +# 43| m43_15(unknown) = ^CallSideEffect : ~m43_10 +# 43| m43_16(unknown) = Chi : total:m43_10, partial:m43_15 +# 43| v43_17(void) = ^BufferReadSideEffect[0] : &:r43_13, ~m43_16 +# 43| m43_18(unknown) = ^BufferMayWriteSideEffect[0] : &:r43_13 +# 43| m43_19(unknown) = Chi : total:m43_16, partial:m43_18 +# 43| r43_20(glval>>) = CopyValue : r43_2 +# 43| r43_21(glval) = FunctionAddress[~shared_ptr] : +# 43| v43_22(void) = Call[~shared_ptr] : func:r43_21, this:r43_20 +# 43| v43_23(void) = ^IndirectReadSideEffect[-1] : &:r43_20, m43_12 +# 43| m43_24(shared_ptr>) = ^IndirectMustWriteSideEffect[-1] : &:r43_20 +# 45| r45_1(glval>>) = VariableAddress[sp_const_sp_const_int] : +# 45| m45_2(shared_ptr>) = Uninitialized[sp_const_sp_const_int] : &:r45_1 +# 47| r47_1(glval) = FunctionAddress[shared_ptr_const_shared_ptr_const_int] : +# 47| r47_2(glval>>) = VariableAddress[#temp47:43] : +# 47| m47_3(shared_ptr>) = Uninitialized[#temp47:43] : &:r47_2 +# 47| r47_4(glval) = FunctionAddress[shared_ptr] : +# 47| r47_5(glval>>) = VariableAddress[sp_const_sp_const_int] : +# 47| r47_6(glval>>) = Convert : r47_5 +# 47| r47_7(shared_ptr> &) = CopyValue : r47_6 +# 47| v47_8(void) = Call[shared_ptr] : func:r47_4, this:r47_2, 0:r47_7 +# 47| m47_9(unknown) = ^CallSideEffect : ~m43_19 +# 47| m47_10(unknown) = Chi : total:m43_19, partial:m47_9 +# 47| v47_11(void) = ^IndirectReadSideEffect[0] : &:r47_7, m45_2 +# 47| m47_12(shared_ptr>) = ^IndirectMustWriteSideEffect[-1] : &:r47_2 +# 47| r47_13(shared_ptr>) = Load[#temp47:43] : &:r47_2, m47_12 +# 47| v47_14(void) = Call[shared_ptr_const_shared_ptr_const_int] : func:r47_1, 0:r47_13 +# 47| m47_15(unknown) = ^CallSideEffect : ~m47_10 +# 47| m47_16(unknown) = Chi : total:m47_10, partial:m47_15 +# 47| v47_17(void) = ^BufferReadSideEffect[0] : &:r47_13, ~m47_16 +# 47| r47_18(glval>>) = CopyValue : r47_2 +# 47| r47_19(glval) = FunctionAddress[~shared_ptr] : +# 47| v47_20(void) = Call[~shared_ptr] : func:r47_19, this:r47_18 +# 47| v47_21(void) = ^IndirectReadSideEffect[-1] : &:r47_18, m47_12 +# 47| m47_22(shared_ptr>) = ^IndirectMustWriteSideEffect[-1] : &:r47_18 +# 48| v48_1(void) = NoOp : +# 48| r48_2(glval>>) = VariableAddress[sp_const_sp_const_int] : +# 48| r48_3(glval) = FunctionAddress[~shared_ptr] : +# 48| v48_4(void) = Call[~shared_ptr] : func:r48_3, this:r48_2 +# 48| v48_5(void) = ^IndirectReadSideEffect[-1] : &:r48_2, m45_2 +# 48| m48_6(shared_ptr>) = ^IndirectMustWriteSideEffect[-1] : &:r48_2 +# 48| r48_7(glval>>) = VariableAddress[sp_const_sp_int] : +# 48| r48_8(glval) = FunctionAddress[~shared_ptr] : +# 48| v48_9(void) = Call[~shared_ptr] : func:r48_8, this:r48_7 +# 48| v48_10(void) = ^IndirectReadSideEffect[-1] : &:r48_7, m41_2 +# 48| m48_11(shared_ptr>) = ^IndirectMustWriteSideEffect[-1] : &:r48_7 +# 48| r48_12(glval>>) = VariableAddress[sp_sp_const_int] : +# 48| r48_13(glval) = FunctionAddress[~shared_ptr] : +# 48| v48_14(void) = Call[~shared_ptr] : func:r48_13, this:r48_12 +# 48| v48_15(void) = ^IndirectReadSideEffect[-1] : &:r48_12, m37_2 +# 48| m48_16(shared_ptr>) = ^IndirectMustWriteSideEffect[-1] : &:r48_12 +# 48| r48_17(glval>) = VariableAddress[sp_const_int_pointer] : +# 48| r48_18(glval) = FunctionAddress[~shared_ptr] : +# 48| v48_19(void) = Call[~shared_ptr] : func:r48_18, this:r48_17 +# 48| v48_20(void) = ^IndirectReadSideEffect[-1] : &:r48_17, m33_2 +# 48| m48_21(shared_ptr) = ^IndirectMustWriteSideEffect[-1] : &:r48_17 +# 48| r48_22(glval>) = VariableAddress[sp_const_int] : +# 48| r48_23(glval) = FunctionAddress[~shared_ptr] : +# 48| v48_24(void) = Call[~shared_ptr] : func:r48_23, this:r48_22 +# 48| v48_25(void) = ^IndirectReadSideEffect[-1] : &:r48_22, m29_2 +# 48| m48_26(shared_ptr) = ^IndirectMustWriteSideEffect[-1] : &:r48_22 +# 28| v28_5(void) = ReturnVoid : +# 28| v28_6(void) = AliasedUse : ~m47_16 +# 28| v28_7(void) = ExitFunction : struct_init.cpp: # 9| Info infos_in_file[] @@ -15091,6 +15286,379 @@ struct_init.cpp: # 36| v36_11(void) = AliasedUse : ~m41_10 # 36| v36_12(void) = ExitFunction : +temp.cpp: +# 14| char temp_test() +# 14| Block 0 +# 14| v14_1(void) = EnterFunction : +# 14| m14_2(unknown) = AliasedDefinition : +# 14| m14_3(unknown) = InitializeNonLocal : +# 14| m14_4(unknown) = Chi : total:m14_2, partial:m14_3 +# 15| r15_1(glval) = VariableAddress[x] : +# 15| r15_2(glval) = VariableAddress[#temp15:14] : +# 15| m15_3(ClassWithDestructor2) = Uninitialized[#temp15:14] : &:r15_2 +# 15| r15_4(glval) = FunctionAddress[ClassWithDestructor2] : +# 15| v15_5(void) = Call[ClassWithDestructor2] : func:r15_4, this:r15_2 +# 15| m15_6(unknown) = ^CallSideEffect : ~m14_4 +# 15| m15_7(unknown) = Chi : total:m14_4, partial:m15_6 +# 15| m15_8(ClassWithDestructor2) = ^IndirectMayWriteSideEffect[-1] : &:r15_2 +# 15| m15_9(ClassWithDestructor2) = Chi : total:m15_3, partial:m15_8 +# 15| r15_10(glval) = FunctionAddress[get_x] : +# 15| r15_11(char) = Call[get_x] : func:r15_10, this:r15_2 +# 15| m15_12(unknown) = ^CallSideEffect : ~m15_7 +# 15| m15_13(unknown) = Chi : total:m15_7, partial:m15_12 +# 15| v15_14(void) = ^IndirectReadSideEffect[-1] : &:r15_2, m15_9 +# 15| m15_15(ClassWithDestructor2) = ^IndirectMayWriteSideEffect[-1] : &:r15_2 +# 15| m15_16(ClassWithDestructor2) = Chi : total:m15_9, partial:m15_15 +# 15| r15_17(glval) = CopyValue : r15_2 +# 15| r15_18(glval) = FunctionAddress[~ClassWithDestructor2] : +# 15| v15_19(void) = Call[~ClassWithDestructor2] : func:r15_18, this:r15_17 +# 15| m15_20(unknown) = ^CallSideEffect : ~m15_13 +# 15| m15_21(unknown) = Chi : total:m15_13, partial:m15_20 +# 15| v15_22(void) = ^IndirectReadSideEffect[-1] : &:r15_17, m15_16 +# 15| m15_23(ClassWithDestructor2) = ^IndirectMayWriteSideEffect[-1] : &:r15_17 +# 15| m15_24(ClassWithDestructor2) = Chi : total:m15_16, partial:m15_23 +# 15| m15_25(char) = Store[x] : &:r15_1, r15_11 +# 16| r16_1(glval) = VariableAddress[y] : +# 16| m16_2(ClassWithConstructor) = Uninitialized[y] : &:r16_1 +# 16| r16_3(glval) = FunctionAddress[ClassWithConstructor] : +# 16| r16_4(char) = Constant[97] : +# 16| r16_5(glval) = VariableAddress[#temp16:33] : +# 16| m16_6(ClassWithDestructor2) = Uninitialized[#temp16:33] : &:r16_5 +# 16| r16_7(glval) = FunctionAddress[ClassWithDestructor2] : +# 16| v16_8(void) = Call[ClassWithDestructor2] : func:r16_7, this:r16_5 +# 16| m16_9(unknown) = ^CallSideEffect : ~m15_21 +# 16| m16_10(unknown) = Chi : total:m15_21, partial:m16_9 +# 16| m16_11(ClassWithDestructor2) = ^IndirectMayWriteSideEffect[-1] : &:r16_5 +# 16| m16_12(ClassWithDestructor2) = Chi : total:m16_6, partial:m16_11 +# 16| r16_13(glval) = FunctionAddress[get_x] : +# 16| r16_14(char) = Call[get_x] : func:r16_13, this:r16_5 +# 16| m16_15(unknown) = ^CallSideEffect : ~m16_10 +# 16| m16_16(unknown) = Chi : total:m16_10, partial:m16_15 +# 16| v16_17(void) = ^IndirectReadSideEffect[-1] : &:r16_5, m16_12 +# 16| m16_18(ClassWithDestructor2) = ^IndirectMayWriteSideEffect[-1] : &:r16_5 +# 16| m16_19(ClassWithDestructor2) = Chi : total:m16_12, partial:m16_18 +# 16| v16_20(void) = Call[ClassWithConstructor] : func:r16_3, this:r16_1, 0:r16_4, 1:r16_14 +# 16| m16_21(unknown) = ^CallSideEffect : ~m16_16 +# 16| m16_22(unknown) = Chi : total:m16_16, partial:m16_21 +# 16| m16_23(ClassWithConstructor) = ^IndirectMayWriteSideEffect[-1] : &:r16_1 +# 16| m16_24(ClassWithConstructor) = Chi : total:m16_2, partial:m16_23 +# 16| r16_25(glval) = CopyValue : r16_5 +# 16| r16_26(glval) = FunctionAddress[~ClassWithDestructor2] : +# 16| v16_27(void) = Call[~ClassWithDestructor2] : func:r16_26, this:r16_25 +# 16| m16_28(unknown) = ^CallSideEffect : ~m16_22 +# 16| m16_29(unknown) = Chi : total:m16_22, partial:m16_28 +# 16| v16_30(void) = ^IndirectReadSideEffect[-1] : &:r16_25, m16_19 +# 16| m16_31(ClassWithDestructor2) = ^IndirectMayWriteSideEffect[-1] : &:r16_25 +# 16| m16_32(ClassWithDestructor2) = Chi : total:m16_19, partial:m16_31 +# 17| r17_1(glval) = VariableAddress[#return] : +# 17| r17_2(glval) = VariableAddress[#temp17:12] : +# 17| m17_3(ClassWithDestructor2) = Uninitialized[#temp17:12] : &:r17_2 +# 17| r17_4(glval) = FunctionAddress[ClassWithDestructor2] : +# 17| v17_5(void) = Call[ClassWithDestructor2] : func:r17_4, this:r17_2 +# 17| m17_6(unknown) = ^CallSideEffect : ~m16_29 +# 17| m17_7(unknown) = Chi : total:m16_29, partial:m17_6 +# 17| m17_8(ClassWithDestructor2) = ^IndirectMayWriteSideEffect[-1] : &:r17_2 +# 17| m17_9(ClassWithDestructor2) = Chi : total:m17_3, partial:m17_8 +# 17| r17_10(glval) = FunctionAddress[get_x] : +# 17| r17_11(char) = Call[get_x] : func:r17_10, this:r17_2 +# 17| m17_12(unknown) = ^CallSideEffect : ~m17_7 +# 17| m17_13(unknown) = Chi : total:m17_7, partial:m17_12 +# 17| v17_14(void) = ^IndirectReadSideEffect[-1] : &:r17_2, m17_9 +# 17| m17_15(ClassWithDestructor2) = ^IndirectMayWriteSideEffect[-1] : &:r17_2 +# 17| m17_16(ClassWithDestructor2) = Chi : total:m17_9, partial:m17_15 +# 17| r17_17(glval) = CopyValue : r17_2 +# 17| r17_18(glval) = FunctionAddress[~ClassWithDestructor2] : +# 17| v17_19(void) = Call[~ClassWithDestructor2] : func:r17_18, this:r17_17 +# 17| m17_20(unknown) = ^CallSideEffect : ~m17_13 +# 17| m17_21(unknown) = Chi : total:m17_13, partial:m17_20 +# 17| v17_22(void) = ^IndirectReadSideEffect[-1] : &:r17_17, m17_16 +# 17| m17_23(ClassWithDestructor2) = ^IndirectMayWriteSideEffect[-1] : &:r17_17 +# 17| m17_24(ClassWithDestructor2) = Chi : total:m17_16, partial:m17_23 +# 17| m17_25(char) = Store[#return] : &:r17_1, r17_11 +# 18| r18_1(glval) = CopyValue : r16_5 +# 18| r18_2(glval) = FunctionAddress[~ClassWithDestructor2] : +# 18| v18_3(void) = Call[~ClassWithDestructor2] : func:r18_2, this:r18_1 +# 18| m18_4(unknown) = ^CallSideEffect : ~m17_21 +# 18| m18_5(unknown) = Chi : total:m17_21, partial:m18_4 +# 18| v18_6(void) = ^IndirectReadSideEffect[-1] : &:r18_1, m16_32 +# 18| m18_7(ClassWithDestructor2) = ^IndirectMayWriteSideEffect[-1] : &:r18_1 +# 18| m18_8(ClassWithDestructor2) = Chi : total:m16_32, partial:m18_7 +# 14| r14_5(glval) = VariableAddress[#return] : +# 14| v14_6(void) = ReturnValue : &:r14_5, m17_25 +# 14| v14_7(void) = AliasedUse : ~m18_5 +# 14| v14_8(void) = ExitFunction : + +# 21| char temp_test2() +# 21| Block 0 +# 21| v21_1(void) = EnterFunction : +# 21| m21_2(unknown) = AliasedDefinition : +# 21| m21_3(unknown) = InitializeNonLocal : +# 21| m21_4(unknown) = Chi : total:m21_2, partial:m21_3 +# 22| r22_1(glval) = FunctionAddress[operator new] : +# 22| r22_2(unsigned long) = Constant[1] : +# 22| r22_3(void *) = Call[operator new] : func:r22_1, 0:r22_2 +# 22| m22_4(unknown) = ^CallSideEffect : ~m21_4 +# 22| m22_5(unknown) = Chi : total:m21_4, partial:m22_4 +# 22| m22_6(unknown) = ^InitializeDynamicAllocation : &:r22_3 +# 22| r22_7(ClassWithDestructor2 *) = Convert : r22_3 +# 22| r22_8(glval) = FunctionAddress[ClassWithDestructor2] : +# 22| v22_9(void) = Call[ClassWithDestructor2] : func:r22_8, this:r22_7 +# 22| m22_10(unknown) = ^CallSideEffect : ~m22_5 +# 22| m22_11(unknown) = Chi : total:m22_5, partial:m22_10 +# 22| m22_12(ClassWithDestructor2) = ^IndirectMayWriteSideEffect[-1] : &:r22_7 +# 22| m22_13(unknown) = Chi : total:m22_6, partial:m22_12 +# 23| r23_1(glval) = VariableAddress[#return] : +# 23| r23_2(glval) = VariableAddress[#temp23:12] : +# 23| m23_3(ClassWithDestructor2) = Uninitialized[#temp23:12] : &:r23_2 +# 23| r23_4(glval) = FunctionAddress[ClassWithDestructor2] : +# 23| v23_5(void) = Call[ClassWithDestructor2] : func:r23_4, this:r23_2 +# 23| m23_6(unknown) = ^CallSideEffect : ~m22_11 +# 23| m23_7(unknown) = Chi : total:m22_11, partial:m23_6 +# 23| m23_8(ClassWithDestructor2) = ^IndirectMayWriteSideEffect[-1] : &:r23_2 +# 23| m23_9(ClassWithDestructor2) = Chi : total:m23_3, partial:m23_8 +# 23| r23_10(glval) = FunctionAddress[get_x] : +# 23| r23_11(char) = Call[get_x] : func:r23_10, this:r23_2 +# 23| m23_12(unknown) = ^CallSideEffect : ~m23_7 +# 23| m23_13(unknown) = Chi : total:m23_7, partial:m23_12 +# 23| v23_14(void) = ^IndirectReadSideEffect[-1] : &:r23_2, m23_9 +# 23| m23_15(ClassWithDestructor2) = ^IndirectMayWriteSideEffect[-1] : &:r23_2 +# 23| m23_16(ClassWithDestructor2) = Chi : total:m23_9, partial:m23_15 +# 23| r23_17(int) = Convert : r23_11 +# 23| r23_18(glval) = VariableAddress[#temp23:45] : +# 23| m23_19(ClassWithDestructor2) = Uninitialized[#temp23:45] : &:r23_18 +# 23| r23_20(glval) = FunctionAddress[ClassWithDestructor2] : +# 23| v23_21(void) = Call[ClassWithDestructor2] : func:r23_20, this:r23_18 +# 23| m23_22(unknown) = ^CallSideEffect : ~m23_13 +# 23| m23_23(unknown) = Chi : total:m23_13, partial:m23_22 +# 23| m23_24(ClassWithDestructor2) = ^IndirectMayWriteSideEffect[-1] : &:r23_18 +# 23| m23_25(ClassWithDestructor2) = Chi : total:m23_19, partial:m23_24 +# 23| r23_26(glval) = FunctionAddress[get_x] : +# 23| r23_27(char) = Call[get_x] : func:r23_26, this:r23_18 +# 23| m23_28(unknown) = ^CallSideEffect : ~m23_23 +# 23| m23_29(unknown) = Chi : total:m23_23, partial:m23_28 +# 23| v23_30(void) = ^IndirectReadSideEffect[-1] : &:r23_18, m23_25 +# 23| m23_31(ClassWithDestructor2) = ^IndirectMayWriteSideEffect[-1] : &:r23_18 +# 23| m23_32(ClassWithDestructor2) = Chi : total:m23_25, partial:m23_31 +# 23| r23_33(int) = Convert : r23_27 +# 23| r23_34(int) = Add : r23_17, r23_33 +# 23| r23_35(glval) = CopyValue : r23_18 +# 23| r23_36(glval) = FunctionAddress[~ClassWithDestructor2] : +# 23| v23_37(void) = Call[~ClassWithDestructor2] : func:r23_36, this:r23_35 +# 23| m23_38(unknown) = ^CallSideEffect : ~m23_29 +# 23| m23_39(unknown) = Chi : total:m23_29, partial:m23_38 +# 23| v23_40(void) = ^IndirectReadSideEffect[-1] : &:r23_35, m23_32 +# 23| m23_41(ClassWithDestructor2) = ^IndirectMayWriteSideEffect[-1] : &:r23_35 +# 23| m23_42(ClassWithDestructor2) = Chi : total:m23_32, partial:m23_41 +# 23| r23_43(glval) = CopyValue : r23_2 +# 23| r23_44(glval) = FunctionAddress[~ClassWithDestructor2] : +# 23| v23_45(void) = Call[~ClassWithDestructor2] : func:r23_44, this:r23_43 +# 23| m23_46(unknown) = ^CallSideEffect : ~m23_39 +# 23| m23_47(unknown) = Chi : total:m23_39, partial:m23_46 +# 23| v23_48(void) = ^IndirectReadSideEffect[-1] : &:r23_43, m23_16 +# 23| m23_49(ClassWithDestructor2) = ^IndirectMayWriteSideEffect[-1] : &:r23_43 +# 23| m23_50(ClassWithDestructor2) = Chi : total:m23_16, partial:m23_49 +# 23| r23_51(char) = Convert : r23_34 +# 23| m23_52(char) = Store[#return] : &:r23_1, r23_51 +# 21| r21_5(glval) = VariableAddress[#return] : +# 21| v21_6(void) = ReturnValue : &:r21_5, m23_52 +# 21| v21_7(void) = AliasedUse : ~m23_47 +# 21| v21_8(void) = ExitFunction : + +# 29| void temp_test3() +# 29| Block 0 +# 29| v29_1(void) = EnterFunction : +# 29| m29_2(unknown) = AliasedDefinition : +# 29| m29_3(unknown) = InitializeNonLocal : +# 29| m29_4(unknown) = Chi : total:m29_2, partial:m29_3 +# 30| r30_1(glval) = VariableAddress[rs] : +# 30| r30_2(glval) = VariableAddress[#temp30:38] : +# 30| r30_3(glval) = FunctionAddress[returnValue] : +# 30| r30_4(ClassWithDestructor2) = Call[returnValue] : func:r30_3 +# 30| m30_5(unknown) = ^CallSideEffect : ~m29_4 +# 30| m30_6(unknown) = Chi : total:m29_4, partial:m30_5 +# 30| m30_7(ClassWithDestructor2) = Store[#temp30:38] : &:r30_2, r30_4 +# 30| r30_8(glval) = Convert : r30_2 +# 30| r30_9(ClassWithDestructor2 &) = CopyValue : r30_8 +# 30| m30_10(ClassWithDestructor2 &) = Store[rs] : &:r30_1, r30_9 +# 31| v31_1(void) = NoOp : +# 31| r31_2(glval) = CopyValue : r30_2 +# 31| r31_3(glval) = FunctionAddress[~ClassWithDestructor2] : +# 31| v31_4(void) = Call[~ClassWithDestructor2] : func:r31_3, this:r31_2 +# 31| m31_5(unknown) = ^CallSideEffect : ~m30_6 +# 31| m31_6(unknown) = Chi : total:m30_6, partial:m31_5 +# 31| v31_7(void) = ^IndirectReadSideEffect[-1] : &:r31_2, m30_7 +# 31| m31_8(ClassWithDestructor2) = ^IndirectMayWriteSideEffect[-1] : &:r31_2 +# 31| m31_9(ClassWithDestructor2) = Chi : total:m30_7, partial:m31_8 +# 29| v29_5(void) = ReturnVoid : +# 29| v29_6(void) = AliasedUse : ~m31_6 +# 29| v29_7(void) = ExitFunction : + +# 33| void temp_test4() +# 33| Block 0 +# 33| v33_1(void) = EnterFunction : +# 33| m33_2(unknown) = AliasedDefinition : +# 33| m33_3(unknown) = InitializeNonLocal : +# 33| m33_4(unknown) = Chi : total:m33_2, partial:m33_3 +# 34| r34_1(glval) = VariableAddress[c] : +# 34| m34_2(ClassWithDestructor2) = Uninitialized[c] : &:r34_1 +# 34| r34_3(glval) = FunctionAddress[ClassWithDestructor2] : +# 34| v34_4(void) = Call[ClassWithDestructor2] : func:r34_3, this:r34_1 +# 34| m34_5(unknown) = ^CallSideEffect : ~m33_4 +# 34| m34_6(unknown) = Chi : total:m33_4, partial:m34_5 +# 34| m34_7(ClassWithDestructor2) = ^IndirectMayWriteSideEffect[-1] : &:r34_1 +# 34| m34_8(ClassWithDestructor2) = Chi : total:m34_2, partial:m34_7 +# 35| r35_1(glval) = VariableAddress[rs2] : +# 35| r35_2(glval) = VariableAddress[#temp35:39] : +# 35| r35_3(glval) = FunctionAddress[returnValue] : +# 35| r35_4(ClassWithDestructor2) = Call[returnValue] : func:r35_3 +# 35| m35_5(unknown) = ^CallSideEffect : ~m34_6 +# 35| m35_6(unknown) = Chi : total:m34_6, partial:m35_5 +# 35| m35_7(ClassWithDestructor2) = Store[#temp35:39] : &:r35_2, r35_4 +# 35| r35_8(glval) = Convert : r35_2 +# 35| r35_9(ClassWithDestructor2 &) = CopyValue : r35_8 +# 35| m35_10(ClassWithDestructor2 &) = Store[rs2] : &:r35_1, r35_9 +# 36| v36_1(void) = NoOp : +# 36| r36_2(glval) = CopyValue : r35_2 +# 36| r36_3(glval) = FunctionAddress[~ClassWithDestructor2] : +# 36| v36_4(void) = Call[~ClassWithDestructor2] : func:r36_3, this:r36_2 +# 36| m36_5(unknown) = ^CallSideEffect : ~m35_6 +# 36| m36_6(unknown) = Chi : total:m35_6, partial:m36_5 +# 36| v36_7(void) = ^IndirectReadSideEffect[-1] : &:r36_2, m35_7 +# 36| m36_8(ClassWithDestructor2) = ^IndirectMayWriteSideEffect[-1] : &:r36_2 +# 36| m36_9(ClassWithDestructor2) = Chi : total:m35_7, partial:m36_8 +# 36| r36_10(glval) = VariableAddress[c] : +# 36| r36_11(glval) = FunctionAddress[~ClassWithDestructor2] : +# 36| v36_12(void) = Call[~ClassWithDestructor2] : func:r36_11, this:r36_10 +# 36| m36_13(unknown) = ^CallSideEffect : ~m36_6 +# 36| m36_14(unknown) = Chi : total:m36_6, partial:m36_13 +# 36| v36_15(void) = ^IndirectReadSideEffect[-1] : &:r36_10, m34_8 +# 36| m36_16(ClassWithDestructor2) = ^IndirectMayWriteSideEffect[-1] : &:r36_10 +# 36| m36_17(ClassWithDestructor2) = Chi : total:m34_8, partial:m36_16 +# 33| v33_5(void) = ReturnVoid : +# 33| v33_6(void) = AliasedUse : ~m36_14 +# 33| v33_7(void) = ExitFunction : + +# 38| void temp_test5(bool) +# 38| Block 0 +# 38| v38_1(void) = EnterFunction : +# 38| m38_2(unknown) = AliasedDefinition : +# 38| m38_3(unknown) = InitializeNonLocal : +# 38| m38_4(unknown) = Chi : total:m38_2, partial:m38_3 +# 38| r38_5(glval) = VariableAddress[b] : +# 38| m38_6(bool) = InitializeParameter[b] : &:r38_5 +# 39| r39_1(glval) = VariableAddress[#temp39:3] : +# 39| r39_2(glval) = VariableAddress[b] : +# 39| r39_3(bool) = Load[b] : &:r39_2, m38_6 +# 39| v39_4(void) = ConditionalBranch : r39_3 +#-----| False -> Block 3 +#-----| True -> Block 2 + +# 39| Block 1 +# 39| m39_5(unknown) = Phi : from 2:~m39_23, from 3:~m39_34 +# 39| m39_6(ClassWithDestructor2) = Phi : from 2:m39_28, from 3:m39_39 +# 39| r39_7(glval) = VariableAddress[#temp39:3] : +# 39| r39_8(ClassWithDestructor2) = Load[#temp39:3] : &:r39_7, m39_6 +# 39| r39_9(glval) = CopyValue : r39_1 +# 39| r39_10(glval) = FunctionAddress[~ClassWithDestructor2] : +# 39| v39_11(void) = Call[~ClassWithDestructor2] : func:r39_10, this:r39_9 +# 39| m39_12(unknown) = ^CallSideEffect : ~m39_5 +# 39| m39_13(unknown) = Chi : total:m39_5, partial:m39_12 +# 39| v39_14(void) = ^IndirectReadSideEffect[-1] : &:r39_9, ~m? +# 39| m39_15(ClassWithDestructor2) = ^IndirectMayWriteSideEffect[-1] : &:r39_9 +# 39| m39_16(ClassWithDestructor2) = Chi : total:~m?, partial:m39_15 +# 39| m39_17(ClassWithDestructor2) = Store[#temp39:3] : &:r39_1, r39_8 +# 40| v40_1(void) = NoOp : +# 38| v38_7(void) = ReturnVoid : +# 38| v38_8(void) = AliasedUse : ~m39_13 +# 38| v38_9(void) = ExitFunction : + +# 39| Block 2 +# 39| r39_18(glval) = VariableAddress[#temp39:7] : +# 39| m39_19(ClassWithDestructor2) = Uninitialized[#temp39:7] : &:r39_18 +# 39| r39_20(glval) = FunctionAddress[ClassWithDestructor2] : +# 39| v39_21(void) = Call[ClassWithDestructor2] : func:r39_20, this:r39_18 +# 39| m39_22(unknown) = ^CallSideEffect : ~m38_4 +# 39| m39_23(unknown) = Chi : total:m38_4, partial:m39_22 +# 39| m39_24(ClassWithDestructor2) = ^IndirectMayWriteSideEffect[-1] : &:r39_18 +# 39| m39_25(ClassWithDestructor2) = Chi : total:m39_19, partial:m39_24 +# 39| r39_26(ClassWithDestructor2) = Load[#temp39:7] : &:r39_18, m39_25 +# 39| r39_27(glval) = VariableAddress[#temp39:3] : +# 39| m39_28(ClassWithDestructor2) = Store[#temp39:3] : &:r39_27, r39_26 +#-----| Goto -> Block 1 + +# 39| Block 3 +# 39| r39_29(glval) = VariableAddress[#temp39:32] : +# 39| m39_30(ClassWithDestructor2) = Uninitialized[#temp39:32] : &:r39_29 +# 39| r39_31(glval) = FunctionAddress[ClassWithDestructor2] : +# 39| v39_32(void) = Call[ClassWithDestructor2] : func:r39_31, this:r39_29 +# 39| m39_33(unknown) = ^CallSideEffect : ~m38_4 +# 39| m39_34(unknown) = Chi : total:m38_4, partial:m39_33 +# 39| m39_35(ClassWithDestructor2) = ^IndirectMayWriteSideEffect[-1] : &:r39_29 +# 39| m39_36(ClassWithDestructor2) = Chi : total:m39_30, partial:m39_35 +# 39| r39_37(ClassWithDestructor2) = Load[#temp39:32] : &:r39_29, m39_36 +# 39| r39_38(glval) = VariableAddress[#temp39:3] : +# 39| m39_39(ClassWithDestructor2) = Store[#temp39:3] : &:r39_38, r39_37 +#-----| Goto -> Block 1 + +# 42| void temp_test6(bool) +# 42| Block 0 +# 42| v42_1(void) = EnterFunction : +# 42| m42_2(unknown) = AliasedDefinition : +# 42| m42_3(unknown) = InitializeNonLocal : +# 42| m42_4(unknown) = Chi : total:m42_2, partial:m42_3 +# 42| r42_5(glval) = VariableAddress[b] : +# 42| m42_6(bool) = InitializeParameter[b] : &:r42_5 +# 43| r43_1(glval) = VariableAddress[b] : +# 43| r43_2(bool) = Load[b] : &:r43_1, m42_6 +# 43| v43_3(void) = ConditionalBranch : r43_2 +#-----| False -> Block 3 +#-----| True -> Block 2 + +# 43| Block 1 +# 43| m43_4(char) = Phi : from 2:m43_23, from 3:m43_40 +# 43| r43_5(glval) = VariableAddress[#temp43:3] : +# 43| r43_6(char) = Load[#temp43:3] : &:r43_5, m43_4 + +# 43| Block 2 +# 43| r43_7(glval) = VariableAddress[#temp43:7] : +# 43| m43_8(ClassWithDestructor2) = Uninitialized[#temp43:7] : &:r43_7 +# 43| r43_9(glval) = FunctionAddress[ClassWithDestructor2] : +# 43| v43_10(void) = Call[ClassWithDestructor2] : func:r43_9, this:r43_7 +# 43| m43_11(unknown) = ^CallSideEffect : ~m42_4 +# 43| m43_12(unknown) = Chi : total:m42_4, partial:m43_11 +# 43| m43_13(ClassWithDestructor2) = ^IndirectMayWriteSideEffect[-1] : &:r43_7 +# 43| m43_14(ClassWithDestructor2) = Chi : total:m43_8, partial:m43_13 +# 43| r43_15(glval) = FunctionAddress[get_x] : +# 43| r43_16(char) = Call[get_x] : func:r43_15, this:r43_7 +# 43| m43_17(unknown) = ^CallSideEffect : ~m43_12 +# 43| m43_18(unknown) = Chi : total:m43_12, partial:m43_17 +# 43| v43_19(void) = ^IndirectReadSideEffect[-1] : &:r43_7, m43_14 +# 43| m43_20(ClassWithDestructor2) = ^IndirectMayWriteSideEffect[-1] : &:r43_7 +# 43| m43_21(ClassWithDestructor2) = Chi : total:m43_14, partial:m43_20 +# 43| r43_22(glval) = VariableAddress[#temp43:3] : +# 43| m43_23(char) = Store[#temp43:3] : &:r43_22, r43_16 +#-----| Goto -> Block 1 + +# 43| Block 3 +# 43| r43_24(glval) = VariableAddress[#temp43:39] : +# 43| m43_25(ClassWithDestructor2) = Uninitialized[#temp43:39] : &:r43_24 +# 43| r43_26(glval) = FunctionAddress[ClassWithDestructor2] : +# 43| v43_27(void) = Call[ClassWithDestructor2] : func:r43_26, this:r43_24 +# 43| m43_28(unknown) = ^CallSideEffect : ~m42_4 +# 43| m43_29(unknown) = Chi : total:m42_4, partial:m43_28 +# 43| m43_30(ClassWithDestructor2) = ^IndirectMayWriteSideEffect[-1] : &:r43_24 +# 43| m43_31(ClassWithDestructor2) = Chi : total:m43_25, partial:m43_30 +# 43| r43_32(glval) = FunctionAddress[get_x] : +# 43| r43_33(char) = Call[get_x] : func:r43_32, this:r43_24 +# 43| m43_34(unknown) = ^CallSideEffect : ~m43_29 +# 43| m43_35(unknown) = Chi : total:m43_29, partial:m43_34 +# 43| v43_36(void) = ^IndirectReadSideEffect[-1] : &:r43_24, m43_31 +# 43| m43_37(ClassWithDestructor2) = ^IndirectMayWriteSideEffect[-1] : &:r43_24 +# 43| m43_38(ClassWithDestructor2) = Chi : total:m43_31, partial:m43_37 +# 43| r43_39(glval) = VariableAddress[#temp43:3] : +# 43| m43_40(char) = Store[#temp43:3] : &:r43_39, r43_33 +#-----| Goto -> Block 1 + try_except.c: # 6| void f() # 6| Block 0 diff --git a/cpp/ql/test/library-tests/ir/ir/aliased_ssa_consistency.expected b/cpp/ql/test/library-tests/ir/ir/aliased_ssa_consistency.expected index b93c7d2649f8..5519fdbef090 100644 --- a/cpp/ql/test/library-tests/ir/ir/aliased_ssa_consistency.expected +++ b/cpp/ql/test/library-tests/ir/ir/aliased_ssa_consistency.expected @@ -6,6 +6,7 @@ missingOperandType duplicateChiOperand sideEffectWithoutPrimary instructionWithoutSuccessor +| temp.cpp:43:3:43:68 | Load: ... ? ... : ... | Instruction 'Load: ... ? ... : ...' has no successors in function '$@'. | temp.cpp:42:6:42:15 | void temp_test6(bool) | void temp_test6(bool) | ambiguousSuccessors unexplainedLoop unnecessaryPhiInstruction diff --git a/cpp/ql/test/library-tests/ir/ir/aliased_ssa_consistency_unsound.expected b/cpp/ql/test/library-tests/ir/ir/aliased_ssa_consistency_unsound.expected index b93c7d2649f8..07affb5d00e1 100644 --- a/cpp/ql/test/library-tests/ir/ir/aliased_ssa_consistency_unsound.expected +++ b/cpp/ql/test/library-tests/ir/ir/aliased_ssa_consistency_unsound.expected @@ -3,9 +3,13 @@ unexpectedOperand duplicateOperand missingPhiOperand missingOperandType +| ir.cpp:1378:5:1378:30 | ChiTotal | Operand 'ChiTotal' of instruction 'Chi' is missing a type in function '$@'. | ir.cpp:1367:6:1367:21 | void temporary_string() | void temporary_string() | +| ir.cpp:1390:5:1390:39 | ChiTotal | Operand 'ChiTotal' of instruction 'Chi' is missing a type in function '$@'. | ir.cpp:1381:6:1381:30 | void temporary_destructor_only() | void temporary_destructor_only() | +| temp.cpp:39:3:39:53 | ChiTotal | Operand 'ChiTotal' of instruction 'Chi' is missing a type in function '$@'. | temp.cpp:38:6:38:15 | void temp_test5(bool) | void temp_test5(bool) | duplicateChiOperand sideEffectWithoutPrimary instructionWithoutSuccessor +| temp.cpp:43:3:43:68 | Load: ... ? ... : ... | Instruction 'Load: ... ? ... : ...' has no successors in function '$@'. | temp.cpp:42:6:42:15 | void temp_test6(bool) | void temp_test6(bool) | ambiguousSuccessors unexplainedLoop unnecessaryPhiInstruction diff --git a/cpp/ql/test/library-tests/ir/ir/operand_locations.expected b/cpp/ql/test/library-tests/ir/ir/operand_locations.expected index 6d9a76dc0687..891a2fbef8a4 100644 --- a/cpp/ql/test/library-tests/ir/ir/operand_locations.expected +++ b/cpp/ql/test/library-tests/ir/ir/operand_locations.expected @@ -923,8 +923,8 @@ | file://:0:0:0:0 | SideEffect | m2168_34 | | file://:0:0:0:0 | SideEffect | m2246_21 | | file://:0:0:0:0 | SideEffect | m2246_21 | -| file://:0:0:0:0 | SideEffect | m2246_40 | -| file://:0:0:0:0 | SideEffect | m2246_40 | +| file://:0:0:0:0 | SideEffect | m2246_48 | +| file://:0:0:0:0 | SideEffect | m2246_48 | | file://:0:0:0:0 | SideEffect | ~m0_4 | | file://:0:0:0:0 | SideEffect | ~m0_4 | | file://:0:0:0:0 | SideEffect | ~m0_4 | @@ -4097,15 +4097,26 @@ | ir.cpp:809:7:809:13 | Address | &:r809_3 | | ir.cpp:809:7:809:13 | Address | &:r809_3 | | ir.cpp:809:7:809:13 | Address | &:r809_16 | +| ir.cpp:809:7:809:13 | Address | &:r809_24 | +| ir.cpp:809:7:809:13 | Address | &:r809_24 | | ir.cpp:809:7:809:13 | Arg(0) | 0:r809_16 | | ir.cpp:809:7:809:13 | Arg(this) | this:r809_3 | +| ir.cpp:809:7:809:13 | Arg(this) | this:r809_24 | | ir.cpp:809:7:809:13 | CallTarget | func:r809_5 | +| ir.cpp:809:7:809:13 | CallTarget | func:r809_25 | | ir.cpp:809:7:809:13 | ChiPartial | partial:m809_10 | | ir.cpp:809:7:809:13 | ChiPartial | partial:m809_13 | +| ir.cpp:809:7:809:13 | ChiPartial | partial:m809_27 | +| ir.cpp:809:7:809:13 | ChiPartial | partial:m809_30 | | ir.cpp:809:7:809:13 | ChiTotal | total:m808_8 | | ir.cpp:809:7:809:13 | ChiTotal | total:m809_4 | +| ir.cpp:809:7:809:13 | ChiTotal | total:m809_14 | +| ir.cpp:809:7:809:13 | ChiTotal | total:m809_19 | +| ir.cpp:809:7:809:13 | SideEffect | m809_14 | | ir.cpp:809:7:809:13 | SideEffect | ~m808_8 | | ir.cpp:809:7:809:13 | SideEffect | ~m809_14 | +| ir.cpp:809:7:809:13 | SideEffect | ~m809_19 | +| ir.cpp:809:7:809:13 | Unary | r809_3 | | ir.cpp:809:7:809:13 | Unary | r809_3 | | ir.cpp:809:7:809:13 | Unary | r809_15 | | ir.cpp:809:13:809:13 | Address | &:r809_8 | @@ -4127,15 +4138,26 @@ | ir.cpp:810:7:810:26 | Address | &:r810_3 | | ir.cpp:810:7:810:26 | Address | &:r810_3 | | ir.cpp:810:7:810:26 | Address | &:r810_16 | +| ir.cpp:810:7:810:26 | Address | &:r810_24 | +| ir.cpp:810:7:810:26 | Address | &:r810_24 | | ir.cpp:810:7:810:26 | Arg(0) | 0:r810_16 | | ir.cpp:810:7:810:26 | Arg(this) | this:r810_3 | +| ir.cpp:810:7:810:26 | Arg(this) | this:r810_24 | | ir.cpp:810:7:810:26 | CallTarget | func:r810_5 | +| ir.cpp:810:7:810:26 | CallTarget | func:r810_25 | | ir.cpp:810:7:810:26 | ChiPartial | partial:m810_10 | | ir.cpp:810:7:810:26 | ChiPartial | partial:m810_13 | -| ir.cpp:810:7:810:26 | ChiTotal | total:m809_19 | +| ir.cpp:810:7:810:26 | ChiPartial | partial:m810_27 | +| ir.cpp:810:7:810:26 | ChiPartial | partial:m810_30 | +| ir.cpp:810:7:810:26 | ChiTotal | total:m809_28 | | ir.cpp:810:7:810:26 | ChiTotal | total:m810_4 | -| ir.cpp:810:7:810:26 | SideEffect | ~m809_19 | +| ir.cpp:810:7:810:26 | ChiTotal | total:m810_14 | +| ir.cpp:810:7:810:26 | ChiTotal | total:m810_19 | +| ir.cpp:810:7:810:26 | SideEffect | m810_14 | +| ir.cpp:810:7:810:26 | SideEffect | ~m809_28 | | ir.cpp:810:7:810:26 | SideEffect | ~m810_14 | +| ir.cpp:810:7:810:26 | SideEffect | ~m810_19 | +| ir.cpp:810:7:810:26 | Unary | r810_3 | | ir.cpp:810:7:810:26 | Unary | r810_3 | | ir.cpp:810:7:810:26 | Unary | r810_15 | | ir.cpp:810:25:810:25 | Address | &:r810_8 | @@ -4171,8 +4193,8 @@ | ir.cpp:816:3:816:3 | SideEffect | m801_8 | | ir.cpp:816:5:816:5 | CallTarget | func:r816_2 | | ir.cpp:816:5:816:5 | ChiPartial | partial:m816_8 | -| ir.cpp:816:5:816:5 | ChiTotal | total:m810_19 | -| ir.cpp:816:5:816:5 | SideEffect | ~m810_19 | +| ir.cpp:816:5:816:5 | ChiTotal | total:m810_28 | +| ir.cpp:816:5:816:5 | SideEffect | ~m810_28 | | ir.cpp:816:5:816:5 | Unary | r816_7 | | ir.cpp:816:7:816:16 | Address | &:r816_6 | | ir.cpp:816:7:816:16 | Arg(0) | 0:r816_6 | @@ -4243,15 +4265,26 @@ | ir.cpp:823:7:823:13 | Address | &:r823_3 | | ir.cpp:823:7:823:13 | Address | &:r823_3 | | ir.cpp:823:7:823:13 | Address | &:r823_17 | +| ir.cpp:823:7:823:13 | Address | &:r823_25 | +| ir.cpp:823:7:823:13 | Address | &:r823_25 | | ir.cpp:823:7:823:13 | Arg(0) | 0:r823_17 | | ir.cpp:823:7:823:13 | Arg(this) | this:r823_3 | +| ir.cpp:823:7:823:13 | Arg(this) | this:r823_25 | | ir.cpp:823:7:823:13 | CallTarget | func:r823_5 | +| ir.cpp:823:7:823:13 | CallTarget | func:r823_26 | | ir.cpp:823:7:823:13 | ChiPartial | partial:m823_11 | | ir.cpp:823:7:823:13 | ChiPartial | partial:m823_14 | +| ir.cpp:823:7:823:13 | ChiPartial | partial:m823_28 | +| ir.cpp:823:7:823:13 | ChiPartial | partial:m823_31 | | ir.cpp:823:7:823:13 | ChiTotal | total:m822_9 | | ir.cpp:823:7:823:13 | ChiTotal | total:m823_4 | +| ir.cpp:823:7:823:13 | ChiTotal | total:m823_15 | +| ir.cpp:823:7:823:13 | ChiTotal | total:m823_20 | +| ir.cpp:823:7:823:13 | SideEffect | m823_15 | | ir.cpp:823:7:823:13 | SideEffect | ~m822_9 | | ir.cpp:823:7:823:13 | SideEffect | ~m823_15 | +| ir.cpp:823:7:823:13 | SideEffect | ~m823_20 | +| ir.cpp:823:7:823:13 | Unary | r823_3 | | ir.cpp:823:7:823:13 | Unary | r823_3 | | ir.cpp:823:7:823:13 | Unary | r823_16 | | ir.cpp:823:13:823:13 | Address | &:r823_9 | @@ -4274,15 +4307,26 @@ | ir.cpp:824:7:824:26 | Address | &:r824_3 | | ir.cpp:824:7:824:26 | Address | &:r824_3 | | ir.cpp:824:7:824:26 | Address | &:r824_17 | +| ir.cpp:824:7:824:26 | Address | &:r824_25 | +| ir.cpp:824:7:824:26 | Address | &:r824_25 | | ir.cpp:824:7:824:26 | Arg(0) | 0:r824_17 | | ir.cpp:824:7:824:26 | Arg(this) | this:r824_3 | +| ir.cpp:824:7:824:26 | Arg(this) | this:r824_25 | | ir.cpp:824:7:824:26 | CallTarget | func:r824_5 | +| ir.cpp:824:7:824:26 | CallTarget | func:r824_26 | | ir.cpp:824:7:824:26 | ChiPartial | partial:m824_11 | | ir.cpp:824:7:824:26 | ChiPartial | partial:m824_14 | -| ir.cpp:824:7:824:26 | ChiTotal | total:m823_20 | +| ir.cpp:824:7:824:26 | ChiPartial | partial:m824_28 | +| ir.cpp:824:7:824:26 | ChiPartial | partial:m824_31 | +| ir.cpp:824:7:824:26 | ChiTotal | total:m823_29 | | ir.cpp:824:7:824:26 | ChiTotal | total:m824_4 | -| ir.cpp:824:7:824:26 | SideEffect | ~m823_20 | +| ir.cpp:824:7:824:26 | ChiTotal | total:m824_15 | +| ir.cpp:824:7:824:26 | ChiTotal | total:m824_20 | +| ir.cpp:824:7:824:26 | SideEffect | m824_15 | +| ir.cpp:824:7:824:26 | SideEffect | ~m823_29 | | ir.cpp:824:7:824:26 | SideEffect | ~m824_15 | +| ir.cpp:824:7:824:26 | SideEffect | ~m824_20 | +| ir.cpp:824:7:824:26 | Unary | r824_3 | | ir.cpp:824:7:824:26 | Unary | r824_3 | | ir.cpp:824:7:824:26 | Unary | r824_16 | | ir.cpp:824:25:824:25 | Address | &:r824_9 | @@ -4322,8 +4366,8 @@ | ir.cpp:830:3:830:3 | SideEffect | m802_8 | | ir.cpp:830:5:830:5 | CallTarget | func:r830_2 | | ir.cpp:830:5:830:5 | ChiPartial | partial:m830_9 | -| ir.cpp:830:5:830:5 | ChiTotal | total:m824_20 | -| ir.cpp:830:5:830:5 | SideEffect | ~m824_20 | +| ir.cpp:830:5:830:5 | ChiTotal | total:m824_29 | +| ir.cpp:830:5:830:5 | SideEffect | ~m824_29 | | ir.cpp:830:5:830:5 | Unary | r830_8 | | ir.cpp:830:7:830:17 | Address | &:r830_7 | | ir.cpp:830:7:830:17 | Arg(0) | 0:r830_7 | @@ -6758,7 +6802,7 @@ | ir.cpp:1329:5:1329:15 | StoreValue | r1329_2 | | ir.cpp:1367:6:1367:21 | ChiPartial | partial:m1367_3 | | ir.cpp:1367:6:1367:21 | ChiTotal | total:m1367_2 | -| ir.cpp:1367:6:1367:21 | SideEffect | ~m1379_6 | +| ir.cpp:1367:6:1367:21 | SideEffect | ~m1379_14 | | ir.cpp:1368:12:1368:12 | Address | &:r1368_1 | | ir.cpp:1368:16:1368:34 | CallTarget | func:r1368_2 | | ir.cpp:1368:16:1368:34 | ChiPartial | partial:m1368_4 | @@ -6774,6 +6818,7 @@ | ir.cpp:1369:24:1369:44 | Address | &:r1369_2 | | ir.cpp:1369:24:1369:44 | StoreValue | r1369_9 | | ir.cpp:1369:24:1369:44 | Unary | r1369_2 | +| ir.cpp:1369:24:1369:44 | Unary | r1369_2 | | ir.cpp:1369:24:1369:44 | Unary | r1369_8 | | ir.cpp:1371:5:1371:13 | CallTarget | func:r1371_1 | | ir.cpp:1371:5:1371:13 | ChiPartial | partial:m1371_6 | @@ -6792,17 +6837,28 @@ | ir.cpp:1372:23:1372:27 | Address | &:r1372_2 | | ir.cpp:1372:23:1372:27 | Address | &:r1372_6 | | ir.cpp:1372:23:1372:27 | Address | &:r1372_13 | +| ir.cpp:1372:23:1372:27 | Address | &:r1372_18 | +| ir.cpp:1372:23:1372:27 | Address | &:r1372_18 | | ir.cpp:1372:23:1372:27 | Arg(0) | 0:r1372_6 | | ir.cpp:1372:23:1372:27 | Arg(0) | 0:r1372_13 | | ir.cpp:1372:23:1372:27 | Arg(this) | this:r1372_2 | +| ir.cpp:1372:23:1372:27 | Arg(this) | this:r1372_18 | | ir.cpp:1372:23:1372:27 | CallTarget | func:r1372_4 | +| ir.cpp:1372:23:1372:27 | CallTarget | func:r1372_19 | | ir.cpp:1372:23:1372:27 | ChiPartial | partial:m1372_8 | | ir.cpp:1372:23:1372:27 | ChiPartial | partial:m1372_11 | +| ir.cpp:1372:23:1372:27 | ChiPartial | partial:m1372_21 | +| ir.cpp:1372:23:1372:27 | ChiPartial | partial:m1372_24 | | ir.cpp:1372:23:1372:27 | ChiTotal | total:m1371_7 | | ir.cpp:1372:23:1372:27 | ChiTotal | total:m1372_3 | +| ir.cpp:1372:23:1372:27 | ChiTotal | total:m1372_12 | +| ir.cpp:1372:23:1372:27 | ChiTotal | total:m1372_16 | +| ir.cpp:1372:23:1372:27 | SideEffect | m1372_12 | | ir.cpp:1372:23:1372:27 | SideEffect | ~m1367_3 | | ir.cpp:1372:23:1372:27 | SideEffect | ~m1371_7 | | ir.cpp:1372:23:1372:27 | SideEffect | ~m1372_12 | +| ir.cpp:1372:23:1372:27 | SideEffect | ~m1372_16 | +| ir.cpp:1372:23:1372:27 | Unary | r1372_2 | | ir.cpp:1372:23:1372:27 | Unary | r1372_2 | | ir.cpp:1372:23:1372:27 | Unary | r1372_5 | | ir.cpp:1373:5:1373:15 | CallTarget | func:r1373_1 | @@ -6813,17 +6869,28 @@ | ir.cpp:1373:17:1373:17 | Address | &:r1373_2 | | ir.cpp:1373:17:1373:17 | Address | &:r1373_2 | | ir.cpp:1373:17:1373:17 | Address | &:r1373_7 | +| ir.cpp:1373:17:1373:17 | Address | &:r1373_18 | +| ir.cpp:1373:17:1373:17 | Address | &:r1373_18 | | ir.cpp:1373:17:1373:17 | Arg(0) | 0:r1373_7 | | ir.cpp:1373:17:1373:17 | Arg(0) | 0:r1373_14 | | ir.cpp:1373:17:1373:17 | Arg(this) | this:r1373_2 | +| ir.cpp:1373:17:1373:17 | Arg(this) | this:r1373_18 | | ir.cpp:1373:17:1373:17 | CallTarget | func:r1373_4 | +| ir.cpp:1373:17:1373:17 | CallTarget | func:r1373_19 | | ir.cpp:1373:17:1373:17 | ChiPartial | partial:m1373_9 | | ir.cpp:1373:17:1373:17 | ChiPartial | partial:m1373_12 | -| ir.cpp:1373:17:1373:17 | ChiTotal | total:m1372_16 | +| ir.cpp:1373:17:1373:17 | ChiPartial | partial:m1373_21 | +| ir.cpp:1373:17:1373:17 | ChiPartial | partial:m1373_24 | +| ir.cpp:1373:17:1373:17 | ChiTotal | total:m1372_22 | | ir.cpp:1373:17:1373:17 | ChiTotal | total:m1373_3 | +| ir.cpp:1373:17:1373:17 | ChiTotal | total:m1373_13 | +| ir.cpp:1373:17:1373:17 | ChiTotal | total:m1373_17 | | ir.cpp:1373:17:1373:17 | Load | m1373_13 | +| ir.cpp:1373:17:1373:17 | SideEffect | m1373_13 | | ir.cpp:1373:17:1373:17 | SideEffect | ~m1368_6 | -| ir.cpp:1373:17:1373:17 | SideEffect | ~m1372_16 | +| ir.cpp:1373:17:1373:17 | SideEffect | ~m1372_22 | +| ir.cpp:1373:17:1373:17 | SideEffect | ~m1373_17 | +| ir.cpp:1373:17:1373:17 | Unary | r1373_2 | | ir.cpp:1373:17:1373:17 | Unary | r1373_5 | | ir.cpp:1373:17:1373:17 | Unary | r1373_6 | | ir.cpp:1374:5:1374:23 | CallTarget | func:r1374_1 | @@ -6834,30 +6901,52 @@ | ir.cpp:1374:25:1374:29 | Address | &:r1374_2 | | ir.cpp:1374:25:1374:29 | Address | &:r1374_2 | | ir.cpp:1374:25:1374:29 | Address | &:r1374_6 | +| ir.cpp:1374:25:1374:29 | Address | &:r1374_17 | +| ir.cpp:1374:25:1374:29 | Address | &:r1374_17 | | ir.cpp:1374:25:1374:29 | Arg(0) | 0:r1374_6 | | ir.cpp:1374:25:1374:29 | Arg(0) | 0:r1374_13 | | ir.cpp:1374:25:1374:29 | Arg(this) | this:r1374_2 | +| ir.cpp:1374:25:1374:29 | Arg(this) | this:r1374_17 | | ir.cpp:1374:25:1374:29 | CallTarget | func:r1374_4 | +| ir.cpp:1374:25:1374:29 | CallTarget | func:r1374_18 | | ir.cpp:1374:25:1374:29 | ChiPartial | partial:m1374_8 | | ir.cpp:1374:25:1374:29 | ChiPartial | partial:m1374_11 | -| ir.cpp:1374:25:1374:29 | ChiTotal | total:m1373_17 | +| ir.cpp:1374:25:1374:29 | ChiPartial | partial:m1374_20 | +| ir.cpp:1374:25:1374:29 | ChiPartial | partial:m1374_23 | +| ir.cpp:1374:25:1374:29 | ChiTotal | total:m1373_22 | | ir.cpp:1374:25:1374:29 | ChiTotal | total:m1374_3 | +| ir.cpp:1374:25:1374:29 | ChiTotal | total:m1374_12 | +| ir.cpp:1374:25:1374:29 | ChiTotal | total:m1374_16 | | ir.cpp:1374:25:1374:29 | Load | m1374_12 | +| ir.cpp:1374:25:1374:29 | SideEffect | m1374_12 | | ir.cpp:1374:25:1374:29 | SideEffect | ~m1367_3 | -| ir.cpp:1374:25:1374:29 | SideEffect | ~m1373_17 | +| ir.cpp:1374:25:1374:29 | SideEffect | ~m1373_22 | +| ir.cpp:1374:25:1374:29 | SideEffect | ~m1374_16 | +| ir.cpp:1374:25:1374:29 | Unary | r1374_2 | | ir.cpp:1374:25:1374:29 | Unary | r1374_5 | | ir.cpp:1375:5:1375:12 | Address | &:r1375_1 | | ir.cpp:1375:5:1375:12 | Address | &:r1375_1 | | ir.cpp:1375:5:1375:12 | Address | &:r1375_9 | +| ir.cpp:1375:5:1375:12 | Address | &:r1375_15 | +| ir.cpp:1375:5:1375:12 | Address | &:r1375_15 | | ir.cpp:1375:5:1375:12 | Arg(this) | this:r1375_1 | | ir.cpp:1375:5:1375:12 | Arg(this) | this:r1375_9 | +| ir.cpp:1375:5:1375:12 | Arg(this) | this:r1375_15 | | ir.cpp:1375:5:1375:12 | CallTarget | func:r1375_3 | +| ir.cpp:1375:5:1375:12 | CallTarget | func:r1375_16 | | ir.cpp:1375:5:1375:12 | ChiPartial | partial:m1375_5 | | ir.cpp:1375:5:1375:12 | ChiPartial | partial:m1375_7 | -| ir.cpp:1375:5:1375:12 | ChiTotal | total:m1374_16 | +| ir.cpp:1375:5:1375:12 | ChiPartial | partial:m1375_18 | +| ir.cpp:1375:5:1375:12 | ChiPartial | partial:m1375_21 | +| ir.cpp:1375:5:1375:12 | ChiTotal | total:m1374_21 | | ir.cpp:1375:5:1375:12 | ChiTotal | total:m1375_2 | +| ir.cpp:1375:5:1375:12 | ChiTotal | total:m1375_8 | +| ir.cpp:1375:5:1375:12 | ChiTotal | total:m1375_13 | +| ir.cpp:1375:5:1375:12 | SideEffect | m1375_8 | | ir.cpp:1375:5:1375:12 | SideEffect | m1375_8 | -| ir.cpp:1375:5:1375:12 | SideEffect | ~m1374_16 | +| ir.cpp:1375:5:1375:12 | SideEffect | ~m1374_21 | +| ir.cpp:1375:5:1375:12 | SideEffect | ~m1375_13 | +| ir.cpp:1375:5:1375:12 | Unary | r1375_1 | | ir.cpp:1375:5:1375:12 | Unary | r1375_1 | | ir.cpp:1375:14:1375:18 | CallTarget | func:r1375_10 | | ir.cpp:1375:14:1375:18 | ChiPartial | partial:m1375_12 | @@ -6865,13 +6954,24 @@ | ir.cpp:1375:14:1375:18 | SideEffect | ~m1375_6 | | ir.cpp:1376:5:1376:23 | CallTarget | func:r1376_2 | | ir.cpp:1376:5:1376:23 | ChiPartial | partial:m1376_4 | -| ir.cpp:1376:5:1376:23 | ChiTotal | total:m1375_13 | -| ir.cpp:1376:5:1376:23 | SideEffect | ~m1375_13 | +| ir.cpp:1376:5:1376:23 | ChiTotal | total:m1375_19 | +| ir.cpp:1376:5:1376:23 | SideEffect | ~m1375_19 | | ir.cpp:1376:5:1376:23 | StoreValue | r1376_3 | | ir.cpp:1376:5:1376:25 | Address | &:r1376_1 | | ir.cpp:1376:5:1376:25 | Address | &:r1376_7 | +| ir.cpp:1376:5:1376:25 | Address | &:r1376_13 | +| ir.cpp:1376:5:1376:25 | Address | &:r1376_13 | | ir.cpp:1376:5:1376:25 | Arg(this) | this:r1376_7 | +| ir.cpp:1376:5:1376:25 | Arg(this) | this:r1376_13 | +| ir.cpp:1376:5:1376:25 | CallTarget | func:r1376_14 | +| ir.cpp:1376:5:1376:25 | ChiPartial | partial:m1376_16 | +| ir.cpp:1376:5:1376:25 | ChiPartial | partial:m1376_19 | +| ir.cpp:1376:5:1376:25 | ChiTotal | total:m1376_6 | +| ir.cpp:1376:5:1376:25 | ChiTotal | total:m1376_11 | +| ir.cpp:1376:5:1376:25 | SideEffect | m1376_6 | | ir.cpp:1376:5:1376:25 | SideEffect | m1376_6 | +| ir.cpp:1376:5:1376:25 | SideEffect | ~m1376_11 | +| ir.cpp:1376:5:1376:25 | Unary | r1376_1 | | ir.cpp:1376:5:1376:25 | Unary | r1376_1 | | ir.cpp:1376:27:1376:31 | CallTarget | func:r1376_8 | | ir.cpp:1376:27:1376:31 | ChiPartial | partial:m1376_10 | @@ -6879,23 +6979,44 @@ | ir.cpp:1376:27:1376:31 | SideEffect | ~m1376_5 | | ir.cpp:1378:5:1378:28 | CallTarget | func:r1378_2 | | ir.cpp:1378:5:1378:28 | ChiPartial | partial:m1378_4 | -| ir.cpp:1378:5:1378:28 | ChiTotal | total:m1376_11 | -| ir.cpp:1378:5:1378:28 | SideEffect | ~m1376_11 | +| ir.cpp:1378:5:1378:28 | ChiTotal | total:m1376_17 | +| ir.cpp:1378:5:1378:28 | SideEffect | ~m1376_17 | | ir.cpp:1378:5:1378:28 | StoreValue | r1378_3 | | ir.cpp:1378:5:1378:30 | Address | &:r1378_1 | +| ir.cpp:1378:5:1378:30 | Address | &:r1378_6 | +| ir.cpp:1378:5:1378:30 | Address | &:r1378_6 | +| ir.cpp:1378:5:1378:30 | Arg(this) | this:r1378_6 | +| ir.cpp:1378:5:1378:30 | CallTarget | func:r1378_7 | +| ir.cpp:1378:5:1378:30 | ChiPartial | partial:m1378_9 | +| ir.cpp:1378:5:1378:30 | ChiPartial | partial:m1378_12 | +| ir.cpp:1378:5:1378:30 | ChiTotal | total:m1378_5 | +| ir.cpp:1378:5:1378:30 | ChiTotal | total:~m? | +| ir.cpp:1378:5:1378:30 | SideEffect | ~m1378_5 | +| ir.cpp:1378:5:1378:30 | SideEffect | ~m? | +| ir.cpp:1378:5:1378:30 | Unary | r1378_1 | | ir.cpp:1379:1:1379:1 | Address | &:r1379_2 | | ir.cpp:1379:1:1379:1 | Address | &:r1379_2 | +| ir.cpp:1379:1:1379:1 | Address | &:r1379_10 | +| ir.cpp:1379:1:1379:1 | Address | &:r1379_10 | | ir.cpp:1379:1:1379:1 | Arg(this) | this:r1379_2 | +| ir.cpp:1379:1:1379:1 | Arg(this) | this:r1379_10 | | ir.cpp:1379:1:1379:1 | CallTarget | func:r1379_3 | +| ir.cpp:1379:1:1379:1 | CallTarget | func:r1379_11 | | ir.cpp:1379:1:1379:1 | ChiPartial | partial:m1379_5 | | ir.cpp:1379:1:1379:1 | ChiPartial | partial:m1379_8 | +| ir.cpp:1379:1:1379:1 | ChiPartial | partial:m1379_13 | +| ir.cpp:1379:1:1379:1 | ChiPartial | partial:m1379_16 | | ir.cpp:1379:1:1379:1 | ChiTotal | total:m1368_6 | -| ir.cpp:1379:1:1379:1 | ChiTotal | total:m1378_5 | +| ir.cpp:1379:1:1379:1 | ChiTotal | total:m1369_7 | +| ir.cpp:1379:1:1379:1 | ChiTotal | total:m1378_10 | +| ir.cpp:1379:1:1379:1 | ChiTotal | total:m1379_6 | | ir.cpp:1379:1:1379:1 | SideEffect | m1368_6 | -| ir.cpp:1379:1:1379:1 | SideEffect | ~m1378_5 | +| ir.cpp:1379:1:1379:1 | SideEffect | m1369_7 | +| ir.cpp:1379:1:1379:1 | SideEffect | ~m1378_10 | +| ir.cpp:1379:1:1379:1 | SideEffect | ~m1379_6 | | ir.cpp:1381:6:1381:30 | ChiPartial | partial:m1381_3 | | ir.cpp:1381:6:1381:30 | ChiTotal | total:m1381_2 | -| ir.cpp:1381:6:1381:30 | SideEffect | ~m1391_14 | +| ir.cpp:1381:6:1381:30 | SideEffect | ~m1391_22 | | ir.cpp:1382:21:1382:21 | Address | &:r1382_1 | | ir.cpp:1382:25:1382:52 | CallTarget | func:r1382_2 | | ir.cpp:1382:25:1382:52 | ChiPartial | partial:m1382_4 | @@ -6911,6 +7032,7 @@ | ir.cpp:1383:33:1383:62 | Address | &:r1383_2 | | ir.cpp:1383:33:1383:62 | StoreValue | r1383_9 | | ir.cpp:1383:33:1383:62 | Unary | r1383_2 | +| ir.cpp:1383:33:1383:62 | Unary | r1383_2 | | ir.cpp:1383:33:1383:62 | Unary | r1383_8 | | ir.cpp:1384:21:1384:22 | Address | &:r1384_1 | | ir.cpp:1385:5:1385:13 | CallTarget | func:r1385_1 | @@ -6929,64 +7051,118 @@ | ir.cpp:1386:17:1386:17 | Address | &:r1386_2 | | ir.cpp:1386:17:1386:17 | Address | &:r1386_2 | | ir.cpp:1386:17:1386:17 | Address | &:r1386_3 | +| ir.cpp:1386:17:1386:17 | Address | &:r1386_10 | +| ir.cpp:1386:17:1386:17 | Address | &:r1386_10 | | ir.cpp:1386:17:1386:17 | Arg(0) | 0:r1386_6 | +| ir.cpp:1386:17:1386:17 | Arg(this) | this:r1386_10 | +| ir.cpp:1386:17:1386:17 | CallTarget | func:r1386_11 | +| ir.cpp:1386:17:1386:17 | ChiPartial | partial:m1386_13 | +| ir.cpp:1386:17:1386:17 | ChiPartial | partial:m1386_16 | +| ir.cpp:1386:17:1386:17 | ChiTotal | total:m1386_5 | +| ir.cpp:1386:17:1386:17 | ChiTotal | total:m1386_9 | | ir.cpp:1386:17:1386:17 | Load | m1382_6 | | ir.cpp:1386:17:1386:17 | Load | m1386_5 | +| ir.cpp:1386:17:1386:17 | SideEffect | m1386_5 | +| ir.cpp:1386:17:1386:17 | SideEffect | ~m1386_9 | | ir.cpp:1386:17:1386:17 | StoreValue | r1386_4 | +| ir.cpp:1386:17:1386:17 | Unary | r1386_2 | | ir.cpp:1387:5:1387:21 | Address | &:r1387_1 | | ir.cpp:1387:5:1387:21 | Address | &:r1387_1 | | ir.cpp:1387:5:1387:21 | Address | &:r1387_1 | +| ir.cpp:1387:5:1387:21 | Address | &:r1387_11 | +| ir.cpp:1387:5:1387:21 | Address | &:r1387_11 | | ir.cpp:1387:5:1387:21 | Arg(this) | this:r1387_1 | +| ir.cpp:1387:5:1387:21 | Arg(this) | this:r1387_11 | +| ir.cpp:1387:5:1387:21 | CallTarget | func:r1387_12 | | ir.cpp:1387:5:1387:21 | ChiPartial | partial:m1387_9 | +| ir.cpp:1387:5:1387:21 | ChiPartial | partial:m1387_14 | +| ir.cpp:1387:5:1387:21 | ChiPartial | partial:m1387_17 | | ir.cpp:1387:5:1387:21 | ChiTotal | total:m1387_3 | +| ir.cpp:1387:5:1387:21 | ChiTotal | total:m1387_7 | +| ir.cpp:1387:5:1387:21 | ChiTotal | total:m1387_10 | | ir.cpp:1387:5:1387:21 | SideEffect | m1387_3 | +| ir.cpp:1387:5:1387:21 | SideEffect | m1387_10 | +| ir.cpp:1387:5:1387:21 | SideEffect | ~m1387_7 | | ir.cpp:1387:5:1387:21 | StoreValue | r1387_2 | +| ir.cpp:1387:5:1387:21 | Unary | r1387_1 | | ir.cpp:1387:23:1387:28 | CallTarget | func:r1387_4 | | ir.cpp:1387:23:1387:28 | ChiPartial | partial:m1387_6 | -| ir.cpp:1387:23:1387:28 | ChiTotal | total:m1386_9 | -| ir.cpp:1387:23:1387:28 | SideEffect | ~m1386_9 | +| ir.cpp:1387:23:1387:28 | ChiTotal | total:m1386_14 | +| ir.cpp:1387:23:1387:28 | SideEffect | ~m1386_14 | | ir.cpp:1388:5:1388:32 | CallTarget | func:r1388_2 | | ir.cpp:1388:5:1388:32 | ChiPartial | partial:m1388_4 | -| ir.cpp:1388:5:1388:32 | ChiTotal | total:m1387_7 | -| ir.cpp:1388:5:1388:32 | SideEffect | ~m1387_7 | +| ir.cpp:1388:5:1388:32 | ChiTotal | total:m1387_15 | +| ir.cpp:1388:5:1388:32 | SideEffect | ~m1387_15 | | ir.cpp:1388:5:1388:32 | StoreValue | r1388_3 | | ir.cpp:1388:5:1388:34 | Address | &:r1388_1 | | ir.cpp:1388:5:1388:34 | Address | &:r1388_1 | | ir.cpp:1388:5:1388:34 | Address | &:r1388_1 | +| ir.cpp:1388:5:1388:34 | Address | &:r1388_14 | +| ir.cpp:1388:5:1388:34 | Address | &:r1388_14 | | ir.cpp:1388:5:1388:34 | Arg(this) | this:r1388_1 | +| ir.cpp:1388:5:1388:34 | Arg(this) | this:r1388_14 | +| ir.cpp:1388:5:1388:34 | CallTarget | func:r1388_15 | | ir.cpp:1388:5:1388:34 | ChiPartial | partial:m1388_12 | +| ir.cpp:1388:5:1388:34 | ChiPartial | partial:m1388_17 | +| ir.cpp:1388:5:1388:34 | ChiPartial | partial:m1388_20 | | ir.cpp:1388:5:1388:34 | ChiTotal | total:m1388_6 | +| ir.cpp:1388:5:1388:34 | ChiTotal | total:m1388_10 | +| ir.cpp:1388:5:1388:34 | ChiTotal | total:m1388_13 | | ir.cpp:1388:5:1388:34 | SideEffect | m1388_6 | +| ir.cpp:1388:5:1388:34 | SideEffect | m1388_13 | +| ir.cpp:1388:5:1388:34 | SideEffect | ~m1388_10 | +| ir.cpp:1388:5:1388:34 | Unary | r1388_1 | | ir.cpp:1388:36:1388:41 | CallTarget | func:r1388_7 | | ir.cpp:1388:36:1388:41 | ChiPartial | partial:m1388_9 | | ir.cpp:1388:36:1388:41 | ChiTotal | total:m1388_5 | | ir.cpp:1388:36:1388:41 | SideEffect | ~m1388_5 | | ir.cpp:1390:5:1390:37 | CallTarget | func:r1390_2 | | ir.cpp:1390:5:1390:37 | ChiPartial | partial:m1390_4 | -| ir.cpp:1390:5:1390:37 | ChiTotal | total:m1388_10 | -| ir.cpp:1390:5:1390:37 | SideEffect | ~m1388_10 | +| ir.cpp:1390:5:1390:37 | ChiTotal | total:m1388_18 | +| ir.cpp:1390:5:1390:37 | SideEffect | ~m1388_18 | | ir.cpp:1390:5:1390:37 | StoreValue | r1390_3 | | ir.cpp:1390:5:1390:39 | Address | &:r1390_1 | +| ir.cpp:1390:5:1390:39 | Address | &:r1390_6 | +| ir.cpp:1390:5:1390:39 | Address | &:r1390_6 | +| ir.cpp:1390:5:1390:39 | Arg(this) | this:r1390_6 | +| ir.cpp:1390:5:1390:39 | CallTarget | func:r1390_7 | +| ir.cpp:1390:5:1390:39 | ChiPartial | partial:m1390_9 | +| ir.cpp:1390:5:1390:39 | ChiPartial | partial:m1390_12 | +| ir.cpp:1390:5:1390:39 | ChiTotal | total:m1390_5 | +| ir.cpp:1390:5:1390:39 | ChiTotal | total:~m? | +| ir.cpp:1390:5:1390:39 | SideEffect | ~m1390_5 | +| ir.cpp:1390:5:1390:39 | SideEffect | ~m? | +| ir.cpp:1390:5:1390:39 | Unary | r1390_1 | | ir.cpp:1391:1:1391:1 | Address | &:r1391_2 | | ir.cpp:1391:1:1391:1 | Address | &:r1391_2 | | ir.cpp:1391:1:1391:1 | Address | &:r1391_10 | | ir.cpp:1391:1:1391:1 | Address | &:r1391_10 | +| ir.cpp:1391:1:1391:1 | Address | &:r1391_18 | +| ir.cpp:1391:1:1391:1 | Address | &:r1391_18 | | ir.cpp:1391:1:1391:1 | Arg(this) | this:r1391_2 | | ir.cpp:1391:1:1391:1 | Arg(this) | this:r1391_10 | +| ir.cpp:1391:1:1391:1 | Arg(this) | this:r1391_18 | | ir.cpp:1391:1:1391:1 | CallTarget | func:r1391_3 | | ir.cpp:1391:1:1391:1 | CallTarget | func:r1391_11 | +| ir.cpp:1391:1:1391:1 | CallTarget | func:r1391_19 | | ir.cpp:1391:1:1391:1 | ChiPartial | partial:m1391_5 | | ir.cpp:1391:1:1391:1 | ChiPartial | partial:m1391_8 | | ir.cpp:1391:1:1391:1 | ChiPartial | partial:m1391_13 | | ir.cpp:1391:1:1391:1 | ChiPartial | partial:m1391_16 | +| ir.cpp:1391:1:1391:1 | ChiPartial | partial:m1391_21 | +| ir.cpp:1391:1:1391:1 | ChiPartial | partial:m1391_24 | | ir.cpp:1391:1:1391:1 | ChiTotal | total:m1382_6 | +| ir.cpp:1391:1:1391:1 | ChiTotal | total:m1383_7 | | ir.cpp:1391:1:1391:1 | ChiTotal | total:m1384_2 | -| ir.cpp:1391:1:1391:1 | ChiTotal | total:m1390_5 | +| ir.cpp:1391:1:1391:1 | ChiTotal | total:m1390_10 | | ir.cpp:1391:1:1391:1 | ChiTotal | total:m1391_6 | +| ir.cpp:1391:1:1391:1 | ChiTotal | total:m1391_14 | | ir.cpp:1391:1:1391:1 | SideEffect | m1382_6 | +| ir.cpp:1391:1:1391:1 | SideEffect | m1383_7 | | ir.cpp:1391:1:1391:1 | SideEffect | m1384_2 | -| ir.cpp:1391:1:1391:1 | SideEffect | ~m1390_5 | +| ir.cpp:1391:1:1391:1 | SideEffect | ~m1390_10 | | ir.cpp:1391:1:1391:1 | SideEffect | ~m1391_6 | +| ir.cpp:1391:1:1391:1 | SideEffect | ~m1391_14 | | ir.cpp:1393:6:1393:31 | ChiPartial | partial:m1393_3 | | ir.cpp:1393:6:1393:31 | ChiTotal | total:m1393_2 | | ir.cpp:1393:6:1393:31 | SideEffect | ~m1403_6 | @@ -9720,7 +9896,7 @@ | ir.cpp:2016:13:2016:29 | SideEffect | m2016_8 | | ir.cpp:2019:6:2019:25 | ChiPartial | partial:m2019_3 | | ir.cpp:2019:6:2019:25 | ChiTotal | total:m2019_2 | -| ir.cpp:2019:6:2019:25 | SideEffect | ~m2023_32 | +| ir.cpp:2019:6:2019:25 | SideEffect | ~m2023_41 | | ir.cpp:2019:32:2019:32 | Address | &:r2019_5 | | ir.cpp:2019:52:2019:52 | Address | &:r2019_7 | | ir.cpp:2019:72:2019:72 | Address | &:r2019_9 | @@ -9765,51 +9941,62 @@ | ir.cpp:2021:7:2021:7 | Unary | r2021_14 | | ir.cpp:2021:9:2021:9 | Address | &:r2021_4 | | ir.cpp:2021:9:2021:9 | Address | &:r2021_9 | -| ir.cpp:2021:9:2021:9 | Address | &:r2021_35 | -| ir.cpp:2021:9:2021:9 | Address | &:r2021_46 | +| ir.cpp:2021:9:2021:9 | Address | &:r2021_43 | +| ir.cpp:2021:9:2021:9 | Address | &:r2021_54 | | ir.cpp:2021:9:2021:9 | Condition | r2021_5 | | ir.cpp:2021:9:2021:9 | Load | m2019_6 | | ir.cpp:2021:9:2021:9 | Load | m2021_8 | -| ir.cpp:2021:9:2021:9 | Phi | from 5:m2021_36 | -| ir.cpp:2021:9:2021:9 | Phi | from 5:~m2021_30 | -| ir.cpp:2021:9:2021:9 | Phi | from 6:m2021_47 | -| ir.cpp:2021:9:2021:9 | Phi | from 6:~m2021_42 | +| ir.cpp:2021:9:2021:9 | Phi | from 5:m2021_44 | +| ir.cpp:2021:9:2021:9 | Phi | from 5:~m2021_38 | +| ir.cpp:2021:9:2021:9 | Phi | from 6:m2021_55 | +| ir.cpp:2021:9:2021:9 | Phi | from 6:~m2021_50 | | ir.cpp:2021:9:2021:9 | StoreValue | r2021_10 | | ir.cpp:2021:9:2021:34 | Address | &:r2021_3 | | ir.cpp:2021:9:2021:34 | Address | &:r2021_13 | +| ir.cpp:2021:9:2021:34 | Address | &:r2021_21 | +| ir.cpp:2021:9:2021:34 | Address | &:r2021_21 | | ir.cpp:2021:9:2021:34 | Arg(0) | 0:r2021_13 | +| ir.cpp:2021:9:2021:34 | Arg(this) | this:r2021_21 | +| ir.cpp:2021:9:2021:34 | CallTarget | func:r2021_22 | +| ir.cpp:2021:9:2021:34 | ChiPartial | partial:m2021_24 | +| ir.cpp:2021:9:2021:34 | ChiPartial | partial:m2021_27 | +| ir.cpp:2021:9:2021:34 | ChiTotal | total:m2021_11 | +| ir.cpp:2021:9:2021:34 | ChiTotal | total:m2021_16 | +| ir.cpp:2021:9:2021:34 | SideEffect | m2021_11 | | ir.cpp:2021:9:2021:34 | SideEffect | ~m2021_11 | +| ir.cpp:2021:9:2021:34 | SideEffect | ~m2021_16 | +| ir.cpp:2021:9:2021:34 | Unary | r2021_3 | | ir.cpp:2021:9:2021:34 | Unary | r2021_3 | | ir.cpp:2021:9:2021:34 | Unary | r2021_12 | -| ir.cpp:2021:13:2021:13 | Address | &:r2021_22 | -| ir.cpp:2021:13:2021:13 | Address | &:r2021_22 | -| ir.cpp:2021:13:2021:13 | Address | &:r2021_22 | -| ir.cpp:2021:13:2021:13 | Address | &:r2021_27 | -| ir.cpp:2021:13:2021:13 | Arg(0) | 0:r2021_27 | -| ir.cpp:2021:13:2021:13 | Arg(this) | this:r2021_22 | -| ir.cpp:2021:13:2021:13 | CallTarget | func:r2021_24 | -| ir.cpp:2021:13:2021:13 | ChiPartial | partial:m2021_29 | -| ir.cpp:2021:13:2021:13 | ChiPartial | partial:m2021_32 | +| ir.cpp:2021:13:2021:13 | Address | &:r2021_30 | +| ir.cpp:2021:13:2021:13 | Address | &:r2021_30 | +| ir.cpp:2021:13:2021:13 | Address | &:r2021_30 | +| ir.cpp:2021:13:2021:13 | Address | &:r2021_35 | +| ir.cpp:2021:13:2021:13 | Arg(0) | 0:r2021_35 | +| ir.cpp:2021:13:2021:13 | Arg(this) | this:r2021_30 | +| ir.cpp:2021:13:2021:13 | CallTarget | func:r2021_32 | +| ir.cpp:2021:13:2021:13 | ChiPartial | partial:m2021_37 | +| ir.cpp:2021:13:2021:13 | ChiPartial | partial:m2021_40 | | ir.cpp:2021:13:2021:13 | ChiTotal | total:m2020_13 | -| ir.cpp:2021:13:2021:13 | ChiTotal | total:m2021_23 | -| ir.cpp:2021:13:2021:13 | Load | m2021_33 | +| ir.cpp:2021:13:2021:13 | ChiTotal | total:m2021_31 | +| ir.cpp:2021:13:2021:13 | Load | m2021_41 | | ir.cpp:2021:13:2021:13 | SideEffect | ~m2019_8 | | ir.cpp:2021:13:2021:13 | SideEffect | ~m2020_13 | -| ir.cpp:2021:13:2021:13 | StoreValue | r2021_34 | -| ir.cpp:2021:13:2021:13 | Unary | r2021_25 | -| ir.cpp:2021:13:2021:13 | Unary | r2021_26 | -| ir.cpp:2021:17:2021:34 | Address | &:r2021_37 | -| ir.cpp:2021:17:2021:34 | Address | &:r2021_37 | -| ir.cpp:2021:17:2021:34 | Address | &:r2021_37 | -| ir.cpp:2021:17:2021:34 | Arg(this) | this:r2021_37 | -| ir.cpp:2021:17:2021:34 | CallTarget | func:r2021_39 | -| ir.cpp:2021:17:2021:34 | ChiPartial | partial:m2021_41 | -| ir.cpp:2021:17:2021:34 | ChiPartial | partial:m2021_43 | +| ir.cpp:2021:13:2021:13 | StoreValue | r2021_42 | +| ir.cpp:2021:13:2021:13 | Unary | r2021_33 | +| ir.cpp:2021:13:2021:13 | Unary | r2021_34 | +| ir.cpp:2021:17:2021:34 | Address | &:r2021_45 | +| ir.cpp:2021:17:2021:34 | Address | &:r2021_45 | +| ir.cpp:2021:17:2021:34 | Address | &:r2021_45 | +| ir.cpp:2021:17:2021:34 | Arg(this) | this:r2021_45 | +| ir.cpp:2021:17:2021:34 | CallTarget | func:r2021_47 | +| ir.cpp:2021:17:2021:34 | ChiPartial | partial:m2021_49 | +| ir.cpp:2021:17:2021:34 | ChiPartial | partial:m2021_51 | | ir.cpp:2021:17:2021:34 | ChiTotal | total:m2020_13 | -| ir.cpp:2021:17:2021:34 | ChiTotal | total:m2021_38 | -| ir.cpp:2021:17:2021:34 | Load | m2021_44 | +| ir.cpp:2021:17:2021:34 | ChiTotal | total:m2021_46 | +| ir.cpp:2021:17:2021:34 | Load | m2021_52 | | ir.cpp:2021:17:2021:34 | SideEffect | ~m2020_13 | -| ir.cpp:2021:17:2021:34 | StoreValue | r2021_45 | +| ir.cpp:2021:17:2021:34 | StoreValue | r2021_53 | | ir.cpp:2022:5:2022:5 | Address | &:r2022_1 | | ir.cpp:2022:5:2022:5 | Address | &:r2022_1 | | ir.cpp:2022:5:2022:5 | Arg(this) | this:r2022_1 | @@ -9823,46 +10010,57 @@ | ir.cpp:2022:7:2022:7 | Unary | r2022_14 | | ir.cpp:2022:9:2022:9 | Address | &:r2022_4 | | ir.cpp:2022:9:2022:9 | Address | &:r2022_9 | -| ir.cpp:2022:9:2022:9 | Address | &:r2022_31 | -| ir.cpp:2022:9:2022:9 | Address | &:r2022_42 | +| ir.cpp:2022:9:2022:9 | Address | &:r2022_39 | +| ir.cpp:2022:9:2022:9 | Address | &:r2022_50 | | ir.cpp:2022:9:2022:9 | Condition | r2022_5 | | ir.cpp:2022:9:2022:9 | Load | m2019_6 | | ir.cpp:2022:9:2022:9 | Load | m2022_8 | -| ir.cpp:2022:9:2022:9 | Phi | from 8:m2022_32 | -| ir.cpp:2022:9:2022:9 | Phi | from 8:~m2022_27 | -| ir.cpp:2022:9:2022:9 | Phi | from 9:m2022_43 | -| ir.cpp:2022:9:2022:9 | Phi | from 9:~m2022_38 | +| ir.cpp:2022:9:2022:9 | Phi | from 8:m2022_40 | +| ir.cpp:2022:9:2022:9 | Phi | from 8:~m2022_35 | +| ir.cpp:2022:9:2022:9 | Phi | from 9:m2022_51 | +| ir.cpp:2022:9:2022:9 | Phi | from 9:~m2022_46 | | ir.cpp:2022:9:2022:9 | StoreValue | r2022_10 | | ir.cpp:2022:9:2022:51 | Address | &:r2022_3 | | ir.cpp:2022:9:2022:51 | Address | &:r2022_13 | +| ir.cpp:2022:9:2022:51 | Address | &:r2022_21 | +| ir.cpp:2022:9:2022:51 | Address | &:r2022_21 | | ir.cpp:2022:9:2022:51 | Arg(0) | 0:r2022_13 | +| ir.cpp:2022:9:2022:51 | Arg(this) | this:r2022_21 | +| ir.cpp:2022:9:2022:51 | CallTarget | func:r2022_22 | +| ir.cpp:2022:9:2022:51 | ChiPartial | partial:m2022_24 | +| ir.cpp:2022:9:2022:51 | ChiPartial | partial:m2022_27 | +| ir.cpp:2022:9:2022:51 | ChiTotal | total:m2022_11 | +| ir.cpp:2022:9:2022:51 | ChiTotal | total:m2022_16 | +| ir.cpp:2022:9:2022:51 | SideEffect | m2022_11 | | ir.cpp:2022:9:2022:51 | SideEffect | ~m2022_11 | +| ir.cpp:2022:9:2022:51 | SideEffect | ~m2022_16 | +| ir.cpp:2022:9:2022:51 | Unary | r2022_3 | | ir.cpp:2022:9:2022:51 | Unary | r2022_3 | | ir.cpp:2022:9:2022:51 | Unary | r2022_12 | -| ir.cpp:2022:13:2022:30 | Address | &:r2022_22 | -| ir.cpp:2022:13:2022:30 | Address | &:r2022_22 | -| ir.cpp:2022:13:2022:30 | Address | &:r2022_22 | -| ir.cpp:2022:13:2022:30 | Arg(this) | this:r2022_22 | -| ir.cpp:2022:13:2022:30 | CallTarget | func:r2022_24 | -| ir.cpp:2022:13:2022:30 | ChiPartial | partial:m2022_26 | -| ir.cpp:2022:13:2022:30 | ChiPartial | partial:m2022_28 | -| ir.cpp:2022:13:2022:30 | ChiTotal | total:m2021_16 | -| ir.cpp:2022:13:2022:30 | ChiTotal | total:m2022_23 | -| ir.cpp:2022:13:2022:30 | Load | m2022_29 | -| ir.cpp:2022:13:2022:30 | SideEffect | ~m2021_16 | -| ir.cpp:2022:13:2022:30 | StoreValue | r2022_30 | -| ir.cpp:2022:34:2022:51 | Address | &:r2022_33 | -| ir.cpp:2022:34:2022:51 | Address | &:r2022_33 | -| ir.cpp:2022:34:2022:51 | Address | &:r2022_33 | -| ir.cpp:2022:34:2022:51 | Arg(this) | this:r2022_33 | -| ir.cpp:2022:34:2022:51 | CallTarget | func:r2022_35 | -| ir.cpp:2022:34:2022:51 | ChiPartial | partial:m2022_37 | -| ir.cpp:2022:34:2022:51 | ChiPartial | partial:m2022_39 | -| ir.cpp:2022:34:2022:51 | ChiTotal | total:m2021_16 | -| ir.cpp:2022:34:2022:51 | ChiTotal | total:m2022_34 | -| ir.cpp:2022:34:2022:51 | Load | m2022_40 | -| ir.cpp:2022:34:2022:51 | SideEffect | ~m2021_16 | -| ir.cpp:2022:34:2022:51 | StoreValue | r2022_41 | +| ir.cpp:2022:13:2022:30 | Address | &:r2022_30 | +| ir.cpp:2022:13:2022:30 | Address | &:r2022_30 | +| ir.cpp:2022:13:2022:30 | Address | &:r2022_30 | +| ir.cpp:2022:13:2022:30 | Arg(this) | this:r2022_30 | +| ir.cpp:2022:13:2022:30 | CallTarget | func:r2022_32 | +| ir.cpp:2022:13:2022:30 | ChiPartial | partial:m2022_34 | +| ir.cpp:2022:13:2022:30 | ChiPartial | partial:m2022_36 | +| ir.cpp:2022:13:2022:30 | ChiTotal | total:m2021_25 | +| ir.cpp:2022:13:2022:30 | ChiTotal | total:m2022_31 | +| ir.cpp:2022:13:2022:30 | Load | m2022_37 | +| ir.cpp:2022:13:2022:30 | SideEffect | ~m2021_25 | +| ir.cpp:2022:13:2022:30 | StoreValue | r2022_38 | +| ir.cpp:2022:34:2022:51 | Address | &:r2022_41 | +| ir.cpp:2022:34:2022:51 | Address | &:r2022_41 | +| ir.cpp:2022:34:2022:51 | Address | &:r2022_41 | +| ir.cpp:2022:34:2022:51 | Arg(this) | this:r2022_41 | +| ir.cpp:2022:34:2022:51 | CallTarget | func:r2022_43 | +| ir.cpp:2022:34:2022:51 | ChiPartial | partial:m2022_45 | +| ir.cpp:2022:34:2022:51 | ChiPartial | partial:m2022_47 | +| ir.cpp:2022:34:2022:51 | ChiTotal | total:m2021_25 | +| ir.cpp:2022:34:2022:51 | ChiTotal | total:m2022_42 | +| ir.cpp:2022:34:2022:51 | Load | m2022_48 | +| ir.cpp:2022:34:2022:51 | SideEffect | ~m2021_25 | +| ir.cpp:2022:34:2022:51 | StoreValue | r2022_49 | | ir.cpp:2023:5:2023:19 | ChiPartial | partial:m2023_35 | | ir.cpp:2023:5:2023:19 | ChiTotal | total:m2023_17 | | ir.cpp:2023:5:2023:19 | SideEffect | m2023_17 | @@ -9874,8 +10072,8 @@ | ir.cpp:2023:6:2023:6 | SideEffect | m2022_20 | | ir.cpp:2023:8:2023:8 | CallTarget | func:r2023_2 | | ir.cpp:2023:8:2023:8 | ChiPartial | partial:m2023_12 | -| ir.cpp:2023:8:2023:8 | ChiTotal | total:m2022_16 | -| ir.cpp:2023:8:2023:8 | SideEffect | ~m2022_16 | +| ir.cpp:2023:8:2023:8 | ChiTotal | total:m2022_25 | +| ir.cpp:2023:8:2023:8 | SideEffect | ~m2022_25 | | ir.cpp:2023:8:2023:8 | Unary | r2023_11 | | ir.cpp:2023:8:2023:19 | Address | &:r2023_18 | | ir.cpp:2023:8:2023:19 | Address | &:r2023_18 | @@ -9885,17 +10083,17 @@ | ir.cpp:2023:10:2023:10 | Load | m2019_6 | | ir.cpp:2023:10:2023:18 | Address | &:r2023_7 | | ir.cpp:2023:10:2023:18 | Address | &:r2023_10 | -| ir.cpp:2023:10:2023:18 | Address | &:r2023_39 | -| ir.cpp:2023:10:2023:18 | Address | &:r2023_42 | +| ir.cpp:2023:10:2023:18 | Address | &:r2023_47 | +| ir.cpp:2023:10:2023:18 | Address | &:r2023_50 | | ir.cpp:2023:10:2023:18 | Arg(0) | 0:r2023_10 | | ir.cpp:2023:10:2023:18 | Load | m2023_6 | -| ir.cpp:2023:10:2023:18 | Phi | from 11:m2023_40 | -| ir.cpp:2023:10:2023:18 | Phi | from 12:m2023_43 | +| ir.cpp:2023:10:2023:18 | Phi | from 11:m2023_48 | +| ir.cpp:2023:10:2023:18 | Phi | from 12:m2023_51 | | ir.cpp:2023:10:2023:18 | SideEffect | ~m2023_13 | | ir.cpp:2023:10:2023:18 | Unary | r2023_8 | | ir.cpp:2023:10:2023:18 | Unary | r2023_9 | -| ir.cpp:2023:14:2023:14 | StoreValue | r2023_38 | -| ir.cpp:2023:18:2023:18 | StoreValue | r2023_41 | +| ir.cpp:2023:14:2023:14 | StoreValue | r2023_46 | +| ir.cpp:2023:18:2023:18 | StoreValue | r2023_49 | | ir.cpp:2023:21:2023:21 | CallTarget | func:r2023_19 | | ir.cpp:2023:21:2023:21 | ChiPartial | partial:m2023_31 | | ir.cpp:2023:21:2023:21 | ChiTotal | total:m2023_25 | @@ -9904,15 +10102,26 @@ | ir.cpp:2023:23:2023:40 | Address | &:r2023_20 | | ir.cpp:2023:23:2023:40 | Address | &:r2023_20 | | ir.cpp:2023:23:2023:40 | Address | &:r2023_29 | +| ir.cpp:2023:23:2023:40 | Address | &:r2023_37 | +| ir.cpp:2023:23:2023:40 | Address | &:r2023_37 | | ir.cpp:2023:23:2023:40 | Arg(0) | 0:r2023_29 | | ir.cpp:2023:23:2023:40 | Arg(this) | this:r2023_20 | +| ir.cpp:2023:23:2023:40 | Arg(this) | this:r2023_37 | | ir.cpp:2023:23:2023:40 | CallTarget | func:r2023_22 | +| ir.cpp:2023:23:2023:40 | CallTarget | func:r2023_38 | | ir.cpp:2023:23:2023:40 | ChiPartial | partial:m2023_24 | | ir.cpp:2023:23:2023:40 | ChiPartial | partial:m2023_26 | +| ir.cpp:2023:23:2023:40 | ChiPartial | partial:m2023_40 | +| ir.cpp:2023:23:2023:40 | ChiPartial | partial:m2023_43 | | ir.cpp:2023:23:2023:40 | ChiTotal | total:m2023_13 | | ir.cpp:2023:23:2023:40 | ChiTotal | total:m2023_21 | +| ir.cpp:2023:23:2023:40 | ChiTotal | total:m2023_27 | +| ir.cpp:2023:23:2023:40 | ChiTotal | total:m2023_32 | +| ir.cpp:2023:23:2023:40 | SideEffect | m2023_27 | | ir.cpp:2023:23:2023:40 | SideEffect | ~m2023_13 | | ir.cpp:2023:23:2023:40 | SideEffect | ~m2023_27 | +| ir.cpp:2023:23:2023:40 | SideEffect | ~m2023_32 | +| ir.cpp:2023:23:2023:40 | Unary | r2023_20 | | ir.cpp:2023:23:2023:40 | Unary | r2023_20 | | ir.cpp:2023:23:2023:40 | Unary | r2023_28 | | ir.cpp:2028:14:2028:22 | Address | &:r2028_7 | @@ -11512,77 +11721,77 @@ | ir.cpp:2244:5:2244:5 | SideEffect | m2243_8 | | ir.cpp:2244:5:2244:5 | SideEffect | ~m2243_6 | | ir.cpp:2246:5:2246:5 | Address | &:r2246_1 | -| ir.cpp:2246:5:2246:5 | Address | &:r2246_24 | | ir.cpp:2246:5:2246:5 | Address | &:r2246_32 | -| ir.cpp:2246:16:2246:16 | Address | &:r2246_50 | -| ir.cpp:2246:16:2246:16 | Address | &:r2246_50 | -| ir.cpp:2246:16:2246:16 | Address | &:r2246_67 | -| ir.cpp:2246:16:2246:16 | Address | &:r2246_67 | -| ir.cpp:2246:16:2246:16 | Arg(this) | this:r2246_50 | -| ir.cpp:2246:16:2246:16 | Arg(this) | this:r2246_67 | -| ir.cpp:2246:16:2246:16 | CallTarget | func:r2246_52 | -| ir.cpp:2246:16:2246:16 | CallTarget | func:r2246_68 | -| ir.cpp:2246:16:2246:16 | ChiPartial | partial:m2246_62 | -| ir.cpp:2246:16:2246:16 | ChiPartial | partial:m2246_65 | +| ir.cpp:2246:5:2246:5 | Address | &:r2246_40 | +| ir.cpp:2246:16:2246:16 | Address | &:r2246_58 | +| ir.cpp:2246:16:2246:16 | Address | &:r2246_58 | +| ir.cpp:2246:16:2246:16 | Address | &:r2246_75 | +| ir.cpp:2246:16:2246:16 | Address | &:r2246_75 | +| ir.cpp:2246:16:2246:16 | Arg(this) | this:r2246_58 | +| ir.cpp:2246:16:2246:16 | Arg(this) | this:r2246_75 | +| ir.cpp:2246:16:2246:16 | CallTarget | func:r2246_60 | +| ir.cpp:2246:16:2246:16 | CallTarget | func:r2246_76 | | ir.cpp:2246:16:2246:16 | ChiPartial | partial:m2246_70 | | ir.cpp:2246:16:2246:16 | ChiPartial | partial:m2246_73 | -| ir.cpp:2246:16:2246:16 | ChiTotal | total:m2246_51 | -| ir.cpp:2246:16:2246:16 | ChiTotal | total:m2246_57 | -| ir.cpp:2246:16:2246:16 | ChiTotal | total:m2246_66 | +| ir.cpp:2246:16:2246:16 | ChiPartial | partial:m2246_78 | +| ir.cpp:2246:16:2246:16 | ChiPartial | partial:m2246_81 | +| ir.cpp:2246:16:2246:16 | ChiTotal | total:m2246_59 | +| ir.cpp:2246:16:2246:16 | ChiTotal | total:m2246_65 | +| ir.cpp:2246:16:2246:16 | ChiTotal | total:m2246_74 | | ir.cpp:2246:16:2246:16 | ChiTotal | total:m2248_5 | -| ir.cpp:2246:16:2246:16 | SideEffect | m2246_66 | -| ir.cpp:2246:16:2246:16 | SideEffect | ~m2246_57 | +| ir.cpp:2246:16:2246:16 | SideEffect | m2246_74 | +| ir.cpp:2246:16:2246:16 | SideEffect | ~m2246_65 | | ir.cpp:2246:16:2246:16 | SideEffect | ~m2248_5 | -| ir.cpp:2246:20:2246:20 | Address | &:r2246_25 | | ir.cpp:2246:20:2246:20 | Address | &:r2246_33 | -| ir.cpp:2246:20:2246:20 | Address | &:r2246_44 | -| ir.cpp:2246:20:2246:20 | Address | &:r2246_75 | -| ir.cpp:2246:20:2246:20 | Address | &:r2246_75 | -| ir.cpp:2246:20:2246:20 | Arg(0) | 0:r2246_45 | +| ir.cpp:2246:20:2246:20 | Address | &:r2246_41 | +| ir.cpp:2246:20:2246:20 | Address | &:r2246_52 | +| ir.cpp:2246:20:2246:20 | Address | &:r2246_83 | +| ir.cpp:2246:20:2246:20 | Address | &:r2246_83 | +| ir.cpp:2246:20:2246:20 | Arg(0) | 0:r2246_53 | | ir.cpp:2246:20:2246:20 | Arg(this) | this:r0_2 | | ir.cpp:2246:20:2246:20 | Arg(this) | this:r0_5 | | ir.cpp:2246:20:2246:20 | Arg(this) | this:r0_7 | | ir.cpp:2246:20:2246:20 | Arg(this) | this:r0_9 | -| ir.cpp:2246:20:2246:20 | Arg(this) | this:r2246_75 | -| ir.cpp:2246:20:2246:20 | CallTarget | func:r2246_27 | +| ir.cpp:2246:20:2246:20 | Arg(this) | this:r2246_83 | | ir.cpp:2246:20:2246:20 | CallTarget | func:r2246_35 | | ir.cpp:2246:20:2246:20 | CallTarget | func:r2246_43 | -| ir.cpp:2246:20:2246:20 | CallTarget | func:r2246_54 | -| ir.cpp:2246:20:2246:20 | CallTarget | func:r2246_76 | -| ir.cpp:2246:20:2246:20 | ChiPartial | partial:m2246_29 | +| ir.cpp:2246:20:2246:20 | CallTarget | func:r2246_51 | +| ir.cpp:2246:20:2246:20 | CallTarget | func:r2246_62 | +| ir.cpp:2246:20:2246:20 | CallTarget | func:r2246_84 | | ir.cpp:2246:20:2246:20 | ChiPartial | partial:m2246_37 | -| ir.cpp:2246:20:2246:20 | ChiPartial | partial:m2246_47 | -| ir.cpp:2246:20:2246:20 | ChiPartial | partial:m2246_56 | -| ir.cpp:2246:20:2246:20 | ChiPartial | partial:m2246_78 | -| ir.cpp:2246:20:2246:20 | ChiPartial | partial:m2246_81 | -| ir.cpp:2246:20:2246:20 | ChiTotal | total:m2246_19 | -| ir.cpp:2246:20:2246:20 | ChiTotal | total:m2246_30 | -| ir.cpp:2246:20:2246:20 | ChiTotal | total:m2246_40 | -| ir.cpp:2246:20:2246:20 | ChiTotal | total:m2246_41 | +| ir.cpp:2246:20:2246:20 | ChiPartial | partial:m2246_45 | +| ir.cpp:2246:20:2246:20 | ChiPartial | partial:m2246_55 | +| ir.cpp:2246:20:2246:20 | ChiPartial | partial:m2246_64 | +| ir.cpp:2246:20:2246:20 | ChiPartial | partial:m2246_86 | +| ir.cpp:2246:20:2246:20 | ChiPartial | partial:m2246_89 | +| ir.cpp:2246:20:2246:20 | ChiTotal | total:m2246_26 | +| ir.cpp:2246:20:2246:20 | ChiTotal | total:m2246_38 | | ir.cpp:2246:20:2246:20 | ChiTotal | total:m2246_48 | -| ir.cpp:2246:20:2246:20 | ChiTotal | total:m2246_71 | -| ir.cpp:2246:20:2246:20 | Condition | r2246_46 | -| ir.cpp:2246:20:2246:20 | Load | m2246_23 | -| ir.cpp:2246:20:2246:20 | Load | m2246_23 | -| ir.cpp:2246:20:2246:20 | Load | m2246_39 | -| ir.cpp:2246:20:2246:20 | Phi | from 3:m2246_31 | -| ir.cpp:2246:20:2246:20 | Phi | from 3:~m2246_38 | -| ir.cpp:2246:20:2246:20 | Phi | from 5:m2246_82 | -| ir.cpp:2246:20:2246:20 | Phi | from 5:~m2246_79 | -| ir.cpp:2246:20:2246:20 | SideEffect | m2246_40 | -| ir.cpp:2246:20:2246:20 | SideEffect | ~m2246_19 | -| ir.cpp:2246:20:2246:20 | SideEffect | ~m2246_30 | -| ir.cpp:2246:20:2246:20 | SideEffect | ~m2246_41 | -| ir.cpp:2246:20:2246:20 | SideEffect | ~m2246_48 | -| ir.cpp:2246:20:2246:20 | SideEffect | ~m2246_71 | -| ir.cpp:2246:20:2246:20 | StoreValue | r2246_28 | +| ir.cpp:2246:20:2246:20 | ChiTotal | total:m2246_49 | +| ir.cpp:2246:20:2246:20 | ChiTotal | total:m2246_56 | +| ir.cpp:2246:20:2246:20 | ChiTotal | total:m2246_79 | +| ir.cpp:2246:20:2246:20 | Condition | r2246_54 | +| ir.cpp:2246:20:2246:20 | Load | m2246_31 | +| ir.cpp:2246:20:2246:20 | Load | m2246_31 | +| ir.cpp:2246:20:2246:20 | Load | m2246_47 | +| ir.cpp:2246:20:2246:20 | Phi | from 3:m2246_39 | +| ir.cpp:2246:20:2246:20 | Phi | from 3:~m2246_46 | +| ir.cpp:2246:20:2246:20 | Phi | from 5:m2246_90 | +| ir.cpp:2246:20:2246:20 | Phi | from 5:~m2246_87 | +| ir.cpp:2246:20:2246:20 | SideEffect | m2246_48 | +| ir.cpp:2246:20:2246:20 | SideEffect | ~m2246_26 | +| ir.cpp:2246:20:2246:20 | SideEffect | ~m2246_38 | +| ir.cpp:2246:20:2246:20 | SideEffect | ~m2246_49 | +| ir.cpp:2246:20:2246:20 | SideEffect | ~m2246_56 | +| ir.cpp:2246:20:2246:20 | SideEffect | ~m2246_79 | | ir.cpp:2246:20:2246:20 | StoreValue | r2246_36 | -| ir.cpp:2246:20:2246:20 | Unary | r2246_26 | +| ir.cpp:2246:20:2246:20 | StoreValue | r2246_44 | | ir.cpp:2246:20:2246:20 | Unary | r2246_34 | | ir.cpp:2246:20:2246:20 | Unary | r2246_42 | -| ir.cpp:2246:20:2246:20 | Unary | r2246_53 | -| ir.cpp:2246:20:2246:20 | Unary | r2246_55 | -| ir.cpp:2246:20:2246:20 | Unary | r2246_77 | +| ir.cpp:2246:20:2246:20 | Unary | r2246_50 | +| ir.cpp:2246:20:2246:20 | Unary | r2246_61 | +| ir.cpp:2246:20:2246:20 | Unary | r2246_63 | +| ir.cpp:2246:20:2246:20 | Unary | r2246_85 | | ir.cpp:2246:20:2246:50 | Address | &:r2246_2 | | ir.cpp:2246:20:2246:50 | Address | &:r2246_2 | | ir.cpp:2246:20:2246:50 | Arg(this) | this:r2246_2 | @@ -11592,25 +11801,36 @@ | ir.cpp:2246:20:2246:50 | ChiTotal | total:m2246_3 | | ir.cpp:2246:20:2246:50 | ChiTotal | total:m2246_12 | | ir.cpp:2246:20:2246:50 | SideEffect | ~m2246_12 | -| ir.cpp:2246:20:2246:50 | StoreValue | r2246_22 | +| ir.cpp:2246:20:2246:50 | StoreValue | r2246_30 | | ir.cpp:2246:20:2246:50 | Unary | r2246_2 | -| ir.cpp:2246:20:2246:51 | Address | &:r2246_60 | -| ir.cpp:2246:20:2246:51 | Arg(0) | 0:r2246_60 | -| ir.cpp:2246:20:2246:51 | SideEffect | ~m2246_63 | -| ir.cpp:2246:20:2246:51 | Unary | r2246_58 | -| ir.cpp:2246:20:2246:51 | Unary | r2246_59 | +| ir.cpp:2246:20:2246:51 | Address | &:r2246_68 | +| ir.cpp:2246:20:2246:51 | Arg(0) | 0:r2246_68 | +| ir.cpp:2246:20:2246:51 | SideEffect | ~m2246_71 | +| ir.cpp:2246:20:2246:51 | Unary | r2246_66 | +| ir.cpp:2246:20:2246:51 | Unary | r2246_67 | | ir.cpp:2246:35:2246:49 | Address | &:r2246_5 | | ir.cpp:2246:35:2246:49 | Address | &:r2246_5 | | ir.cpp:2246:35:2246:49 | Address | &:r2246_5 | +| ir.cpp:2246:35:2246:49 | Address | &:r2246_22 | +| ir.cpp:2246:35:2246:49 | Address | &:r2246_22 | | ir.cpp:2246:35:2246:49 | Arg(0) | 0:r2246_16 | | ir.cpp:2246:35:2246:49 | Arg(this) | this:r2246_5 | +| ir.cpp:2246:35:2246:49 | Arg(this) | this:r2246_22 | | ir.cpp:2246:35:2246:49 | CallTarget | func:r2246_7 | +| ir.cpp:2246:35:2246:49 | CallTarget | func:r2246_23 | | ir.cpp:2246:35:2246:49 | ChiPartial | partial:m2246_11 | | ir.cpp:2246:35:2246:49 | ChiPartial | partial:m2246_14 | +| ir.cpp:2246:35:2246:49 | ChiPartial | partial:m2246_25 | +| ir.cpp:2246:35:2246:49 | ChiPartial | partial:m2246_28 | | ir.cpp:2246:35:2246:49 | ChiTotal | total:m2242_35 | | ir.cpp:2246:35:2246:49 | ChiTotal | total:m2246_6 | +| ir.cpp:2246:35:2246:49 | ChiTotal | total:m2246_15 | +| ir.cpp:2246:35:2246:49 | ChiTotal | total:m2246_19 | | ir.cpp:2246:35:2246:49 | Load | m2246_15 | +| ir.cpp:2246:35:2246:49 | SideEffect | m2246_15 | | ir.cpp:2246:35:2246:49 | SideEffect | ~m2242_35 | +| ir.cpp:2246:35:2246:49 | SideEffect | ~m2246_19 | +| ir.cpp:2246:35:2246:49 | Unary | r2246_5 | | ir.cpp:2246:42:2246:48 | Address | &:r2246_9 | | ir.cpp:2246:42:2246:48 | Arg(0) | 0:r2246_9 | | ir.cpp:2246:42:2246:48 | SideEffect | ~m2240_3 | @@ -11621,9 +11841,9 @@ | ir.cpp:2247:16:2247:17 | CallTarget | func:r2247_3 | | ir.cpp:2247:16:2247:17 | ChiPartial | partial:m2247_5 | | ir.cpp:2247:16:2247:17 | ChiPartial | partial:m2247_7 | -| ir.cpp:2247:16:2247:17 | ChiTotal | total:m2246_63 | +| ir.cpp:2247:16:2247:17 | ChiTotal | total:m2246_71 | | ir.cpp:2247:16:2247:17 | ChiTotal | total:m2247_2 | -| ir.cpp:2247:16:2247:17 | SideEffect | ~m2246_63 | +| ir.cpp:2247:16:2247:17 | SideEffect | ~m2246_71 | | ir.cpp:2248:5:2248:5 | Address | &:r2248_1 | | ir.cpp:2248:5:2248:5 | Address | &:r2248_1 | | ir.cpp:2248:5:2248:5 | Arg(this) | this:r2248_1 | @@ -11654,9 +11874,9 @@ | ir.cpp:2250:18:2250:25 | CallTarget | func:r2250_3 | | ir.cpp:2250:18:2250:25 | ChiPartial | partial:m2250_7 | | ir.cpp:2250:18:2250:25 | ChiPartial | partial:m2250_10 | -| ir.cpp:2250:18:2250:25 | ChiTotal | total:m2246_48 | +| ir.cpp:2250:18:2250:25 | ChiTotal | total:m2246_56 | | ir.cpp:2250:18:2250:25 | ChiTotal | total:m2250_2 | -| ir.cpp:2250:18:2250:25 | SideEffect | ~m2246_48 | +| ir.cpp:2250:18:2250:25 | SideEffect | ~m2246_56 | | ir.cpp:2250:28:2250:29 | Address | &:r2250_12 | | ir.cpp:2250:28:2250:29 | Address | &:r2250_12 | | ir.cpp:2250:28:2250:29 | Address | &:r2250_42 | @@ -12105,11 +12325,17 @@ | smart_ptr.cpp:12:20:12:27 | Address | &:r12_2 | | smart_ptr.cpp:12:20:12:27 | Address | &:r12_9 | | smart_ptr.cpp:12:20:12:27 | Address | &:r12_9 | +| smart_ptr.cpp:12:20:12:27 | Address | &:r12_16 | +| smart_ptr.cpp:12:20:12:27 | Address | &:r12_16 | | smart_ptr.cpp:12:20:12:27 | Arg(0) | 0:r12_9 | +| smart_ptr.cpp:12:20:12:27 | Arg(this) | this:r12_16 | +| smart_ptr.cpp:12:20:12:27 | CallTarget | func:r12_17 | | smart_ptr.cpp:12:20:12:27 | ChiPartial | partial:m12_14 | | smart_ptr.cpp:12:20:12:27 | ChiTotal | total:m10_8 | | smart_ptr.cpp:12:20:12:27 | Load | m12_8 | +| smart_ptr.cpp:12:20:12:27 | SideEffect | m12_8 | | smart_ptr.cpp:12:20:12:27 | SideEffect | ~m10_8 | +| smart_ptr.cpp:12:20:12:27 | Unary | r12_2 | | smart_ptr.cpp:12:24:12:28 | Load | m11_9 | | smart_ptr.cpp:12:24:12:28 | StoreValue | r12_7 | | smart_ptr.cpp:12:25:12:26 | Arg(0) | 0:r12_5 | @@ -12148,18 +12374,24 @@ | smart_ptr.cpp:19:20:19:21 | Address | &:r19_7 | | smart_ptr.cpp:19:20:19:21 | Address | &:r19_13 | | smart_ptr.cpp:19:20:19:21 | Address | &:r19_13 | +| smart_ptr.cpp:19:20:19:21 | Address | &:r19_20 | +| smart_ptr.cpp:19:20:19:21 | Address | &:r19_20 | | smart_ptr.cpp:19:20:19:21 | Arg(0) | 0:r19_7 | | smart_ptr.cpp:19:20:19:21 | Arg(0) | 0:r19_13 | | smart_ptr.cpp:19:20:19:21 | Arg(this) | this:r19_2 | +| smart_ptr.cpp:19:20:19:21 | Arg(this) | this:r19_20 | | smart_ptr.cpp:19:20:19:21 | CallTarget | func:r19_4 | +| smart_ptr.cpp:19:20:19:21 | CallTarget | func:r19_21 | | smart_ptr.cpp:19:20:19:21 | ChiPartial | partial:m19_9 | | smart_ptr.cpp:19:20:19:21 | ChiPartial | partial:m19_18 | | smart_ptr.cpp:19:20:19:21 | ChiTotal | total:m17_8 | | smart_ptr.cpp:19:20:19:21 | ChiTotal | total:m18_8 | | smart_ptr.cpp:19:20:19:21 | Load | m19_12 | | smart_ptr.cpp:19:20:19:21 | SideEffect | m18_9 | +| smart_ptr.cpp:19:20:19:21 | SideEffect | m19_12 | | smart_ptr.cpp:19:20:19:21 | SideEffect | ~m17_8 | | smart_ptr.cpp:19:20:19:21 | SideEffect | ~m18_8 | +| smart_ptr.cpp:19:20:19:21 | Unary | r19_2 | | smart_ptr.cpp:19:20:19:21 | Unary | r19_5 | | smart_ptr.cpp:19:20:19:21 | Unary | r19_6 | | smart_ptr.cpp:20:1:20:1 | Address | &:r20_2 | @@ -12180,16 +12412,22 @@ | smart_ptr.cpp:31:26:31:37 | Address | &:r31_2 | | smart_ptr.cpp:31:26:31:37 | Address | &:r31_7 | | smart_ptr.cpp:31:26:31:37 | Address | &:r31_13 | +| smart_ptr.cpp:31:26:31:37 | Address | &:r31_18 | +| smart_ptr.cpp:31:26:31:37 | Address | &:r31_18 | | smart_ptr.cpp:31:26:31:37 | Arg(0) | 0:r31_7 | | smart_ptr.cpp:31:26:31:37 | Arg(0) | 0:r31_13 | | smart_ptr.cpp:31:26:31:37 | Arg(this) | this:r31_2 | +| smart_ptr.cpp:31:26:31:37 | Arg(this) | this:r31_18 | | smart_ptr.cpp:31:26:31:37 | CallTarget | func:r31_4 | +| smart_ptr.cpp:31:26:31:37 | CallTarget | func:r31_19 | | smart_ptr.cpp:31:26:31:37 | ChiPartial | partial:m31_9 | | smart_ptr.cpp:31:26:31:37 | ChiTotal | total:m28_4 | | smart_ptr.cpp:31:26:31:37 | Load | m31_12 | | smart_ptr.cpp:31:26:31:37 | SideEffect | m29_2 | +| smart_ptr.cpp:31:26:31:37 | SideEffect | m31_12 | | smart_ptr.cpp:31:26:31:37 | SideEffect | ~m28_4 | | smart_ptr.cpp:31:26:31:37 | SideEffect | ~m31_16 | +| smart_ptr.cpp:31:26:31:37 | Unary | r31_2 | | smart_ptr.cpp:31:26:31:37 | Unary | r31_5 | | smart_ptr.cpp:31:26:31:37 | Unary | r31_6 | | smart_ptr.cpp:33:28:33:47 | Address | &:r33_1 | @@ -12203,18 +12441,24 @@ | smart_ptr.cpp:35:30:35:49 | Address | &:r35_7 | | smart_ptr.cpp:35:30:35:49 | Address | &:r35_13 | | smart_ptr.cpp:35:30:35:49 | Address | &:r35_13 | +| smart_ptr.cpp:35:30:35:49 | Address | &:r35_20 | +| smart_ptr.cpp:35:30:35:49 | Address | &:r35_20 | | smart_ptr.cpp:35:30:35:49 | Arg(0) | 0:r35_7 | | smart_ptr.cpp:35:30:35:49 | Arg(0) | 0:r35_13 | | smart_ptr.cpp:35:30:35:49 | Arg(this) | this:r35_2 | +| smart_ptr.cpp:35:30:35:49 | Arg(this) | this:r35_20 | | smart_ptr.cpp:35:30:35:49 | CallTarget | func:r35_4 | +| smart_ptr.cpp:35:30:35:49 | CallTarget | func:r35_21 | | smart_ptr.cpp:35:30:35:49 | ChiPartial | partial:m35_9 | | smart_ptr.cpp:35:30:35:49 | ChiPartial | partial:m35_18 | | smart_ptr.cpp:35:30:35:49 | ChiTotal | total:m31_16 | | smart_ptr.cpp:35:30:35:49 | ChiTotal | total:m35_16 | | smart_ptr.cpp:35:30:35:49 | Load | m35_12 | | smart_ptr.cpp:35:30:35:49 | SideEffect | m33_2 | +| smart_ptr.cpp:35:30:35:49 | SideEffect | m35_12 | | smart_ptr.cpp:35:30:35:49 | SideEffect | ~m31_16 | | smart_ptr.cpp:35:30:35:49 | SideEffect | ~m35_16 | +| smart_ptr.cpp:35:30:35:49 | Unary | r35_2 | | smart_ptr.cpp:35:30:35:49 | Unary | r35_5 | | smart_ptr.cpp:35:30:35:49 | Unary | r35_6 | | smart_ptr.cpp:37:39:37:53 | Address | &:r37_1 | @@ -12228,18 +12472,24 @@ | smart_ptr.cpp:39:37:39:51 | Address | &:r39_7 | | smart_ptr.cpp:39:37:39:51 | Address | &:r39_13 | | smart_ptr.cpp:39:37:39:51 | Address | &:r39_13 | +| smart_ptr.cpp:39:37:39:51 | Address | &:r39_20 | +| smart_ptr.cpp:39:37:39:51 | Address | &:r39_20 | | smart_ptr.cpp:39:37:39:51 | Arg(0) | 0:r39_7 | | smart_ptr.cpp:39:37:39:51 | Arg(0) | 0:r39_13 | | smart_ptr.cpp:39:37:39:51 | Arg(this) | this:r39_2 | +| smart_ptr.cpp:39:37:39:51 | Arg(this) | this:r39_20 | | smart_ptr.cpp:39:37:39:51 | CallTarget | func:r39_4 | +| smart_ptr.cpp:39:37:39:51 | CallTarget | func:r39_21 | | smart_ptr.cpp:39:37:39:51 | ChiPartial | partial:m39_9 | | smart_ptr.cpp:39:37:39:51 | ChiPartial | partial:m39_18 | | smart_ptr.cpp:39:37:39:51 | ChiTotal | total:m35_19 | | smart_ptr.cpp:39:37:39:51 | ChiTotal | total:m39_16 | | smart_ptr.cpp:39:37:39:51 | Load | m39_12 | | smart_ptr.cpp:39:37:39:51 | SideEffect | m37_2 | +| smart_ptr.cpp:39:37:39:51 | SideEffect | m39_12 | | smart_ptr.cpp:39:37:39:51 | SideEffect | ~m35_19 | | smart_ptr.cpp:39:37:39:51 | SideEffect | ~m39_16 | +| smart_ptr.cpp:39:37:39:51 | Unary | r39_2 | | smart_ptr.cpp:39:37:39:51 | Unary | r39_5 | | smart_ptr.cpp:39:37:39:51 | Unary | r39_6 | | smart_ptr.cpp:41:39:41:53 | Address | &:r41_1 | @@ -12253,18 +12503,24 @@ | smart_ptr.cpp:43:37:43:51 | Address | &:r43_7 | | smart_ptr.cpp:43:37:43:51 | Address | &:r43_13 | | smart_ptr.cpp:43:37:43:51 | Address | &:r43_13 | +| smart_ptr.cpp:43:37:43:51 | Address | &:r43_20 | +| smart_ptr.cpp:43:37:43:51 | Address | &:r43_20 | | smart_ptr.cpp:43:37:43:51 | Arg(0) | 0:r43_7 | | smart_ptr.cpp:43:37:43:51 | Arg(0) | 0:r43_13 | | smart_ptr.cpp:43:37:43:51 | Arg(this) | this:r43_2 | +| smart_ptr.cpp:43:37:43:51 | Arg(this) | this:r43_20 | | smart_ptr.cpp:43:37:43:51 | CallTarget | func:r43_4 | +| smart_ptr.cpp:43:37:43:51 | CallTarget | func:r43_21 | | smart_ptr.cpp:43:37:43:51 | ChiPartial | partial:m43_9 | | smart_ptr.cpp:43:37:43:51 | ChiPartial | partial:m43_18 | | smart_ptr.cpp:43:37:43:51 | ChiTotal | total:m39_19 | | smart_ptr.cpp:43:37:43:51 | ChiTotal | total:m43_16 | | smart_ptr.cpp:43:37:43:51 | Load | m43_12 | | smart_ptr.cpp:43:37:43:51 | SideEffect | m41_2 | +| smart_ptr.cpp:43:37:43:51 | SideEffect | m43_12 | | smart_ptr.cpp:43:37:43:51 | SideEffect | ~m39_19 | | smart_ptr.cpp:43:37:43:51 | SideEffect | ~m43_16 | +| smart_ptr.cpp:43:37:43:51 | Unary | r43_2 | | smart_ptr.cpp:43:37:43:51 | Unary | r43_5 | | smart_ptr.cpp:43:37:43:51 | Unary | r43_6 | | smart_ptr.cpp:45:45:45:65 | Address | &:r45_1 | @@ -12277,16 +12533,22 @@ | smart_ptr.cpp:47:43:47:63 | Address | &:r47_2 | | smart_ptr.cpp:47:43:47:63 | Address | &:r47_7 | | smart_ptr.cpp:47:43:47:63 | Address | &:r47_13 | +| smart_ptr.cpp:47:43:47:63 | Address | &:r47_18 | +| smart_ptr.cpp:47:43:47:63 | Address | &:r47_18 | | smart_ptr.cpp:47:43:47:63 | Arg(0) | 0:r47_7 | | smart_ptr.cpp:47:43:47:63 | Arg(0) | 0:r47_13 | | smart_ptr.cpp:47:43:47:63 | Arg(this) | this:r47_2 | +| smart_ptr.cpp:47:43:47:63 | Arg(this) | this:r47_18 | | smart_ptr.cpp:47:43:47:63 | CallTarget | func:r47_4 | +| smart_ptr.cpp:47:43:47:63 | CallTarget | func:r47_19 | | smart_ptr.cpp:47:43:47:63 | ChiPartial | partial:m47_9 | | smart_ptr.cpp:47:43:47:63 | ChiTotal | total:m43_19 | | smart_ptr.cpp:47:43:47:63 | Load | m47_12 | | smart_ptr.cpp:47:43:47:63 | SideEffect | m45_2 | +| smart_ptr.cpp:47:43:47:63 | SideEffect | m47_12 | | smart_ptr.cpp:47:43:47:63 | SideEffect | ~m43_19 | | smart_ptr.cpp:47:43:47:63 | SideEffect | ~m47_16 | +| smart_ptr.cpp:47:43:47:63 | Unary | r47_2 | | smart_ptr.cpp:47:43:47:63 | Unary | r47_5 | | smart_ptr.cpp:47:43:47:63 | Unary | r47_6 | | smart_ptr.cpp:48:1:48:1 | Address | &:r48_2 | @@ -12498,6 +12760,385 @@ | struct_init.cpp:41:21:41:32 | ChiTotal | total:m41_7 | | struct_init.cpp:41:21:41:32 | SideEffect | ~m41_7 | | struct_init.cpp:41:21:41:32 | Unary | r41_3 | +| temp.cpp:14:6:14:14 | Address | &:r14_5 | +| temp.cpp:14:6:14:14 | ChiPartial | partial:m14_3 | +| temp.cpp:14:6:14:14 | ChiTotal | total:m14_2 | +| temp.cpp:14:6:14:14 | Load | m17_25 | +| temp.cpp:14:6:14:14 | SideEffect | ~m18_5 | +| temp.cpp:15:10:15:10 | Address | &:r15_1 | +| temp.cpp:15:14:15:35 | Address | &:r15_2 | +| temp.cpp:15:14:15:35 | Address | &:r15_2 | +| temp.cpp:15:14:15:35 | Address | &:r15_2 | +| temp.cpp:15:14:15:35 | Address | &:r15_2 | +| temp.cpp:15:14:15:35 | Address | &:r15_17 | +| temp.cpp:15:14:15:35 | Address | &:r15_17 | +| temp.cpp:15:14:15:35 | Arg(this) | this:r15_2 | +| temp.cpp:15:14:15:35 | Arg(this) | this:r15_2 | +| temp.cpp:15:14:15:35 | Arg(this) | this:r15_17 | +| temp.cpp:15:14:15:35 | CallTarget | func:r15_4 | +| temp.cpp:15:14:15:35 | CallTarget | func:r15_18 | +| temp.cpp:15:14:15:35 | ChiPartial | partial:m15_6 | +| temp.cpp:15:14:15:35 | ChiPartial | partial:m15_8 | +| temp.cpp:15:14:15:35 | ChiPartial | partial:m15_15 | +| temp.cpp:15:14:15:35 | ChiPartial | partial:m15_20 | +| temp.cpp:15:14:15:35 | ChiPartial | partial:m15_23 | +| temp.cpp:15:14:15:35 | ChiTotal | total:m14_4 | +| temp.cpp:15:14:15:35 | ChiTotal | total:m15_3 | +| temp.cpp:15:14:15:35 | ChiTotal | total:m15_9 | +| temp.cpp:15:14:15:35 | ChiTotal | total:m15_13 | +| temp.cpp:15:14:15:35 | ChiTotal | total:m15_16 | +| temp.cpp:15:14:15:35 | SideEffect | m15_9 | +| temp.cpp:15:14:15:35 | SideEffect | m15_16 | +| temp.cpp:15:14:15:35 | SideEffect | ~m14_4 | +| temp.cpp:15:14:15:35 | SideEffect | ~m15_13 | +| temp.cpp:15:14:15:35 | Unary | r15_2 | +| temp.cpp:15:37:15:41 | CallTarget | func:r15_10 | +| temp.cpp:15:37:15:41 | ChiPartial | partial:m15_12 | +| temp.cpp:15:37:15:41 | ChiTotal | total:m15_7 | +| temp.cpp:15:37:15:41 | SideEffect | ~m15_7 | +| temp.cpp:15:37:15:41 | StoreValue | r15_11 | +| temp.cpp:16:26:16:26 | Address | &:r16_1 | +| temp.cpp:16:26:16:26 | Address | &:r16_1 | +| temp.cpp:16:26:16:26 | Arg(this) | this:r16_1 | +| temp.cpp:16:28:16:30 | Arg(0) | 0:r16_4 | +| temp.cpp:16:28:16:63 | CallTarget | func:r16_3 | +| temp.cpp:16:28:16:63 | ChiPartial | partial:m16_21 | +| temp.cpp:16:28:16:63 | ChiPartial | partial:m16_23 | +| temp.cpp:16:28:16:63 | ChiTotal | total:m16_2 | +| temp.cpp:16:28:16:63 | ChiTotal | total:m16_16 | +| temp.cpp:16:28:16:63 | SideEffect | ~m16_16 | +| temp.cpp:16:33:16:54 | Address | &:r16_5 | +| temp.cpp:16:33:16:54 | Address | &:r16_5 | +| temp.cpp:16:33:16:54 | Address | &:r16_5 | +| temp.cpp:16:33:16:54 | Address | &:r16_5 | +| temp.cpp:16:33:16:54 | Address | &:r16_25 | +| temp.cpp:16:33:16:54 | Address | &:r16_25 | +| temp.cpp:16:33:16:54 | Arg(this) | this:r16_5 | +| temp.cpp:16:33:16:54 | Arg(this) | this:r16_5 | +| temp.cpp:16:33:16:54 | Arg(this) | this:r16_25 | +| temp.cpp:16:33:16:54 | CallTarget | func:r16_7 | +| temp.cpp:16:33:16:54 | CallTarget | func:r16_26 | +| temp.cpp:16:33:16:54 | ChiPartial | partial:m16_9 | +| temp.cpp:16:33:16:54 | ChiPartial | partial:m16_11 | +| temp.cpp:16:33:16:54 | ChiPartial | partial:m16_18 | +| temp.cpp:16:33:16:54 | ChiPartial | partial:m16_28 | +| temp.cpp:16:33:16:54 | ChiPartial | partial:m16_31 | +| temp.cpp:16:33:16:54 | ChiTotal | total:m15_21 | +| temp.cpp:16:33:16:54 | ChiTotal | total:m16_6 | +| temp.cpp:16:33:16:54 | ChiTotal | total:m16_12 | +| temp.cpp:16:33:16:54 | ChiTotal | total:m16_19 | +| temp.cpp:16:33:16:54 | ChiTotal | total:m16_22 | +| temp.cpp:16:33:16:54 | SideEffect | m16_12 | +| temp.cpp:16:33:16:54 | SideEffect | m16_19 | +| temp.cpp:16:33:16:54 | SideEffect | ~m15_21 | +| temp.cpp:16:33:16:54 | SideEffect | ~m16_22 | +| temp.cpp:16:33:16:54 | Unary | r16_5 | +| temp.cpp:16:33:16:54 | Unary | r16_5 | +| temp.cpp:16:56:16:60 | Arg(1) | 1:r16_14 | +| temp.cpp:16:56:16:60 | CallTarget | func:r16_13 | +| temp.cpp:16:56:16:60 | ChiPartial | partial:m16_15 | +| temp.cpp:16:56:16:60 | ChiTotal | total:m16_10 | +| temp.cpp:16:56:16:60 | SideEffect | ~m16_10 | +| temp.cpp:17:5:17:42 | Address | &:r17_1 | +| temp.cpp:17:12:17:33 | Address | &:r17_2 | +| temp.cpp:17:12:17:33 | Address | &:r17_2 | +| temp.cpp:17:12:17:33 | Address | &:r17_2 | +| temp.cpp:17:12:17:33 | Address | &:r17_2 | +| temp.cpp:17:12:17:33 | Address | &:r17_17 | +| temp.cpp:17:12:17:33 | Address | &:r17_17 | +| temp.cpp:17:12:17:33 | Arg(this) | this:r17_2 | +| temp.cpp:17:12:17:33 | Arg(this) | this:r17_2 | +| temp.cpp:17:12:17:33 | Arg(this) | this:r17_17 | +| temp.cpp:17:12:17:33 | CallTarget | func:r17_4 | +| temp.cpp:17:12:17:33 | CallTarget | func:r17_18 | +| temp.cpp:17:12:17:33 | ChiPartial | partial:m17_6 | +| temp.cpp:17:12:17:33 | ChiPartial | partial:m17_8 | +| temp.cpp:17:12:17:33 | ChiPartial | partial:m17_15 | +| temp.cpp:17:12:17:33 | ChiPartial | partial:m17_20 | +| temp.cpp:17:12:17:33 | ChiPartial | partial:m17_23 | +| temp.cpp:17:12:17:33 | ChiTotal | total:m16_29 | +| temp.cpp:17:12:17:33 | ChiTotal | total:m17_3 | +| temp.cpp:17:12:17:33 | ChiTotal | total:m17_9 | +| temp.cpp:17:12:17:33 | ChiTotal | total:m17_13 | +| temp.cpp:17:12:17:33 | ChiTotal | total:m17_16 | +| temp.cpp:17:12:17:33 | SideEffect | m17_9 | +| temp.cpp:17:12:17:33 | SideEffect | m17_16 | +| temp.cpp:17:12:17:33 | SideEffect | ~m16_29 | +| temp.cpp:17:12:17:33 | SideEffect | ~m17_13 | +| temp.cpp:17:12:17:33 | Unary | r17_2 | +| temp.cpp:17:35:17:39 | CallTarget | func:r17_10 | +| temp.cpp:17:35:17:39 | ChiPartial | partial:m17_12 | +| temp.cpp:17:35:17:39 | ChiTotal | total:m17_7 | +| temp.cpp:17:35:17:39 | SideEffect | ~m17_7 | +| temp.cpp:17:35:17:39 | StoreValue | r17_11 | +| temp.cpp:18:1:18:1 | Address | &:r18_1 | +| temp.cpp:18:1:18:1 | Address | &:r18_1 | +| temp.cpp:18:1:18:1 | Arg(this) | this:r18_1 | +| temp.cpp:18:1:18:1 | CallTarget | func:r18_2 | +| temp.cpp:18:1:18:1 | ChiPartial | partial:m18_4 | +| temp.cpp:18:1:18:1 | ChiPartial | partial:m18_7 | +| temp.cpp:18:1:18:1 | ChiTotal | total:m16_32 | +| temp.cpp:18:1:18:1 | ChiTotal | total:m17_21 | +| temp.cpp:18:1:18:1 | SideEffect | m16_32 | +| temp.cpp:18:1:18:1 | SideEffect | ~m17_21 | +| temp.cpp:21:6:21:15 | Address | &:r21_5 | +| temp.cpp:21:6:21:15 | ChiPartial | partial:m21_3 | +| temp.cpp:21:6:21:15 | ChiTotal | total:m21_2 | +| temp.cpp:21:6:21:15 | Load | m23_52 | +| temp.cpp:21:6:21:15 | SideEffect | ~m23_47 | +| temp.cpp:22:5:22:30 | Address | &:r22_3 | +| temp.cpp:22:5:22:30 | Address | &:r22_7 | +| temp.cpp:22:5:22:30 | Arg(0) | 0:r22_2 | +| temp.cpp:22:5:22:30 | Arg(this) | this:r22_7 | +| temp.cpp:22:5:22:30 | CallTarget | func:r22_1 | +| temp.cpp:22:5:22:30 | CallTarget | func:r22_8 | +| temp.cpp:22:5:22:30 | ChiPartial | partial:m22_4 | +| temp.cpp:22:5:22:30 | ChiPartial | partial:m22_10 | +| temp.cpp:22:5:22:30 | ChiPartial | partial:m22_12 | +| temp.cpp:22:5:22:30 | ChiTotal | total:m21_4 | +| temp.cpp:22:5:22:30 | ChiTotal | total:m22_5 | +| temp.cpp:22:5:22:30 | ChiTotal | total:m22_6 | +| temp.cpp:22:5:22:30 | SideEffect | ~m21_4 | +| temp.cpp:22:5:22:30 | SideEffect | ~m22_5 | +| temp.cpp:22:5:22:30 | Unary | r22_3 | +| temp.cpp:23:5:23:75 | Address | &:r23_1 | +| temp.cpp:23:12:23:33 | Address | &:r23_2 | +| temp.cpp:23:12:23:33 | Address | &:r23_2 | +| temp.cpp:23:12:23:33 | Address | &:r23_2 | +| temp.cpp:23:12:23:33 | Address | &:r23_2 | +| temp.cpp:23:12:23:33 | Address | &:r23_43 | +| temp.cpp:23:12:23:33 | Address | &:r23_43 | +| temp.cpp:23:12:23:33 | Arg(this) | this:r23_2 | +| temp.cpp:23:12:23:33 | Arg(this) | this:r23_2 | +| temp.cpp:23:12:23:33 | Arg(this) | this:r23_43 | +| temp.cpp:23:12:23:33 | CallTarget | func:r23_4 | +| temp.cpp:23:12:23:33 | CallTarget | func:r23_44 | +| temp.cpp:23:12:23:33 | ChiPartial | partial:m23_6 | +| temp.cpp:23:12:23:33 | ChiPartial | partial:m23_8 | +| temp.cpp:23:12:23:33 | ChiPartial | partial:m23_15 | +| temp.cpp:23:12:23:33 | ChiPartial | partial:m23_46 | +| temp.cpp:23:12:23:33 | ChiPartial | partial:m23_49 | +| temp.cpp:23:12:23:33 | ChiTotal | total:m22_11 | +| temp.cpp:23:12:23:33 | ChiTotal | total:m23_3 | +| temp.cpp:23:12:23:33 | ChiTotal | total:m23_9 | +| temp.cpp:23:12:23:33 | ChiTotal | total:m23_16 | +| temp.cpp:23:12:23:33 | ChiTotal | total:m23_39 | +| temp.cpp:23:12:23:33 | SideEffect | m23_9 | +| temp.cpp:23:12:23:33 | SideEffect | m23_16 | +| temp.cpp:23:12:23:33 | SideEffect | ~m22_11 | +| temp.cpp:23:12:23:33 | SideEffect | ~m23_39 | +| temp.cpp:23:12:23:33 | Unary | r23_2 | +| temp.cpp:23:12:23:41 | Left | r23_17 | +| temp.cpp:23:12:23:74 | StoreValue | r23_51 | +| temp.cpp:23:12:23:74 | Unary | r23_34 | +| temp.cpp:23:35:23:39 | CallTarget | func:r23_10 | +| temp.cpp:23:35:23:39 | ChiPartial | partial:m23_12 | +| temp.cpp:23:35:23:39 | ChiTotal | total:m23_7 | +| temp.cpp:23:35:23:39 | SideEffect | ~m23_7 | +| temp.cpp:23:35:23:39 | Unary | r23_11 | +| temp.cpp:23:45:23:66 | Address | &:r23_18 | +| temp.cpp:23:45:23:66 | Address | &:r23_18 | +| temp.cpp:23:45:23:66 | Address | &:r23_18 | +| temp.cpp:23:45:23:66 | Address | &:r23_18 | +| temp.cpp:23:45:23:66 | Address | &:r23_35 | +| temp.cpp:23:45:23:66 | Address | &:r23_35 | +| temp.cpp:23:45:23:66 | Arg(this) | this:r23_18 | +| temp.cpp:23:45:23:66 | Arg(this) | this:r23_18 | +| temp.cpp:23:45:23:66 | Arg(this) | this:r23_35 | +| temp.cpp:23:45:23:66 | CallTarget | func:r23_20 | +| temp.cpp:23:45:23:66 | CallTarget | func:r23_36 | +| temp.cpp:23:45:23:66 | ChiPartial | partial:m23_22 | +| temp.cpp:23:45:23:66 | ChiPartial | partial:m23_24 | +| temp.cpp:23:45:23:66 | ChiPartial | partial:m23_31 | +| temp.cpp:23:45:23:66 | ChiPartial | partial:m23_38 | +| temp.cpp:23:45:23:66 | ChiPartial | partial:m23_41 | +| temp.cpp:23:45:23:66 | ChiTotal | total:m23_13 | +| temp.cpp:23:45:23:66 | ChiTotal | total:m23_19 | +| temp.cpp:23:45:23:66 | ChiTotal | total:m23_25 | +| temp.cpp:23:45:23:66 | ChiTotal | total:m23_29 | +| temp.cpp:23:45:23:66 | ChiTotal | total:m23_32 | +| temp.cpp:23:45:23:66 | SideEffect | m23_25 | +| temp.cpp:23:45:23:66 | SideEffect | m23_32 | +| temp.cpp:23:45:23:66 | SideEffect | ~m23_13 | +| temp.cpp:23:45:23:66 | SideEffect | ~m23_29 | +| temp.cpp:23:45:23:66 | Unary | r23_18 | +| temp.cpp:23:45:23:74 | Right | r23_33 | +| temp.cpp:23:68:23:72 | CallTarget | func:r23_26 | +| temp.cpp:23:68:23:72 | ChiPartial | partial:m23_28 | +| temp.cpp:23:68:23:72 | ChiTotal | total:m23_23 | +| temp.cpp:23:68:23:72 | SideEffect | ~m23_23 | +| temp.cpp:23:68:23:72 | Unary | r23_27 | +| temp.cpp:29:6:29:15 | ChiPartial | partial:m29_3 | +| temp.cpp:29:6:29:15 | ChiTotal | total:m29_2 | +| temp.cpp:29:6:29:15 | SideEffect | ~m31_6 | +| temp.cpp:30:33:30:34 | Address | &:r30_1 | +| temp.cpp:30:38:30:70 | CallTarget | func:r30_3 | +| temp.cpp:30:38:30:70 | ChiPartial | partial:m30_5 | +| temp.cpp:30:38:30:70 | ChiTotal | total:m29_4 | +| temp.cpp:30:38:30:70 | SideEffect | ~m29_4 | +| temp.cpp:30:38:30:70 | StoreValue | r30_4 | +| temp.cpp:30:38:30:72 | Address | &:r30_2 | +| temp.cpp:30:38:30:72 | StoreValue | r30_9 | +| temp.cpp:30:38:30:72 | Unary | r30_2 | +| temp.cpp:30:38:30:72 | Unary | r30_2 | +| temp.cpp:30:38:30:72 | Unary | r30_8 | +| temp.cpp:31:1:31:1 | Address | &:r31_2 | +| temp.cpp:31:1:31:1 | Address | &:r31_2 | +| temp.cpp:31:1:31:1 | Arg(this) | this:r31_2 | +| temp.cpp:31:1:31:1 | CallTarget | func:r31_3 | +| temp.cpp:31:1:31:1 | ChiPartial | partial:m31_5 | +| temp.cpp:31:1:31:1 | ChiPartial | partial:m31_8 | +| temp.cpp:31:1:31:1 | ChiTotal | total:m30_6 | +| temp.cpp:31:1:31:1 | ChiTotal | total:m30_7 | +| temp.cpp:31:1:31:1 | SideEffect | m30_7 | +| temp.cpp:31:1:31:1 | SideEffect | ~m30_6 | +| temp.cpp:33:6:33:15 | ChiPartial | partial:m33_3 | +| temp.cpp:33:6:33:15 | ChiTotal | total:m33_2 | +| temp.cpp:33:6:33:15 | SideEffect | ~m36_14 | +| temp.cpp:34:26:34:26 | Address | &:r34_1 | +| temp.cpp:34:26:34:26 | Address | &:r34_1 | +| temp.cpp:34:26:34:26 | Arg(this) | this:r34_1 | +| temp.cpp:34:26:34:26 | CallTarget | func:r34_3 | +| temp.cpp:34:26:34:26 | ChiPartial | partial:m34_5 | +| temp.cpp:34:26:34:26 | ChiPartial | partial:m34_7 | +| temp.cpp:34:26:34:26 | ChiTotal | total:m33_4 | +| temp.cpp:34:26:34:26 | ChiTotal | total:m34_2 | +| temp.cpp:34:26:34:26 | SideEffect | ~m33_4 | +| temp.cpp:35:33:35:35 | Address | &:r35_1 | +| temp.cpp:35:39:35:71 | CallTarget | func:r35_3 | +| temp.cpp:35:39:35:71 | ChiPartial | partial:m35_5 | +| temp.cpp:35:39:35:71 | ChiTotal | total:m34_6 | +| temp.cpp:35:39:35:71 | SideEffect | ~m34_6 | +| temp.cpp:35:39:35:71 | StoreValue | r35_4 | +| temp.cpp:35:39:35:73 | Address | &:r35_2 | +| temp.cpp:35:39:35:73 | StoreValue | r35_9 | +| temp.cpp:35:39:35:73 | Unary | r35_2 | +| temp.cpp:35:39:35:73 | Unary | r35_2 | +| temp.cpp:35:39:35:73 | Unary | r35_8 | +| temp.cpp:36:1:36:1 | Address | &:r36_2 | +| temp.cpp:36:1:36:1 | Address | &:r36_2 | +| temp.cpp:36:1:36:1 | Address | &:r36_10 | +| temp.cpp:36:1:36:1 | Address | &:r36_10 | +| temp.cpp:36:1:36:1 | Arg(this) | this:r36_2 | +| temp.cpp:36:1:36:1 | Arg(this) | this:r36_10 | +| temp.cpp:36:1:36:1 | CallTarget | func:r36_3 | +| temp.cpp:36:1:36:1 | CallTarget | func:r36_11 | +| temp.cpp:36:1:36:1 | ChiPartial | partial:m36_5 | +| temp.cpp:36:1:36:1 | ChiPartial | partial:m36_8 | +| temp.cpp:36:1:36:1 | ChiPartial | partial:m36_13 | +| temp.cpp:36:1:36:1 | ChiPartial | partial:m36_16 | +| temp.cpp:36:1:36:1 | ChiTotal | total:m34_8 | +| temp.cpp:36:1:36:1 | ChiTotal | total:m35_6 | +| temp.cpp:36:1:36:1 | ChiTotal | total:m35_7 | +| temp.cpp:36:1:36:1 | ChiTotal | total:m36_6 | +| temp.cpp:36:1:36:1 | SideEffect | m34_8 | +| temp.cpp:36:1:36:1 | SideEffect | m35_7 | +| temp.cpp:36:1:36:1 | SideEffect | ~m35_6 | +| temp.cpp:36:1:36:1 | SideEffect | ~m36_6 | +| temp.cpp:38:6:38:15 | ChiPartial | partial:m38_3 | +| temp.cpp:38:6:38:15 | ChiTotal | total:m38_2 | +| temp.cpp:38:6:38:15 | SideEffect | ~m39_13 | +| temp.cpp:38:22:38:22 | Address | &:r38_5 | +| temp.cpp:39:3:39:3 | Address | &:r39_2 | +| temp.cpp:39:3:39:3 | Address | &:r39_7 | +| temp.cpp:39:3:39:3 | Address | &:r39_27 | +| temp.cpp:39:3:39:3 | Address | &:r39_38 | +| temp.cpp:39:3:39:3 | Condition | r39_3 | +| temp.cpp:39:3:39:3 | Load | m38_6 | +| temp.cpp:39:3:39:3 | Load | m39_6 | +| temp.cpp:39:3:39:3 | Phi | from 2:m39_28 | +| temp.cpp:39:3:39:3 | Phi | from 2:~m39_23 | +| temp.cpp:39:3:39:3 | Phi | from 3:m39_39 | +| temp.cpp:39:3:39:3 | Phi | from 3:~m39_34 | +| temp.cpp:39:3:39:3 | StoreValue | r39_8 | +| temp.cpp:39:3:39:53 | Address | &:r39_1 | +| temp.cpp:39:3:39:53 | Address | &:r39_9 | +| temp.cpp:39:3:39:53 | Address | &:r39_9 | +| temp.cpp:39:3:39:53 | Arg(this) | this:r39_9 | +| temp.cpp:39:3:39:53 | CallTarget | func:r39_10 | +| temp.cpp:39:3:39:53 | ChiPartial | partial:m39_12 | +| temp.cpp:39:3:39:53 | ChiPartial | partial:m39_15 | +| temp.cpp:39:3:39:53 | ChiTotal | total:m39_5 | +| temp.cpp:39:3:39:53 | ChiTotal | total:~m? | +| temp.cpp:39:3:39:53 | SideEffect | ~m39_5 | +| temp.cpp:39:3:39:53 | SideEffect | ~m? | +| temp.cpp:39:3:39:53 | Unary | r39_1 | +| temp.cpp:39:7:39:28 | Address | &:r39_18 | +| temp.cpp:39:7:39:28 | Address | &:r39_18 | +| temp.cpp:39:7:39:28 | Address | &:r39_18 | +| temp.cpp:39:7:39:28 | Arg(this) | this:r39_18 | +| temp.cpp:39:7:39:28 | CallTarget | func:r39_20 | +| temp.cpp:39:7:39:28 | ChiPartial | partial:m39_22 | +| temp.cpp:39:7:39:28 | ChiPartial | partial:m39_24 | +| temp.cpp:39:7:39:28 | ChiTotal | total:m38_4 | +| temp.cpp:39:7:39:28 | ChiTotal | total:m39_19 | +| temp.cpp:39:7:39:28 | Load | m39_25 | +| temp.cpp:39:7:39:28 | SideEffect | ~m38_4 | +| temp.cpp:39:7:39:28 | StoreValue | r39_26 | +| temp.cpp:39:32:39:53 | Address | &:r39_29 | +| temp.cpp:39:32:39:53 | Address | &:r39_29 | +| temp.cpp:39:32:39:53 | Address | &:r39_29 | +| temp.cpp:39:32:39:53 | Arg(this) | this:r39_29 | +| temp.cpp:39:32:39:53 | CallTarget | func:r39_31 | +| temp.cpp:39:32:39:53 | ChiPartial | partial:m39_33 | +| temp.cpp:39:32:39:53 | ChiPartial | partial:m39_35 | +| temp.cpp:39:32:39:53 | ChiTotal | total:m38_4 | +| temp.cpp:39:32:39:53 | ChiTotal | total:m39_30 | +| temp.cpp:39:32:39:53 | Load | m39_36 | +| temp.cpp:39:32:39:53 | SideEffect | ~m38_4 | +| temp.cpp:39:32:39:53 | StoreValue | r39_37 | +| temp.cpp:42:6:42:15 | ChiPartial | partial:m42_3 | +| temp.cpp:42:6:42:15 | ChiTotal | total:m42_2 | +| temp.cpp:42:22:42:22 | Address | &:r42_5 | +| temp.cpp:43:3:43:3 | Address | &:r43_1 | +| temp.cpp:43:3:43:3 | Condition | r43_2 | +| temp.cpp:43:3:43:3 | Load | m42_6 | +| temp.cpp:43:3:43:68 | Address | &:r43_5 | +| temp.cpp:43:3:43:68 | Address | &:r43_22 | +| temp.cpp:43:3:43:68 | Address | &:r43_39 | +| temp.cpp:43:3:43:68 | Load | m43_4 | +| temp.cpp:43:3:43:68 | Phi | from 2:m43_23 | +| temp.cpp:43:3:43:68 | Phi | from 3:m43_40 | +| temp.cpp:43:7:43:28 | Address | &:r43_7 | +| temp.cpp:43:7:43:28 | Address | &:r43_7 | +| temp.cpp:43:7:43:28 | Address | &:r43_7 | +| temp.cpp:43:7:43:28 | Address | &:r43_7 | +| temp.cpp:43:7:43:28 | Arg(this) | this:r43_7 | +| temp.cpp:43:7:43:28 | Arg(this) | this:r43_7 | +| temp.cpp:43:7:43:28 | CallTarget | func:r43_9 | +| temp.cpp:43:7:43:28 | ChiPartial | partial:m43_11 | +| temp.cpp:43:7:43:28 | ChiPartial | partial:m43_13 | +| temp.cpp:43:7:43:28 | ChiPartial | partial:m43_20 | +| temp.cpp:43:7:43:28 | ChiTotal | total:m42_4 | +| temp.cpp:43:7:43:28 | ChiTotal | total:m43_8 | +| temp.cpp:43:7:43:28 | ChiTotal | total:m43_14 | +| temp.cpp:43:7:43:28 | SideEffect | m43_14 | +| temp.cpp:43:7:43:28 | SideEffect | ~m42_4 | +| temp.cpp:43:30:43:34 | CallTarget | func:r43_15 | +| temp.cpp:43:30:43:34 | ChiPartial | partial:m43_17 | +| temp.cpp:43:30:43:34 | ChiTotal | total:m43_12 | +| temp.cpp:43:30:43:34 | SideEffect | ~m43_12 | +| temp.cpp:43:30:43:34 | StoreValue | r43_16 | +| temp.cpp:43:39:43:60 | Address | &:r43_24 | +| temp.cpp:43:39:43:60 | Address | &:r43_24 | +| temp.cpp:43:39:43:60 | Address | &:r43_24 | +| temp.cpp:43:39:43:60 | Address | &:r43_24 | +| temp.cpp:43:39:43:60 | Arg(this) | this:r43_24 | +| temp.cpp:43:39:43:60 | Arg(this) | this:r43_24 | +| temp.cpp:43:39:43:60 | CallTarget | func:r43_26 | +| temp.cpp:43:39:43:60 | ChiPartial | partial:m43_28 | +| temp.cpp:43:39:43:60 | ChiPartial | partial:m43_30 | +| temp.cpp:43:39:43:60 | ChiPartial | partial:m43_37 | +| temp.cpp:43:39:43:60 | ChiTotal | total:m42_4 | +| temp.cpp:43:39:43:60 | ChiTotal | total:m43_25 | +| temp.cpp:43:39:43:60 | ChiTotal | total:m43_31 | +| temp.cpp:43:39:43:60 | SideEffect | m43_31 | +| temp.cpp:43:39:43:60 | SideEffect | ~m42_4 | +| temp.cpp:43:62:43:66 | CallTarget | func:r43_32 | +| temp.cpp:43:62:43:66 | ChiPartial | partial:m43_34 | +| temp.cpp:43:62:43:66 | ChiTotal | total:m43_29 | +| temp.cpp:43:62:43:66 | SideEffect | ~m43_29 | +| temp.cpp:43:62:43:66 | StoreValue | r43_33 | | try_except.c:6:6:6:6 | ChiPartial | partial:m6_3 | | try_except.c:6:6:6:6 | ChiTotal | total:m6_2 | | try_except.c:6:6:6:6 | SideEffect | ~m11_5 | diff --git a/cpp/ql/test/library-tests/ir/ir/raw_consistency.expected b/cpp/ql/test/library-tests/ir/ir/raw_consistency.expected index aefdbf9d1340..3017c0f2450b 100644 --- a/cpp/ql/test/library-tests/ir/ir/raw_consistency.expected +++ b/cpp/ql/test/library-tests/ir/ir/raw_consistency.expected @@ -6,6 +6,7 @@ missingOperandType duplicateChiOperand sideEffectWithoutPrimary instructionWithoutSuccessor +| temp.cpp:43:3:43:68 | Load: ... ? ... : ... | Instruction 'Load: ... ? ... : ...' has no successors in function '$@'. | temp.cpp:42:6:42:15 | void temp_test6(bool) | void temp_test6(bool) | ambiguousSuccessors unexplainedLoop unnecessaryPhiInstruction 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 02bd64000250..f9f6e6334adb 100644 --- a/cpp/ql/test/library-tests/ir/ir/raw_ir.expected +++ b/cpp/ql/test/library-tests/ir/ir/raw_ir.expected @@ -4731,7 +4731,13 @@ ir.cpp: # 809| v809_17(void) = ^IndirectReadSideEffect[-1] : &:r809_1, ~m? # 809| v809_18(void) = ^BufferReadSideEffect[0] : &:r809_14, ~m? # 809| mu809_19(Base) = ^IndirectMayWriteSideEffect[-1] : &:r809_1 -# 809| r809_20(glval) = CopyValue : r809_15 +# 809| r809_20(glval) = CopyValue : r809_3 +# 809| r809_21(glval) = FunctionAddress[~Base] : +# 809| v809_22(void) = Call[~Base] : func:r809_21, this:r809_20 +# 809| mu809_23(unknown) = ^CallSideEffect : ~m? +# 809| v809_24(void) = ^IndirectReadSideEffect[-1] : &:r809_20, ~m? +# 809| mu809_25(Base) = ^IndirectMayWriteSideEffect[-1] : &:r809_20 +# 809| r809_26(glval) = CopyValue : r809_15 # 810| r810_1(glval) = VariableAddress[b] : # 810| r810_2(glval) = FunctionAddress[operator=] : # 810| r810_3(glval) = VariableAddress[#temp810:7] : @@ -4751,7 +4757,13 @@ ir.cpp: # 810| v810_17(void) = ^IndirectReadSideEffect[-1] : &:r810_1, ~m? # 810| v810_18(void) = ^BufferReadSideEffect[0] : &:r810_14, ~m? # 810| mu810_19(Base) = ^IndirectMayWriteSideEffect[-1] : &:r810_1 -# 810| r810_20(glval) = CopyValue : r810_15 +# 810| r810_20(glval) = CopyValue : r810_3 +# 810| r810_21(glval) = FunctionAddress[~Base] : +# 810| v810_22(void) = Call[~Base] : func:r810_21, this:r810_20 +# 810| mu810_23(unknown) = ^CallSideEffect : ~m? +# 810| v810_24(void) = ^IndirectReadSideEffect[-1] : &:r810_20, ~m? +# 810| mu810_25(Base) = ^IndirectMayWriteSideEffect[-1] : &:r810_20 +# 810| r810_26(glval) = CopyValue : r810_15 # 811| r811_1(glval) = VariableAddress[pm] : # 811| r811_2(Middle *) = Load[pm] : &:r811_1, ~m? # 811| r811_3(Base *) = ConvertToNonVirtualBase[Middle : Base] : r811_2 @@ -4843,7 +4855,13 @@ ir.cpp: # 823| v823_18(void) = ^IndirectReadSideEffect[-1] : &:r823_1, ~m? # 823| v823_19(void) = ^BufferReadSideEffect[0] : &:r823_15, ~m? # 823| mu823_20(Base) = ^IndirectMayWriteSideEffect[-1] : &:r823_1 -# 823| r823_21(glval) = CopyValue : r823_16 +# 823| r823_21(glval) = CopyValue : r823_3 +# 823| r823_22(glval) = FunctionAddress[~Base] : +# 823| v823_23(void) = Call[~Base] : func:r823_22, this:r823_21 +# 823| mu823_24(unknown) = ^CallSideEffect : ~m? +# 823| v823_25(void) = ^IndirectReadSideEffect[-1] : &:r823_21, ~m? +# 823| mu823_26(Base) = ^IndirectMayWriteSideEffect[-1] : &:r823_21 +# 823| r823_27(glval) = CopyValue : r823_16 # 824| r824_1(glval) = VariableAddress[b] : # 824| r824_2(glval) = FunctionAddress[operator=] : # 824| r824_3(glval) = VariableAddress[#temp824:7] : @@ -4864,7 +4882,13 @@ ir.cpp: # 824| v824_18(void) = ^IndirectReadSideEffect[-1] : &:r824_1, ~m? # 824| v824_19(void) = ^BufferReadSideEffect[0] : &:r824_15, ~m? # 824| mu824_20(Base) = ^IndirectMayWriteSideEffect[-1] : &:r824_1 -# 824| r824_21(glval) = CopyValue : r824_16 +# 824| r824_21(glval) = CopyValue : r824_3 +# 824| r824_22(glval) = FunctionAddress[~Base] : +# 824| v824_23(void) = Call[~Base] : func:r824_22, this:r824_21 +# 824| mu824_24(unknown) = ^CallSideEffect : ~m? +# 824| v824_25(void) = ^IndirectReadSideEffect[-1] : &:r824_21, ~m? +# 824| mu824_26(Base) = ^IndirectMayWriteSideEffect[-1] : &:r824_21 +# 824| r824_27(glval) = CopyValue : r824_16 # 825| r825_1(glval) = VariableAddress[pd] : # 825| r825_2(Derived *) = Load[pd] : &:r825_1, ~m? # 825| r825_3(Middle *) = ConvertToNonVirtualBase[Derived : Middle] : r825_2 @@ -7839,6 +7863,12 @@ ir.cpp: # 1372| v1372_12(void) = Call[acceptRef] : func:r1372_1, 0:r1372_11 # 1372| mu1372_13(unknown) = ^CallSideEffect : ~m? # 1372| v1372_14(void) = ^BufferReadSideEffect[0] : &:r1372_11, ~m? +# 1372| r1372_15(glval) = CopyValue : r1372_2 +# 1372| r1372_16(glval) = FunctionAddress[~String] : +# 1372| v1372_17(void) = Call[~String] : func:r1372_16, this:r1372_15 +# 1372| mu1372_18(unknown) = ^CallSideEffect : ~m? +# 1372| v1372_19(void) = ^IndirectReadSideEffect[-1] : &:r1372_15, ~m? +# 1372| mu1372_20(String) = ^IndirectMayWriteSideEffect[-1] : &:r1372_15 # 1373| r1373_1(glval) = FunctionAddress[acceptValue] : # 1373| r1373_2(glval) = VariableAddress[#temp1373:17] : # 1373| mu1373_3(String) = Uninitialized[#temp1373:17] : &:r1373_2 @@ -7853,6 +7883,12 @@ ir.cpp: # 1373| r1373_12(String) = Load[#temp1373:17] : &:r1373_2, ~m? # 1373| v1373_13(void) = Call[acceptValue] : func:r1373_1, 0:r1373_12 # 1373| mu1373_14(unknown) = ^CallSideEffect : ~m? +# 1373| r1373_15(glval) = CopyValue : r1373_2 +# 1373| r1373_16(glval) = FunctionAddress[~String] : +# 1373| v1373_17(void) = Call[~String] : func:r1373_16, this:r1373_15 +# 1373| mu1373_18(unknown) = ^CallSideEffect : ~m? +# 1373| v1373_19(void) = ^IndirectReadSideEffect[-1] : &:r1373_15, ~m? +# 1373| mu1373_20(String) = ^IndirectMayWriteSideEffect[-1] : &:r1373_15 # 1374| r1374_1(glval) = FunctionAddress[acceptValue] : # 1374| r1374_2(glval) = VariableAddress[#temp1374:25] : # 1374| mu1374_3(String) = Uninitialized[#temp1374:25] : &:r1374_2 @@ -7866,6 +7902,12 @@ ir.cpp: # 1374| r1374_11(String) = Load[#temp1374:25] : &:r1374_2, ~m? # 1374| v1374_12(void) = Call[acceptValue] : func:r1374_1, 0:r1374_11 # 1374| mu1374_13(unknown) = ^CallSideEffect : ~m? +# 1374| r1374_14(glval) = CopyValue : r1374_2 +# 1374| r1374_15(glval) = FunctionAddress[~String] : +# 1374| v1374_16(void) = Call[~String] : func:r1374_15, this:r1374_14 +# 1374| mu1374_17(unknown) = ^CallSideEffect : ~m? +# 1374| v1374_18(void) = ^IndirectReadSideEffect[-1] : &:r1374_14, ~m? +# 1374| mu1374_19(String) = ^IndirectMayWriteSideEffect[-1] : &:r1374_14 # 1375| r1375_1(glval) = VariableAddress[#temp1375:5] : # 1375| mu1375_2(String) = Uninitialized[#temp1375:5] : &:r1375_1 # 1375| r1375_3(glval) = FunctionAddress[String] : @@ -7877,6 +7919,12 @@ ir.cpp: # 1375| r1375_9(char *) = Call[c_str] : func:r1375_8, this:r1375_7 # 1375| mu1375_10(unknown) = ^CallSideEffect : ~m? # 1375| v1375_11(void) = ^IndirectReadSideEffect[-1] : &:r1375_7, ~m? +# 1375| r1375_12(glval) = CopyValue : r1375_1 +# 1375| r1375_13(glval) = FunctionAddress[~String] : +# 1375| v1375_14(void) = Call[~String] : func:r1375_13, this:r1375_12 +# 1375| mu1375_15(unknown) = ^CallSideEffect : ~m? +# 1375| v1375_16(void) = ^IndirectReadSideEffect[-1] : &:r1375_12, ~m? +# 1375| mu1375_17(String) = ^IndirectMayWriteSideEffect[-1] : &:r1375_12 # 1376| r1376_1(glval) = VariableAddress[#temp1376:5] : # 1376| r1376_2(glval) = FunctionAddress[returnValue] : # 1376| r1376_3(String) = Call[returnValue] : func:r1376_2 @@ -7887,18 +7935,36 @@ ir.cpp: # 1376| r1376_8(char *) = Call[c_str] : func:r1376_7, this:r1376_6 # 1376| mu1376_9(unknown) = ^CallSideEffect : ~m? # 1376| v1376_10(void) = ^IndirectReadSideEffect[-1] : &:r1376_6, ~m? +# 1376| r1376_11(glval) = CopyValue : r1376_1 +# 1376| r1376_12(glval) = FunctionAddress[~String] : +# 1376| v1376_13(void) = Call[~String] : func:r1376_12, this:r1376_11 +# 1376| mu1376_14(unknown) = ^CallSideEffect : ~m? +# 1376| v1376_15(void) = ^IndirectReadSideEffect[-1] : &:r1376_11, ~m? +# 1376| mu1376_16(String) = ^IndirectMayWriteSideEffect[-1] : &:r1376_11 # 1378| r1378_1(glval) = VariableAddress[#temp1378:5] : # 1378| r1378_2(glval) = FunctionAddress[defaultConstruct] : # 1378| r1378_3(String) = Call[defaultConstruct] : func:r1378_2 # 1378| mu1378_4(unknown) = ^CallSideEffect : ~m? -# 1378| mu1378_5(String) = Store[#temp1378:5] : &:r1378_1, r1378_3 +# 1378| r1378_5(glval) = CopyValue : r1378_1 +# 1378| r1378_6(glval) = FunctionAddress[~String] : +# 1378| v1378_7(void) = Call[~String] : func:r1378_6, this:r1378_5 +# 1378| mu1378_8(unknown) = ^CallSideEffect : ~m? +# 1378| v1378_9(void) = ^IndirectReadSideEffect[-1] : &:r1378_5, ~m? +# 1378| mu1378_10(String) = ^IndirectMayWriteSideEffect[-1] : &:r1378_5 +# 1378| mu1378_11(String) = Store[#temp1378:5] : &:r1378_1, r1378_3 # 1379| v1379_1(void) = NoOp : -# 1379| r1379_2(glval) = VariableAddress[s] : +# 1379| r1379_2(glval) = CopyValue : r1369_2 # 1379| r1379_3(glval) = FunctionAddress[~String] : # 1379| v1379_4(void) = Call[~String] : func:r1379_3, this:r1379_2 # 1379| mu1379_5(unknown) = ^CallSideEffect : ~m? # 1379| v1379_6(void) = ^IndirectReadSideEffect[-1] : &:r1379_2, ~m? # 1379| mu1379_7(String) = ^IndirectMayWriteSideEffect[-1] : &:r1379_2 +# 1379| r1379_8(glval) = VariableAddress[s] : +# 1379| r1379_9(glval) = FunctionAddress[~String] : +# 1379| v1379_10(void) = Call[~String] : func:r1379_9, this:r1379_8 +# 1379| mu1379_11(unknown) = ^CallSideEffect : ~m? +# 1379| v1379_12(void) = ^IndirectReadSideEffect[-1] : &:r1379_8, ~m? +# 1379| mu1379_13(String) = ^IndirectMayWriteSideEffect[-1] : &:r1379_8 # 1367| v1367_4(void) = ReturnVoid : # 1367| v1367_5(void) = AliasedUse : ~m? # 1367| v1367_6(void) = ExitFunction : @@ -7939,6 +8005,12 @@ ir.cpp: # 1386| r1386_6(destructor_only) = Load[#temp1386:17] : &:r1386_2, ~m? # 1386| v1386_7(void) = Call[acceptValue] : func:r1386_1, 0:r1386_6 # 1386| mu1386_8(unknown) = ^CallSideEffect : ~m? +# 1386| r1386_9(glval) = CopyValue : r1386_2 +# 1386| r1386_10(glval) = FunctionAddress[~destructor_only] : +# 1386| v1386_11(void) = Call[~destructor_only] : func:r1386_10, this:r1386_9 +# 1386| mu1386_12(unknown) = ^CallSideEffect : ~m? +# 1386| v1386_13(void) = ^IndirectReadSideEffect[-1] : &:r1386_9, ~m? +# 1386| mu1386_14(destructor_only) = ^IndirectMayWriteSideEffect[-1] : &:r1386_9 # 1387| r1387_1(glval) = VariableAddress[#temp1387:5] : # 1387| r1387_2(destructor_only) = Constant[0] : # 1387| mu1387_3(destructor_only) = Store[#temp1387:5] : &:r1387_1, r1387_2 @@ -7947,6 +8019,12 @@ ir.cpp: # 1387| mu1387_6(unknown) = ^CallSideEffect : ~m? # 1387| v1387_7(void) = ^IndirectReadSideEffect[-1] : &:r1387_1, ~m? # 1387| mu1387_8(destructor_only) = ^IndirectMayWriteSideEffect[-1] : &:r1387_1 +# 1387| r1387_9(glval) = CopyValue : r1387_1 +# 1387| r1387_10(glval) = FunctionAddress[~destructor_only] : +# 1387| v1387_11(void) = Call[~destructor_only] : func:r1387_10, this:r1387_9 +# 1387| mu1387_12(unknown) = ^CallSideEffect : ~m? +# 1387| v1387_13(void) = ^IndirectReadSideEffect[-1] : &:r1387_9, ~m? +# 1387| mu1387_14(destructor_only) = ^IndirectMayWriteSideEffect[-1] : &:r1387_9 # 1388| r1388_1(glval) = VariableAddress[#temp1388:5] : # 1388| r1388_2(glval) = FunctionAddress[returnValue] : # 1388| r1388_3(destructor_only) = Call[returnValue] : func:r1388_2 @@ -7957,11 +8035,23 @@ ir.cpp: # 1388| mu1388_8(unknown) = ^CallSideEffect : ~m? # 1388| v1388_9(void) = ^IndirectReadSideEffect[-1] : &:r1388_1, ~m? # 1388| mu1388_10(destructor_only) = ^IndirectMayWriteSideEffect[-1] : &:r1388_1 +# 1388| r1388_11(glval) = CopyValue : r1388_1 +# 1388| r1388_12(glval) = FunctionAddress[~destructor_only] : +# 1388| v1388_13(void) = Call[~destructor_only] : func:r1388_12, this:r1388_11 +# 1388| mu1388_14(unknown) = ^CallSideEffect : ~m? +# 1388| v1388_15(void) = ^IndirectReadSideEffect[-1] : &:r1388_11, ~m? +# 1388| mu1388_16(destructor_only) = ^IndirectMayWriteSideEffect[-1] : &:r1388_11 # 1390| r1390_1(glval) = VariableAddress[#temp1390:5] : # 1390| r1390_2(glval) = FunctionAddress[defaultConstruct] : # 1390| r1390_3(destructor_only) = Call[defaultConstruct] : func:r1390_2 # 1390| mu1390_4(unknown) = ^CallSideEffect : ~m? -# 1390| mu1390_5(destructor_only) = Store[#temp1390:5] : &:r1390_1, r1390_3 +# 1390| r1390_5(glval) = CopyValue : r1390_1 +# 1390| r1390_6(glval) = FunctionAddress[~destructor_only] : +# 1390| v1390_7(void) = Call[~destructor_only] : func:r1390_6, this:r1390_5 +# 1390| mu1390_8(unknown) = ^CallSideEffect : ~m? +# 1390| v1390_9(void) = ^IndirectReadSideEffect[-1] : &:r1390_5, ~m? +# 1390| mu1390_10(destructor_only) = ^IndirectMayWriteSideEffect[-1] : &:r1390_5 +# 1390| mu1390_11(destructor_only) = Store[#temp1390:5] : &:r1390_1, r1390_3 # 1391| v1391_1(void) = NoOp : # 1391| r1391_2(glval) = VariableAddress[d2] : # 1391| r1391_3(glval) = FunctionAddress[~destructor_only] : @@ -7969,12 +8059,18 @@ ir.cpp: # 1391| mu1391_5(unknown) = ^CallSideEffect : ~m? # 1391| v1391_6(void) = ^IndirectReadSideEffect[-1] : &:r1391_2, ~m? # 1391| mu1391_7(destructor_only) = ^IndirectMayWriteSideEffect[-1] : &:r1391_2 -# 1391| r1391_8(glval) = VariableAddress[d] : +# 1391| r1391_8(glval) = CopyValue : r1383_2 # 1391| r1391_9(glval) = FunctionAddress[~destructor_only] : # 1391| v1391_10(void) = Call[~destructor_only] : func:r1391_9, this:r1391_8 # 1391| mu1391_11(unknown) = ^CallSideEffect : ~m? # 1391| v1391_12(void) = ^IndirectReadSideEffect[-1] : &:r1391_8, ~m? # 1391| mu1391_13(destructor_only) = ^IndirectMayWriteSideEffect[-1] : &:r1391_8 +# 1391| r1391_14(glval) = VariableAddress[d] : +# 1391| r1391_15(glval) = FunctionAddress[~destructor_only] : +# 1391| v1391_16(void) = Call[~destructor_only] : func:r1391_15, this:r1391_14 +# 1391| mu1391_17(unknown) = ^CallSideEffect : ~m? +# 1391| v1391_18(void) = ^IndirectReadSideEffect[-1] : &:r1391_14, ~m? +# 1391| mu1391_19(destructor_only) = ^IndirectMayWriteSideEffect[-1] : &:r1391_14 # 1381| v1381_4(void) = ReturnVoid : # 1381| v1381_5(void) = AliasedUse : ~m? # 1381| v1381_6(void) = ExitFunction : @@ -11152,139 +11248,157 @@ ir.cpp: #-----| Goto -> Block 1 # 2021| Block 4 -# 2021| r2021_7(glval) = VariableAddress[#temp2021:9] : -# 2021| r2021_8(TernaryNonPodObj) = Load[#temp2021:9] : &:r2021_7, ~m? -# 2021| mu2021_9(TernaryNonPodObj) = Store[#temp2021:9] : &:r2021_3, r2021_8 -# 2021| r2021_10(glval) = Convert : r2021_3 -# 2021| r2021_11(TernaryNonPodObj &) = CopyValue : r2021_10 -# 2021| r2021_12(TernaryNonPodObj &) = Call[operator=] : func:r2021_2, this:r2021_1, 0:r2021_11 -# 2021| mu2021_13(unknown) = ^CallSideEffect : ~m? -# 2021| v2021_14(void) = ^IndirectReadSideEffect[-1] : &:r2021_1, ~m? -# 2021| v2021_15(void) = ^BufferReadSideEffect[0] : &:r2021_11, ~m? -# 2021| mu2021_16(TernaryNonPodObj) = ^IndirectMayWriteSideEffect[-1] : &:r2021_1 -# 2021| r2021_17(glval) = CopyValue : r2021_12 -# 2022| r2022_1(glval) = VariableAddress[z] : -# 2022| r2022_2(glval) = FunctionAddress[operator=] : -# 2022| r2022_3(glval) = VariableAddress[#temp2022:9] : -# 2022| r2022_4(glval) = VariableAddress[a] : -# 2022| r2022_5(bool) = Load[a] : &:r2022_4, ~m? -# 2022| v2022_6(void) = ConditionalBranch : r2022_5 +# 2021| r2021_7(glval) = VariableAddress[#temp2021:9] : +# 2021| r2021_8(TernaryNonPodObj) = Load[#temp2021:9] : &:r2021_7, ~m? +# 2021| mu2021_9(TernaryNonPodObj) = Store[#temp2021:9] : &:r2021_3, r2021_8 +# 2021| r2021_10(glval) = Convert : r2021_3 +# 2021| r2021_11(TernaryNonPodObj &) = CopyValue : r2021_10 +# 2021| r2021_12(TernaryNonPodObj &) = Call[operator=] : func:r2021_2, this:r2021_1, 0:r2021_11 +# 2021| mu2021_13(unknown) = ^CallSideEffect : ~m? +# 2021| v2021_14(void) = ^IndirectReadSideEffect[-1] : &:r2021_1, ~m? +# 2021| v2021_15(void) = ^BufferReadSideEffect[0] : &:r2021_11, ~m? +# 2021| mu2021_16(TernaryNonPodObj) = ^IndirectMayWriteSideEffect[-1] : &:r2021_1 +# 2021| r2021_17(glval) = CopyValue : r2021_3 +# 2021| r2021_18(glval) = FunctionAddress[~TernaryNonPodObj] : +# 2021| v2021_19(void) = Call[~TernaryNonPodObj] : func:r2021_18, this:r2021_17 +# 2021| mu2021_20(unknown) = ^CallSideEffect : ~m? +# 2021| v2021_21(void) = ^IndirectReadSideEffect[-1] : &:r2021_17, ~m? +# 2021| mu2021_22(TernaryNonPodObj) = ^IndirectMayWriteSideEffect[-1] : &:r2021_17 +# 2021| r2021_23(glval) = CopyValue : r2021_12 +# 2022| r2022_1(glval) = VariableAddress[z] : +# 2022| r2022_2(glval) = FunctionAddress[operator=] : +# 2022| r2022_3(glval) = VariableAddress[#temp2022:9] : +# 2022| r2022_4(glval) = VariableAddress[a] : +# 2022| r2022_5(bool) = Load[a] : &:r2022_4, ~m? +# 2022| v2022_6(void) = ConditionalBranch : r2022_5 #-----| False -> Block 9 #-----| True -> Block 8 # 2021| Block 5 -# 2021| r2021_18(glval) = VariableAddress[#temp2021:13] : -# 2021| mu2021_19(TernaryNonPodObj) = Uninitialized[#temp2021:13] : &:r2021_18 -# 2021| r2021_20(glval) = FunctionAddress[TernaryNonPodObj] : -# 2021| r2021_21(glval) = VariableAddress[x] : -# 2021| r2021_22(glval) = Convert : r2021_21 -# 2021| r2021_23(TernaryNonPodObj &) = CopyValue : r2021_22 -# 2021| v2021_24(void) = Call[TernaryNonPodObj] : func:r2021_20, this:r2021_18, 0:r2021_23 -# 2021| mu2021_25(unknown) = ^CallSideEffect : ~m? -# 2021| v2021_26(void) = ^BufferReadSideEffect[0] : &:r2021_23, ~m? -# 2021| mu2021_27(TernaryNonPodObj) = ^IndirectMayWriteSideEffect[-1] : &:r2021_18 -# 2021| r2021_28(TernaryNonPodObj) = Load[#temp2021:13] : &:r2021_18, ~m? -# 2021| r2021_29(glval) = VariableAddress[#temp2021:9] : -# 2021| mu2021_30(TernaryNonPodObj) = Store[#temp2021:9] : &:r2021_29, r2021_28 +# 2021| r2021_24(glval) = VariableAddress[#temp2021:13] : +# 2021| mu2021_25(TernaryNonPodObj) = Uninitialized[#temp2021:13] : &:r2021_24 +# 2021| r2021_26(glval) = FunctionAddress[TernaryNonPodObj] : +# 2021| r2021_27(glval) = VariableAddress[x] : +# 2021| r2021_28(glval) = Convert : r2021_27 +# 2021| r2021_29(TernaryNonPodObj &) = CopyValue : r2021_28 +# 2021| v2021_30(void) = Call[TernaryNonPodObj] : func:r2021_26, this:r2021_24, 0:r2021_29 +# 2021| mu2021_31(unknown) = ^CallSideEffect : ~m? +# 2021| v2021_32(void) = ^BufferReadSideEffect[0] : &:r2021_29, ~m? +# 2021| mu2021_33(TernaryNonPodObj) = ^IndirectMayWriteSideEffect[-1] : &:r2021_24 +# 2021| r2021_34(TernaryNonPodObj) = Load[#temp2021:13] : &:r2021_24, ~m? +# 2021| r2021_35(glval) = VariableAddress[#temp2021:9] : +# 2021| mu2021_36(TernaryNonPodObj) = Store[#temp2021:9] : &:r2021_35, r2021_34 #-----| Goto -> Block 4 # 2021| Block 6 -# 2021| r2021_31(glval) = VariableAddress[#temp2021:17] : -# 2021| mu2021_32(TernaryNonPodObj) = Uninitialized[#temp2021:17] : &:r2021_31 -# 2021| r2021_33(glval) = FunctionAddress[TernaryNonPodObj] : -# 2021| v2021_34(void) = Call[TernaryNonPodObj] : func:r2021_33, this:r2021_31 -# 2021| mu2021_35(unknown) = ^CallSideEffect : ~m? -# 2021| mu2021_36(TernaryNonPodObj) = ^IndirectMayWriteSideEffect[-1] : &:r2021_31 -# 2021| r2021_37(TernaryNonPodObj) = Load[#temp2021:17] : &:r2021_31, ~m? -# 2021| r2021_38(glval) = VariableAddress[#temp2021:9] : -# 2021| mu2021_39(TernaryNonPodObj) = Store[#temp2021:9] : &:r2021_38, r2021_37 +# 2021| r2021_37(glval) = VariableAddress[#temp2021:17] : +# 2021| mu2021_38(TernaryNonPodObj) = Uninitialized[#temp2021:17] : &:r2021_37 +# 2021| r2021_39(glval) = FunctionAddress[TernaryNonPodObj] : +# 2021| v2021_40(void) = Call[TernaryNonPodObj] : func:r2021_39, this:r2021_37 +# 2021| mu2021_41(unknown) = ^CallSideEffect : ~m? +# 2021| mu2021_42(TernaryNonPodObj) = ^IndirectMayWriteSideEffect[-1] : &:r2021_37 +# 2021| r2021_43(TernaryNonPodObj) = Load[#temp2021:17] : &:r2021_37, ~m? +# 2021| r2021_44(glval) = VariableAddress[#temp2021:9] : +# 2021| mu2021_45(TernaryNonPodObj) = Store[#temp2021:9] : &:r2021_44, r2021_43 #-----| Goto -> Block 4 # 2022| Block 7 -# 2022| r2022_7(glval) = VariableAddress[#temp2022:9] : -# 2022| r2022_8(TernaryNonPodObj) = Load[#temp2022:9] : &:r2022_7, ~m? -# 2022| mu2022_9(TernaryNonPodObj) = Store[#temp2022:9] : &:r2022_3, r2022_8 -# 2022| r2022_10(glval) = Convert : r2022_3 -# 2022| r2022_11(TernaryNonPodObj &) = CopyValue : r2022_10 -# 2022| r2022_12(TernaryNonPodObj &) = Call[operator=] : func:r2022_2, this:r2022_1, 0:r2022_11 -# 2022| mu2022_13(unknown) = ^CallSideEffect : ~m? -# 2022| v2022_14(void) = ^IndirectReadSideEffect[-1] : &:r2022_1, ~m? -# 2022| v2022_15(void) = ^BufferReadSideEffect[0] : &:r2022_11, ~m? -# 2022| mu2022_16(TernaryNonPodObj) = ^IndirectMayWriteSideEffect[-1] : &:r2022_1 -# 2022| r2022_17(glval) = CopyValue : r2022_12 -# 2023| r2023_1(glval) = VariableAddress[z] : -# 2023| r2023_2(glval) = FunctionAddress[operator=] : -# 2023| r2023_3(glval) = VariableAddress[a] : -# 2023| r2023_4(bool) = Load[a] : &:r2023_3, ~m? -# 2023| v2023_5(void) = ConditionalBranch : r2023_4 +# 2022| r2022_7(glval) = VariableAddress[#temp2022:9] : +# 2022| r2022_8(TernaryNonPodObj) = Load[#temp2022:9] : &:r2022_7, ~m? +# 2022| mu2022_9(TernaryNonPodObj) = Store[#temp2022:9] : &:r2022_3, r2022_8 +# 2022| r2022_10(glval) = Convert : r2022_3 +# 2022| r2022_11(TernaryNonPodObj &) = CopyValue : r2022_10 +# 2022| r2022_12(TernaryNonPodObj &) = Call[operator=] : func:r2022_2, this:r2022_1, 0:r2022_11 +# 2022| mu2022_13(unknown) = ^CallSideEffect : ~m? +# 2022| v2022_14(void) = ^IndirectReadSideEffect[-1] : &:r2022_1, ~m? +# 2022| v2022_15(void) = ^BufferReadSideEffect[0] : &:r2022_11, ~m? +# 2022| mu2022_16(TernaryNonPodObj) = ^IndirectMayWriteSideEffect[-1] : &:r2022_1 +# 2022| r2022_17(glval) = CopyValue : r2022_3 +# 2022| r2022_18(glval) = FunctionAddress[~TernaryNonPodObj] : +# 2022| v2022_19(void) = Call[~TernaryNonPodObj] : func:r2022_18, this:r2022_17 +# 2022| mu2022_20(unknown) = ^CallSideEffect : ~m? +# 2022| v2022_21(void) = ^IndirectReadSideEffect[-1] : &:r2022_17, ~m? +# 2022| mu2022_22(TernaryNonPodObj) = ^IndirectMayWriteSideEffect[-1] : &:r2022_17 +# 2022| r2022_23(glval) = CopyValue : r2022_12 +# 2023| r2023_1(glval) = VariableAddress[z] : +# 2023| r2023_2(glval) = FunctionAddress[operator=] : +# 2023| r2023_3(glval) = VariableAddress[a] : +# 2023| r2023_4(bool) = Load[a] : &:r2023_3, ~m? +# 2023| v2023_5(void) = ConditionalBranch : r2023_4 #-----| False -> Block 12 #-----| True -> Block 11 # 2022| Block 8 -# 2022| r2022_18(glval) = VariableAddress[#temp2022:13] : -# 2022| mu2022_19(TernaryNonPodObj) = Uninitialized[#temp2022:13] : &:r2022_18 -# 2022| r2022_20(glval) = FunctionAddress[TernaryNonPodObj] : -# 2022| v2022_21(void) = Call[TernaryNonPodObj] : func:r2022_20, this:r2022_18 -# 2022| mu2022_22(unknown) = ^CallSideEffect : ~m? -# 2022| mu2022_23(TernaryNonPodObj) = ^IndirectMayWriteSideEffect[-1] : &:r2022_18 -# 2022| r2022_24(TernaryNonPodObj) = Load[#temp2022:13] : &:r2022_18, ~m? -# 2022| r2022_25(glval) = VariableAddress[#temp2022:9] : -# 2022| mu2022_26(TernaryNonPodObj) = Store[#temp2022:9] : &:r2022_25, r2022_24 +# 2022| r2022_24(glval) = VariableAddress[#temp2022:13] : +# 2022| mu2022_25(TernaryNonPodObj) = Uninitialized[#temp2022:13] : &:r2022_24 +# 2022| r2022_26(glval) = FunctionAddress[TernaryNonPodObj] : +# 2022| v2022_27(void) = Call[TernaryNonPodObj] : func:r2022_26, this:r2022_24 +# 2022| mu2022_28(unknown) = ^CallSideEffect : ~m? +# 2022| mu2022_29(TernaryNonPodObj) = ^IndirectMayWriteSideEffect[-1] : &:r2022_24 +# 2022| r2022_30(TernaryNonPodObj) = Load[#temp2022:13] : &:r2022_24, ~m? +# 2022| r2022_31(glval) = VariableAddress[#temp2022:9] : +# 2022| mu2022_32(TernaryNonPodObj) = Store[#temp2022:9] : &:r2022_31, r2022_30 #-----| Goto -> Block 7 # 2022| Block 9 -# 2022| r2022_27(glval) = VariableAddress[#temp2022:34] : -# 2022| mu2022_28(TernaryNonPodObj) = Uninitialized[#temp2022:34] : &:r2022_27 -# 2022| r2022_29(glval) = FunctionAddress[TernaryNonPodObj] : -# 2022| v2022_30(void) = Call[TernaryNonPodObj] : func:r2022_29, this:r2022_27 -# 2022| mu2022_31(unknown) = ^CallSideEffect : ~m? -# 2022| mu2022_32(TernaryNonPodObj) = ^IndirectMayWriteSideEffect[-1] : &:r2022_27 -# 2022| r2022_33(TernaryNonPodObj) = Load[#temp2022:34] : &:r2022_27, ~m? -# 2022| r2022_34(glval) = VariableAddress[#temp2022:9] : -# 2022| mu2022_35(TernaryNonPodObj) = Store[#temp2022:9] : &:r2022_34, r2022_33 +# 2022| r2022_33(glval) = VariableAddress[#temp2022:34] : +# 2022| mu2022_34(TernaryNonPodObj) = Uninitialized[#temp2022:34] : &:r2022_33 +# 2022| r2022_35(glval) = FunctionAddress[TernaryNonPodObj] : +# 2022| v2022_36(void) = Call[TernaryNonPodObj] : func:r2022_35, this:r2022_33 +# 2022| mu2022_37(unknown) = ^CallSideEffect : ~m? +# 2022| mu2022_38(TernaryNonPodObj) = ^IndirectMayWriteSideEffect[-1] : &:r2022_33 +# 2022| r2022_39(TernaryNonPodObj) = Load[#temp2022:34] : &:r2022_33, ~m? +# 2022| r2022_40(glval) = VariableAddress[#temp2022:9] : +# 2022| mu2022_41(TernaryNonPodObj) = Store[#temp2022:9] : &:r2022_40, r2022_39 #-----| Goto -> Block 7 # 2023| Block 10 -# 2023| r2023_6(glval) = VariableAddress[#temp2023:10] : -# 2023| r2023_7(glval) = Load[#temp2023:10] : &:r2023_6, ~m? -# 2023| r2023_8(glval) = Convert : r2023_7 -# 2023| r2023_9(TernaryNonPodObj &) = CopyValue : r2023_8 -# 2023| r2023_10(TernaryNonPodObj &) = Call[operator=] : func:r2023_2, this:r2023_1, 0:r2023_9 -# 2023| mu2023_11(unknown) = ^CallSideEffect : ~m? -# 2023| v2023_12(void) = ^IndirectReadSideEffect[-1] : &:r2023_1, ~m? -# 2023| v2023_13(void) = ^BufferReadSideEffect[0] : &:r2023_9, ~m? -# 2023| mu2023_14(TernaryNonPodObj) = ^IndirectMayWriteSideEffect[-1] : &:r2023_1 -# 2023| r2023_15(glval) = CopyValue : r2023_10 -# 2023| r2023_16(glval) = FunctionAddress[operator=] : -# 2023| r2023_17(glval) = VariableAddress[#temp2023:23] : -# 2023| mu2023_18(TernaryNonPodObj) = Uninitialized[#temp2023:23] : &:r2023_17 -# 2023| r2023_19(glval) = FunctionAddress[TernaryNonPodObj] : -# 2023| v2023_20(void) = Call[TernaryNonPodObj] : func:r2023_19, this:r2023_17 -# 2023| mu2023_21(unknown) = ^CallSideEffect : ~m? -# 2023| mu2023_22(TernaryNonPodObj) = ^IndirectMayWriteSideEffect[-1] : &:r2023_17 -# 2023| r2023_23(glval) = Convert : r2023_17 -# 2023| r2023_24(TernaryNonPodObj &) = CopyValue : r2023_23 -# 2023| r2023_25(TernaryNonPodObj &) = Call[operator=] : func:r2023_16, this:r2023_15, 0:r2023_24 -# 2023| mu2023_26(unknown) = ^CallSideEffect : ~m? -# 2023| v2023_27(void) = ^IndirectReadSideEffect[-1] : &:r2023_15, ~m? -# 2023| v2023_28(void) = ^BufferReadSideEffect[0] : &:r2023_24, ~m? -# 2023| mu2023_29(TernaryNonPodObj) = ^IndirectMayWriteSideEffect[-1] : &:r2023_15 -# 2023| r2023_30(glval) = CopyValue : r2023_25 -# 2024| v2024_1(void) = NoOp : -# 2019| v2019_12(void) = ReturnVoid : -# 2019| v2019_13(void) = AliasedUse : ~m? -# 2019| v2019_14(void) = ExitFunction : +# 2023| r2023_6(glval) = VariableAddress[#temp2023:10] : +# 2023| r2023_7(glval) = Load[#temp2023:10] : &:r2023_6, ~m? +# 2023| r2023_8(glval) = Convert : r2023_7 +# 2023| r2023_9(TernaryNonPodObj &) = CopyValue : r2023_8 +# 2023| r2023_10(TernaryNonPodObj &) = Call[operator=] : func:r2023_2, this:r2023_1, 0:r2023_9 +# 2023| mu2023_11(unknown) = ^CallSideEffect : ~m? +# 2023| v2023_12(void) = ^IndirectReadSideEffect[-1] : &:r2023_1, ~m? +# 2023| v2023_13(void) = ^BufferReadSideEffect[0] : &:r2023_9, ~m? +# 2023| mu2023_14(TernaryNonPodObj) = ^IndirectMayWriteSideEffect[-1] : &:r2023_1 +# 2023| r2023_15(glval) = CopyValue : r2023_10 +# 2023| r2023_16(glval) = FunctionAddress[operator=] : +# 2023| r2023_17(glval) = VariableAddress[#temp2023:23] : +# 2023| mu2023_18(TernaryNonPodObj) = Uninitialized[#temp2023:23] : &:r2023_17 +# 2023| r2023_19(glval) = FunctionAddress[TernaryNonPodObj] : +# 2023| v2023_20(void) = Call[TernaryNonPodObj] : func:r2023_19, this:r2023_17 +# 2023| mu2023_21(unknown) = ^CallSideEffect : ~m? +# 2023| mu2023_22(TernaryNonPodObj) = ^IndirectMayWriteSideEffect[-1] : &:r2023_17 +# 2023| r2023_23(glval) = Convert : r2023_17 +# 2023| r2023_24(TernaryNonPodObj &) = CopyValue : r2023_23 +# 2023| r2023_25(TernaryNonPodObj &) = Call[operator=] : func:r2023_16, this:r2023_15, 0:r2023_24 +# 2023| mu2023_26(unknown) = ^CallSideEffect : ~m? +# 2023| v2023_27(void) = ^IndirectReadSideEffect[-1] : &:r2023_15, ~m? +# 2023| v2023_28(void) = ^BufferReadSideEffect[0] : &:r2023_24, ~m? +# 2023| mu2023_29(TernaryNonPodObj) = ^IndirectMayWriteSideEffect[-1] : &:r2023_15 +# 2023| r2023_30(glval) = CopyValue : r2023_17 +# 2023| r2023_31(glval) = FunctionAddress[~TernaryNonPodObj] : +# 2023| v2023_32(void) = Call[~TernaryNonPodObj] : func:r2023_31, this:r2023_30 +# 2023| mu2023_33(unknown) = ^CallSideEffect : ~m? +# 2023| v2023_34(void) = ^IndirectReadSideEffect[-1] : &:r2023_30, ~m? +# 2023| mu2023_35(TernaryNonPodObj) = ^IndirectMayWriteSideEffect[-1] : &:r2023_30 +# 2023| r2023_36(glval) = CopyValue : r2023_25 +# 2024| v2024_1(void) = NoOp : +# 2019| v2019_12(void) = ReturnVoid : +# 2019| v2019_13(void) = AliasedUse : ~m? +# 2019| v2019_14(void) = ExitFunction : # 2023| Block 11 -# 2023| r2023_31(glval) = VariableAddress[x] : -# 2023| r2023_32(glval) = VariableAddress[#temp2023:10] : -# 2023| mu2023_33(glval) = Store[#temp2023:10] : &:r2023_32, r2023_31 +# 2023| r2023_37(glval) = VariableAddress[x] : +# 2023| r2023_38(glval) = VariableAddress[#temp2023:10] : +# 2023| mu2023_39(glval) = Store[#temp2023:10] : &:r2023_38, r2023_37 #-----| Goto -> Block 10 # 2023| Block 12 -# 2023| r2023_34(glval) = VariableAddress[y] : -# 2023| r2023_35(glval) = VariableAddress[#temp2023:10] : -# 2023| mu2023_36(glval) = Store[#temp2023:10] : &:r2023_35, r2023_34 +# 2023| r2023_40(glval) = VariableAddress[y] : +# 2023| r2023_41(glval) = VariableAddress[#temp2023:10] : +# 2023| mu2023_42(glval) = Store[#temp2023:10] : &:r2023_41, r2023_40 #-----| Goto -> Block 10 # 2028| unsigned int CommaTest(unsigned int) @@ -12779,7 +12893,7 @@ ir.cpp: # 2215| r2215_1(glval) = VariableAddress[b] : # 2215| r2215_2(bool) = Load[b] : &:r2215_1, ~m? # 2215| v2215_3(void) = ConditionalBranch : r2215_2 -#-----| False -> Block 4 +#-----| False -> Block 5 #-----| True -> Block 3 # 2212| Block 1 @@ -12796,35 +12910,44 @@ ir.cpp: # 2216| r2216_3(char *) = Convert : r2216_2 # 2216| mu2216_4(char *) = Store[#throw2216:7] : &:r2216_1, r2216_3 # 2216| v2216_5(void) = ThrowValue : &:r2216_1, ~m? -#-----| Exception -> Block 5 +#-----| Exception -> Block 6 -# 2218| Block 4 -# 2218| r2218_1(glval) = VariableAddress[s2] : -# 2218| mu2218_2(String) = Uninitialized[s2] : &:r2218_1 -# 2218| r2218_3(glval) = FunctionAddress[String] : -# 2218| v2218_4(void) = Call[String] : func:r2218_3, this:r2218_1 -# 2218| mu2218_5(unknown) = ^CallSideEffect : ~m? -# 2218| mu2218_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r2218_1 -# 2219| r2219_1(glval) = VariableAddress[s2] : +# 2219| Block 4 +# 2219| r2219_1(glval) = VariableAddress[s] : # 2219| r2219_2(glval) = FunctionAddress[~String] : # 2219| v2219_3(void) = Call[~String] : func:r2219_2, this:r2219_1 # 2219| mu2219_4(unknown) = ^CallSideEffect : ~m? # 2219| v2219_5(void) = ^IndirectReadSideEffect[-1] : &:r2219_1, ~m? # 2219| mu2219_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r2219_1 -# 2219| r2219_7(glval) = VariableAddress[s] : -# 2219| r2219_8(glval) = FunctionAddress[~String] : -# 2219| v2219_9(void) = Call[~String] : func:r2219_8, this:r2219_7 -# 2219| mu2219_10(unknown) = ^CallSideEffect : ~m? -# 2219| v2219_11(void) = ^IndirectReadSideEffect[-1] : &:r2219_7, ~m? -# 2219| mu2219_12(String) = ^IndirectMayWriteSideEffect[-1] : &:r2219_7 -#-----| Goto -> Block 10 +#-----| Goto -> Block 5 -# 2220| Block 5 -# 2220| v2220_1(void) = CatchByType[const char *] : -#-----| Exception -> Block 7 -#-----| Goto -> Block 6 +# 2218| Block 5 +# 2218| r2218_1(glval) = VariableAddress[s2] : +# 2218| mu2218_2(String) = Uninitialized[s2] : &:r2218_1 +# 2218| r2218_3(glval) = FunctionAddress[String] : +# 2218| v2218_4(void) = Call[String] : func:r2218_3, this:r2218_1 +# 2218| mu2218_5(unknown) = ^CallSideEffect : ~m? +# 2218| mu2218_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r2218_1 +# 2219| r2219_7(glval) = VariableAddress[s2] : +# 2219| r2219_8(glval) = FunctionAddress[~String] : +# 2219| v2219_9(void) = Call[~String] : func:r2219_8, this:r2219_7 +# 2219| mu2219_10(unknown) = ^CallSideEffect : ~m? +# 2219| v2219_11(void) = ^IndirectReadSideEffect[-1] : &:r2219_7, ~m? +# 2219| mu2219_12(String) = ^IndirectMayWriteSideEffect[-1] : &:r2219_7 +# 2219| r2219_13(glval) = VariableAddress[s] : +# 2219| r2219_14(glval) = FunctionAddress[~String] : +# 2219| v2219_15(void) = Call[~String] : func:r2219_14, this:r2219_13 +# 2219| mu2219_16(unknown) = ^CallSideEffect : ~m? +# 2219| v2219_17(void) = ^IndirectReadSideEffect[-1] : &:r2219_13, ~m? +# 2219| mu2219_18(String) = ^IndirectMayWriteSideEffect[-1] : &:r2219_13 +#-----| Goto -> Block 11 # 2220| Block 6 +# 2220| v2220_1(void) = CatchByType[const char *] : +#-----| Exception -> Block 8 +#-----| Goto -> Block 7 + +# 2220| Block 7 # 2220| r2220_2(glval) = VariableAddress[s] : # 2220| mu2220_3(char *) = InitializeParameter[s] : &:r2220_2 # 2220| r2220_4(char *) = Load[s] : &:r2220_2, ~m? @@ -12841,25 +12964,25 @@ ir.cpp: # 2221| v2221_10(void) = ThrowValue : &:r2221_1, ~m? #-----| Exception -> Block 2 -# 2223| Block 7 +# 2223| Block 8 # 2223| v2223_1(void) = CatchByType[const String &] : -#-----| Exception -> Block 9 -#-----| Goto -> Block 8 +#-----| Exception -> Block 10 +#-----| Goto -> Block 9 -# 2223| Block 8 +# 2223| Block 9 # 2223| r2223_2(glval) = VariableAddress[e] : # 2223| mu2223_3(String &) = InitializeParameter[e] : &:r2223_2 # 2223| r2223_4(String &) = Load[e] : &:r2223_2, ~m? # 2223| mu2223_5(unknown) = InitializeIndirection[e] : &:r2223_4 # 2223| v2223_6(void) = NoOp : -#-----| Goto -> Block 10 +#-----| Goto -> Block 11 -# 2225| Block 9 +# 2225| Block 10 # 2225| v2225_1(void) = CatchAny : # 2226| v2226_1(void) = ReThrow : #-----| Exception -> Block 2 -# 2228| Block 10 +# 2228| Block 11 # 2228| v2228_1(void) = NoOp : # 2212| v2212_9(void) = ReturnVoid : #-----| Goto -> Block 1 @@ -13013,60 +13136,66 @@ ir.cpp: # 2246| v2246_15(void) = Call[vector] : func:r2246_4, this:r2246_2, 0:r2246_14 # 2246| mu2246_16(unknown) = ^CallSideEffect : ~m? # 2246| mu2246_17(vector) = ^IndirectMayWriteSideEffect[-1] : &:r2246_2 -# 2246| r2246_18(vector &) = CopyValue : r2246_2 -# 2246| mu2246_19(vector &&) = Store[(__range)] : &:r2246_1, r2246_18 -# 2246| r2246_20(glval) = VariableAddress[(__begin)] : -# 2246| r2246_21(glval &&>) = VariableAddress[(__range)] : -# 2246| r2246_22(vector &&) = Load[(__range)] : &:r2246_21, ~m? -#-----| r0_1(glval>) = CopyValue : r2246_22 +# 2246| r2246_18(glval) = CopyValue : r2246_5 +# 2246| r2246_19(glval) = FunctionAddress[~String] : +# 2246| v2246_20(void) = Call[~String] : func:r2246_19, this:r2246_18 +# 2246| mu2246_21(unknown) = ^CallSideEffect : ~m? +# 2246| v2246_22(void) = ^IndirectReadSideEffect[-1] : &:r2246_18, ~m? +# 2246| mu2246_23(String) = ^IndirectMayWriteSideEffect[-1] : &:r2246_18 +# 2246| r2246_24(vector &) = CopyValue : r2246_2 +# 2246| mu2246_25(vector &&) = Store[(__range)] : &:r2246_1, r2246_24 +# 2246| r2246_26(glval) = VariableAddress[(__begin)] : +# 2246| r2246_27(glval &&>) = VariableAddress[(__range)] : +# 2246| r2246_28(vector &&) = Load[(__range)] : &:r2246_27, ~m? +#-----| r0_1(glval>) = CopyValue : r2246_28 #-----| r0_2(glval>) = Convert : r0_1 -# 2246| r2246_23(glval) = FunctionAddress[begin] : -# 2246| r2246_24(iterator) = Call[begin] : func:r2246_23, this:r0_2 -# 2246| mu2246_25(unknown) = ^CallSideEffect : ~m? +# 2246| r2246_29(glval) = FunctionAddress[begin] : +# 2246| r2246_30(iterator) = Call[begin] : func:r2246_29, this:r0_2 +# 2246| mu2246_31(unknown) = ^CallSideEffect : ~m? #-----| v0_3(void) = ^IndirectReadSideEffect[-1] : &:r0_2, ~m? -# 2246| mu2246_26(iterator) = Store[(__begin)] : &:r2246_20, r2246_24 -# 2246| r2246_27(glval) = VariableAddress[(__end)] : -# 2246| r2246_28(glval &&>) = VariableAddress[(__range)] : -# 2246| r2246_29(vector &&) = Load[(__range)] : &:r2246_28, ~m? -#-----| r0_4(glval>) = CopyValue : r2246_29 +# 2246| mu2246_32(iterator) = Store[(__begin)] : &:r2246_26, r2246_30 +# 2246| r2246_33(glval) = VariableAddress[(__end)] : +# 2246| r2246_34(glval &&>) = VariableAddress[(__range)] : +# 2246| r2246_35(vector &&) = Load[(__range)] : &:r2246_34, ~m? +#-----| r0_4(glval>) = CopyValue : r2246_35 #-----| r0_5(glval>) = Convert : r0_4 -# 2246| r2246_30(glval) = FunctionAddress[end] : -# 2246| r2246_31(iterator) = Call[end] : func:r2246_30, this:r0_5 -# 2246| mu2246_32(unknown) = ^CallSideEffect : ~m? +# 2246| r2246_36(glval) = FunctionAddress[end] : +# 2246| r2246_37(iterator) = Call[end] : func:r2246_36, this:r0_5 +# 2246| mu2246_38(unknown) = ^CallSideEffect : ~m? #-----| v0_6(void) = ^IndirectReadSideEffect[-1] : &:r0_5, ~m? -# 2246| mu2246_33(iterator) = Store[(__end)] : &:r2246_27, r2246_31 +# 2246| mu2246_39(iterator) = Store[(__end)] : &:r2246_33, r2246_37 #-----| Goto -> Block 4 # 2246| Block 4 -# 2246| r2246_34(glval) = VariableAddress[(__begin)] : -#-----| r0_7(glval) = Convert : r2246_34 -# 2246| r2246_35(glval) = FunctionAddress[operator!=] : -# 2246| r2246_36(glval) = VariableAddress[(__end)] : -# 2246| r2246_37(iterator) = Load[(__end)] : &:r2246_36, ~m? -# 2246| r2246_38(bool) = Call[operator!=] : func:r2246_35, this:r0_7, 0:r2246_37 -# 2246| mu2246_39(unknown) = ^CallSideEffect : ~m? +# 2246| r2246_40(glval) = VariableAddress[(__begin)] : +#-----| r0_7(glval) = Convert : r2246_40 +# 2246| r2246_41(glval) = FunctionAddress[operator!=] : +# 2246| r2246_42(glval) = VariableAddress[(__end)] : +# 2246| r2246_43(iterator) = Load[(__end)] : &:r2246_42, ~m? +# 2246| r2246_44(bool) = Call[operator!=] : func:r2246_41, this:r0_7, 0:r2246_43 +# 2246| mu2246_45(unknown) = ^CallSideEffect : ~m? #-----| v0_8(void) = ^IndirectReadSideEffect[-1] : &:r0_7, ~m? -# 2246| v2246_40(void) = ConditionalBranch : r2246_38 +# 2246| v2246_46(void) = ConditionalBranch : r2246_44 #-----| False -> Block 6 #-----| True -> Block 5 # 2246| Block 5 -# 2246| r2246_41(glval) = VariableAddress[s] : -# 2246| mu2246_42(String) = Uninitialized[s] : &:r2246_41 -# 2246| r2246_43(glval) = FunctionAddress[String] : -# 2246| r2246_44(glval) = VariableAddress[(__begin)] : -#-----| r0_9(glval) = Convert : r2246_44 -# 2246| r2246_45(glval) = FunctionAddress[operator*] : -# 2246| r2246_46(String &) = Call[operator*] : func:r2246_45, this:r0_9 -# 2246| mu2246_47(unknown) = ^CallSideEffect : ~m? +# 2246| r2246_47(glval) = VariableAddress[s] : +# 2246| mu2246_48(String) = Uninitialized[s] : &:r2246_47 +# 2246| r2246_49(glval) = FunctionAddress[String] : +# 2246| r2246_50(glval) = VariableAddress[(__begin)] : +#-----| r0_9(glval) = Convert : r2246_50 +# 2246| r2246_51(glval) = FunctionAddress[operator*] : +# 2246| r2246_52(String &) = Call[operator*] : func:r2246_51, this:r0_9 +# 2246| mu2246_53(unknown) = ^CallSideEffect : ~m? #-----| v0_10(void) = ^IndirectReadSideEffect[-1] : &:r0_9, ~m? -# 2246| r2246_48(glval) = CopyValue : r2246_46 -# 2246| r2246_49(glval) = Convert : r2246_48 -# 2246| r2246_50(String &) = CopyValue : r2246_49 -# 2246| v2246_51(void) = Call[String] : func:r2246_43, this:r2246_41, 0:r2246_50 -# 2246| mu2246_52(unknown) = ^CallSideEffect : ~m? -# 2246| v2246_53(void) = ^BufferReadSideEffect[0] : &:r2246_50, ~m? -# 2246| mu2246_54(String) = ^IndirectMayWriteSideEffect[-1] : &:r2246_41 +# 2246| r2246_54(glval) = CopyValue : r2246_52 +# 2246| r2246_55(glval) = Convert : r2246_54 +# 2246| r2246_56(String &) = CopyValue : r2246_55 +# 2246| v2246_57(void) = Call[String] : func:r2246_49, this:r2246_47, 0:r2246_56 +# 2246| mu2246_58(unknown) = ^CallSideEffect : ~m? +# 2246| v2246_59(void) = ^BufferReadSideEffect[0] : &:r2246_56, ~m? +# 2246| mu2246_60(String) = ^IndirectMayWriteSideEffect[-1] : &:r2246_47 # 2247| r2247_1(glval) = VariableAddress[s2] : # 2247| mu2247_2(String) = Uninitialized[s2] : &:r2247_1 # 2247| r2247_3(glval) = FunctionAddress[String] : @@ -13079,19 +13208,19 @@ ir.cpp: # 2248| mu2248_4(unknown) = ^CallSideEffect : ~m? # 2248| v2248_5(void) = ^IndirectReadSideEffect[-1] : &:r2248_1, ~m? # 2248| mu2248_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r2248_1 -# 2246| r2246_55(glval) = VariableAddress[s] : -# 2246| r2246_56(glval) = FunctionAddress[~String] : -# 2246| v2246_57(void) = Call[~String] : func:r2246_56, this:r2246_55 -# 2246| mu2246_58(unknown) = ^CallSideEffect : ~m? -# 2246| v2246_59(void) = ^IndirectReadSideEffect[-1] : &:r2246_55, ~m? -# 2246| mu2246_60(String) = ^IndirectMayWriteSideEffect[-1] : &:r2246_55 -# 2246| r2246_61(glval) = VariableAddress[(__begin)] : -# 2246| r2246_62(glval) = FunctionAddress[operator++] : -# 2246| r2246_63(iterator &) = Call[operator++] : func:r2246_62, this:r2246_61 +# 2246| r2246_61(glval) = VariableAddress[s] : +# 2246| r2246_62(glval) = FunctionAddress[~String] : +# 2246| v2246_63(void) = Call[~String] : func:r2246_62, this:r2246_61 # 2246| mu2246_64(unknown) = ^CallSideEffect : ~m? # 2246| v2246_65(void) = ^IndirectReadSideEffect[-1] : &:r2246_61, ~m? -# 2246| mu2246_66(iterator) = ^IndirectMayWriteSideEffect[-1] : &:r2246_61 -# 2246| r2246_67(glval) = CopyValue : r2246_63 +# 2246| mu2246_66(String) = ^IndirectMayWriteSideEffect[-1] : &:r2246_61 +# 2246| r2246_67(glval) = VariableAddress[(__begin)] : +# 2246| r2246_68(glval) = FunctionAddress[operator++] : +# 2246| r2246_69(iterator &) = Call[operator++] : func:r2246_68, this:r2246_67 +# 2246| mu2246_70(unknown) = ^CallSideEffect : ~m? +# 2246| v2246_71(void) = ^IndirectReadSideEffect[-1] : &:r2246_67, ~m? +# 2246| mu2246_72(iterator) = ^IndirectMayWriteSideEffect[-1] : &:r2246_67 +# 2246| r2246_73(glval) = CopyValue : r2246_69 #-----| Goto (back edge) -> Block 4 # 2250| Block 6 @@ -13563,211 +13692,246 @@ perf-regression.cpp: smart_ptr.cpp: # 10| void call_unique_ptr_arg(int*) # 10| Block 0 -# 10| v10_1(void) = EnterFunction : -# 10| mu10_2(unknown) = AliasedDefinition : -# 10| mu10_3(unknown) = InitializeNonLocal : -# 10| r10_4(glval) = VariableAddress[p] : -# 10| mu10_5(int *) = InitializeParameter[p] : &:r10_4 -# 10| r10_6(int *) = Load[p] : &:r10_4, ~m? -# 10| mu10_7(unknown) = InitializeIndirection[p] : &:r10_6 -# 11| r11_1(glval>>) = VariableAddress[up] : -# 11| mu11_2(unique_ptr>) = Uninitialized[up] : &:r11_1 -# 11| r11_3(glval) = FunctionAddress[unique_ptr] : -# 11| r11_4(glval) = VariableAddress[p] : -# 11| r11_5(int *) = Load[p] : &:r11_4, ~m? -# 11| v11_6(void) = Call[unique_ptr] : func:r11_3, this:r11_1, 0:r11_5 -# 11| mu11_7(unknown) = ^CallSideEffect : ~m? -# 11| mu11_8(unique_ptr>) = ^IndirectMustWriteSideEffect[-1] : &:r11_1 -# 12| r12_1(glval) = FunctionAddress[unique_ptr_arg] : -# 12| r12_2(glval>>) = VariableAddress[#temp12:20] : -# 12| r12_3(glval) = FunctionAddress[move] : -# 12| r12_4(glval>>) = VariableAddress[up] : -# 12| r12_5(unique_ptr> &) = CopyValue : r12_4 -# 12| r12_6(unique_ptr> &&) = Call[move] : func:r12_3, 0:r12_5 -# 12| r12_7(unique_ptr>) = Load[?] : &:r12_6, ~m? -# 12| mu12_8(unique_ptr>) = Store[#temp12:20] : &:r12_2, r12_7 -# 12| r12_9(unique_ptr>) = Load[#temp12:20] : &:r12_2, ~m? -# 12| v12_10(void) = Call[unique_ptr_arg] : func:r12_1, 0:r12_9 -# 12| mu12_11(unknown) = ^CallSideEffect : ~m? -# 12| v12_12(void) = ^BufferReadSideEffect[0] : &:r12_9, ~m? -# 12| mu12_13(unknown) = ^BufferMayWriteSideEffect[0] : &:r12_9 -# 13| v13_1(void) = NoOp : -# 13| r13_2(glval>>) = VariableAddress[up] : -# 13| r13_3(glval) = FunctionAddress[~unique_ptr] : -# 13| v13_4(void) = Call[~unique_ptr] : func:r13_3, this:r13_2 -# 13| v13_5(void) = ^IndirectReadSideEffect[-1] : &:r13_2, ~m? -# 13| mu13_6(unique_ptr>) = ^IndirectMustWriteSideEffect[-1] : &:r13_2 -# 10| v10_8(void) = ReturnIndirection[p] : &:r10_6, ~m? -# 10| v10_9(void) = ReturnVoid : -# 10| v10_10(void) = AliasedUse : ~m? -# 10| v10_11(void) = ExitFunction : +# 10| v10_1(void) = EnterFunction : +# 10| mu10_2(unknown) = AliasedDefinition : +# 10| mu10_3(unknown) = InitializeNonLocal : +# 10| r10_4(glval) = VariableAddress[p] : +# 10| mu10_5(int *) = InitializeParameter[p] : &:r10_4 +# 10| r10_6(int *) = Load[p] : &:r10_4, ~m? +# 10| mu10_7(unknown) = InitializeIndirection[p] : &:r10_6 +# 11| r11_1(glval>>) = VariableAddress[up] : +# 11| mu11_2(unique_ptr>) = Uninitialized[up] : &:r11_1 +# 11| r11_3(glval) = FunctionAddress[unique_ptr] : +# 11| r11_4(glval) = VariableAddress[p] : +# 11| r11_5(int *) = Load[p] : &:r11_4, ~m? +# 11| v11_6(void) = Call[unique_ptr] : func:r11_3, this:r11_1, 0:r11_5 +# 11| mu11_7(unknown) = ^CallSideEffect : ~m? +# 11| mu11_8(unique_ptr>) = ^IndirectMustWriteSideEffect[-1] : &:r11_1 +# 12| r12_1(glval) = FunctionAddress[unique_ptr_arg] : +# 12| r12_2(glval>>) = VariableAddress[#temp12:20] : +# 12| r12_3(glval) = FunctionAddress[move] : +# 12| r12_4(glval>>) = VariableAddress[up] : +# 12| r12_5(unique_ptr> &) = CopyValue : r12_4 +# 12| r12_6(unique_ptr> &&) = Call[move] : func:r12_3, 0:r12_5 +# 12| r12_7(unique_ptr>) = Load[?] : &:r12_6, ~m? +# 12| mu12_8(unique_ptr>) = Store[#temp12:20] : &:r12_2, r12_7 +# 12| r12_9(unique_ptr>) = Load[#temp12:20] : &:r12_2, ~m? +# 12| v12_10(void) = Call[unique_ptr_arg] : func:r12_1, 0:r12_9 +# 12| mu12_11(unknown) = ^CallSideEffect : ~m? +# 12| v12_12(void) = ^BufferReadSideEffect[0] : &:r12_9, ~m? +# 12| mu12_13(unknown) = ^BufferMayWriteSideEffect[0] : &:r12_9 +# 12| r12_14(glval>>) = CopyValue : r12_2 +# 12| r12_15(glval) = FunctionAddress[~unique_ptr] : +# 12| v12_16(void) = Call[~unique_ptr] : func:r12_15, this:r12_14 +# 12| v12_17(void) = ^IndirectReadSideEffect[-1] : &:r12_14, ~m? +# 12| mu12_18(unique_ptr>) = ^IndirectMustWriteSideEffect[-1] : &:r12_14 +# 13| v13_1(void) = NoOp : +# 13| r13_2(glval>>) = VariableAddress[up] : +# 13| r13_3(glval) = FunctionAddress[~unique_ptr] : +# 13| v13_4(void) = Call[~unique_ptr] : func:r13_3, this:r13_2 +# 13| v13_5(void) = ^IndirectReadSideEffect[-1] : &:r13_2, ~m? +# 13| mu13_6(unique_ptr>) = ^IndirectMustWriteSideEffect[-1] : &:r13_2 +# 10| v10_8(void) = ReturnIndirection[p] : &:r10_6, ~m? +# 10| v10_9(void) = ReturnVoid : +# 10| v10_10(void) = AliasedUse : ~m? +# 10| v10_11(void) = ExitFunction : # 17| void call_shared_ptr_arg(float*) # 17| Block 0 -# 17| v17_1(void) = EnterFunction : -# 17| mu17_2(unknown) = AliasedDefinition : -# 17| mu17_3(unknown) = InitializeNonLocal : -# 17| r17_4(glval) = VariableAddress[p] : -# 17| mu17_5(float *) = InitializeParameter[p] : &:r17_4 -# 17| r17_6(float *) = Load[p] : &:r17_4, ~m? -# 17| mu17_7(unknown) = InitializeIndirection[p] : &:r17_6 -# 18| r18_1(glval>) = VariableAddress[sp] : -# 18| mu18_2(shared_ptr) = Uninitialized[sp] : &:r18_1 -# 18| r18_3(glval) = FunctionAddress[shared_ptr] : -# 18| r18_4(glval) = VariableAddress[p] : -# 18| r18_5(float *) = Load[p] : &:r18_4, ~m? -# 18| v18_6(void) = Call[shared_ptr] : func:r18_3, this:r18_1, 0:r18_5 -# 18| mu18_7(unknown) = ^CallSideEffect : ~m? -# 18| mu18_8(shared_ptr) = ^IndirectMustWriteSideEffect[-1] : &:r18_1 -# 19| r19_1(glval) = FunctionAddress[shared_ptr_arg] : -# 19| r19_2(glval>) = VariableAddress[#temp19:20] : -# 19| mu19_3(shared_ptr) = Uninitialized[#temp19:20] : &:r19_2 -# 19| r19_4(glval) = FunctionAddress[shared_ptr] : -# 19| r19_5(glval>) = VariableAddress[sp] : -# 19| r19_6(glval>) = Convert : r19_5 -# 19| r19_7(shared_ptr &) = CopyValue : r19_6 -# 19| v19_8(void) = Call[shared_ptr] : func:r19_4, this:r19_2, 0:r19_7 -# 19| mu19_9(unknown) = ^CallSideEffect : ~m? -# 19| v19_10(void) = ^IndirectReadSideEffect[0] : &:r19_7, ~m? -# 19| mu19_11(shared_ptr) = ^IndirectMustWriteSideEffect[-1] : &:r19_2 -# 19| r19_12(shared_ptr) = Load[#temp19:20] : &:r19_2, ~m? -# 19| v19_13(void) = Call[shared_ptr_arg] : func:r19_1, 0:r19_12 -# 19| mu19_14(unknown) = ^CallSideEffect : ~m? -# 19| v19_15(void) = ^BufferReadSideEffect[0] : &:r19_12, ~m? -# 19| mu19_16(unknown) = ^BufferMayWriteSideEffect[0] : &:r19_12 -# 20| v20_1(void) = NoOp : -# 20| r20_2(glval>) = VariableAddress[sp] : -# 20| r20_3(glval) = FunctionAddress[~shared_ptr] : -# 20| v20_4(void) = Call[~shared_ptr] : func:r20_3, this:r20_2 -# 20| v20_5(void) = ^IndirectReadSideEffect[-1] : &:r20_2, ~m? -# 20| mu20_6(shared_ptr) = ^IndirectMustWriteSideEffect[-1] : &:r20_2 -# 17| v17_8(void) = ReturnIndirection[p] : &:r17_6, ~m? -# 17| v17_9(void) = ReturnVoid : -# 17| v17_10(void) = AliasedUse : ~m? -# 17| v17_11(void) = ExitFunction : +# 17| v17_1(void) = EnterFunction : +# 17| mu17_2(unknown) = AliasedDefinition : +# 17| mu17_3(unknown) = InitializeNonLocal : +# 17| r17_4(glval) = VariableAddress[p] : +# 17| mu17_5(float *) = InitializeParameter[p] : &:r17_4 +# 17| r17_6(float *) = Load[p] : &:r17_4, ~m? +# 17| mu17_7(unknown) = InitializeIndirection[p] : &:r17_6 +# 18| r18_1(glval>) = VariableAddress[sp] : +# 18| mu18_2(shared_ptr) = Uninitialized[sp] : &:r18_1 +# 18| r18_3(glval) = FunctionAddress[shared_ptr] : +# 18| r18_4(glval) = VariableAddress[p] : +# 18| r18_5(float *) = Load[p] : &:r18_4, ~m? +# 18| v18_6(void) = Call[shared_ptr] : func:r18_3, this:r18_1, 0:r18_5 +# 18| mu18_7(unknown) = ^CallSideEffect : ~m? +# 18| mu18_8(shared_ptr) = ^IndirectMustWriteSideEffect[-1] : &:r18_1 +# 19| r19_1(glval) = FunctionAddress[shared_ptr_arg] : +# 19| r19_2(glval>) = VariableAddress[#temp19:20] : +# 19| mu19_3(shared_ptr) = Uninitialized[#temp19:20] : &:r19_2 +# 19| r19_4(glval) = FunctionAddress[shared_ptr] : +# 19| r19_5(glval>) = VariableAddress[sp] : +# 19| r19_6(glval>) = Convert : r19_5 +# 19| r19_7(shared_ptr &) = CopyValue : r19_6 +# 19| v19_8(void) = Call[shared_ptr] : func:r19_4, this:r19_2, 0:r19_7 +# 19| mu19_9(unknown) = ^CallSideEffect : ~m? +# 19| v19_10(void) = ^IndirectReadSideEffect[0] : &:r19_7, ~m? +# 19| mu19_11(shared_ptr) = ^IndirectMustWriteSideEffect[-1] : &:r19_2 +# 19| r19_12(shared_ptr) = Load[#temp19:20] : &:r19_2, ~m? +# 19| v19_13(void) = Call[shared_ptr_arg] : func:r19_1, 0:r19_12 +# 19| mu19_14(unknown) = ^CallSideEffect : ~m? +# 19| v19_15(void) = ^BufferReadSideEffect[0] : &:r19_12, ~m? +# 19| mu19_16(unknown) = ^BufferMayWriteSideEffect[0] : &:r19_12 +# 19| r19_17(glval>) = CopyValue : r19_2 +# 19| r19_18(glval) = FunctionAddress[~shared_ptr] : +# 19| v19_19(void) = Call[~shared_ptr] : func:r19_18, this:r19_17 +# 19| v19_20(void) = ^IndirectReadSideEffect[-1] : &:r19_17, ~m? +# 19| mu19_21(shared_ptr) = ^IndirectMustWriteSideEffect[-1] : &:r19_17 +# 20| v20_1(void) = NoOp : +# 20| r20_2(glval>) = VariableAddress[sp] : +# 20| r20_3(glval) = FunctionAddress[~shared_ptr] : +# 20| v20_4(void) = Call[~shared_ptr] : func:r20_3, this:r20_2 +# 20| v20_5(void) = ^IndirectReadSideEffect[-1] : &:r20_2, ~m? +# 20| mu20_6(shared_ptr) = ^IndirectMustWriteSideEffect[-1] : &:r20_2 +# 17| v17_8(void) = ReturnIndirection[p] : &:r17_6, ~m? +# 17| v17_9(void) = ReturnVoid : +# 17| v17_10(void) = AliasedUse : ~m? +# 17| v17_11(void) = ExitFunction : # 28| void call_shared_ptr_consts() # 28| Block 0 -# 28| v28_1(void) = EnterFunction : -# 28| mu28_2(unknown) = AliasedDefinition : -# 28| mu28_3(unknown) = InitializeNonLocal : -# 29| r29_1(glval>) = VariableAddress[sp_const_int] : -# 29| mu29_2(shared_ptr) = Uninitialized[sp_const_int] : &:r29_1 -# 31| r31_1(glval) = FunctionAddress[shared_ptr_const_int] : -# 31| r31_2(glval>) = VariableAddress[#temp31:26] : -# 31| mu31_3(shared_ptr) = Uninitialized[#temp31:26] : &:r31_2 -# 31| r31_4(glval) = FunctionAddress[shared_ptr] : -# 31| r31_5(glval>) = VariableAddress[sp_const_int] : -# 31| r31_6(glval>) = Convert : r31_5 -# 31| r31_7(shared_ptr &) = CopyValue : r31_6 -# 31| v31_8(void) = Call[shared_ptr] : func:r31_4, this:r31_2, 0:r31_7 -# 31| mu31_9(unknown) = ^CallSideEffect : ~m? -# 31| v31_10(void) = ^IndirectReadSideEffect[0] : &:r31_7, ~m? -# 31| mu31_11(shared_ptr) = ^IndirectMustWriteSideEffect[-1] : &:r31_2 -# 31| r31_12(shared_ptr) = Load[#temp31:26] : &:r31_2, ~m? -# 31| v31_13(void) = Call[shared_ptr_const_int] : func:r31_1, 0:r31_12 -# 31| mu31_14(unknown) = ^CallSideEffect : ~m? -# 31| v31_15(void) = ^BufferReadSideEffect[0] : &:r31_12, ~m? -# 33| r33_1(glval>) = VariableAddress[sp_const_int_pointer] : -# 33| mu33_2(shared_ptr) = Uninitialized[sp_const_int_pointer] : &:r33_1 -# 35| r35_1(glval) = FunctionAddress[shared_ptr_const_int_ptr] : -# 35| r35_2(glval>) = VariableAddress[#temp35:30] : -# 35| mu35_3(shared_ptr) = Uninitialized[#temp35:30] : &:r35_2 -# 35| r35_4(glval) = FunctionAddress[shared_ptr] : -# 35| r35_5(glval>) = VariableAddress[sp_const_int_pointer] : -# 35| r35_6(glval>) = Convert : r35_5 -# 35| r35_7(shared_ptr &) = CopyValue : r35_6 -# 35| v35_8(void) = Call[shared_ptr] : func:r35_4, this:r35_2, 0:r35_7 -# 35| mu35_9(unknown) = ^CallSideEffect : ~m? -# 35| v35_10(void) = ^IndirectReadSideEffect[0] : &:r35_7, ~m? -# 35| mu35_11(shared_ptr) = ^IndirectMustWriteSideEffect[-1] : &:r35_2 -# 35| r35_12(shared_ptr) = Load[#temp35:30] : &:r35_2, ~m? -# 35| v35_13(void) = Call[shared_ptr_const_int_ptr] : func:r35_1, 0:r35_12 -# 35| mu35_14(unknown) = ^CallSideEffect : ~m? -# 35| v35_15(void) = ^BufferReadSideEffect[0] : &:r35_12, ~m? -# 35| mu35_16(unknown) = ^BufferMayWriteSideEffect[0] : &:r35_12 -# 37| r37_1(glval>>) = VariableAddress[sp_sp_const_int] : -# 37| mu37_2(shared_ptr>) = Uninitialized[sp_sp_const_int] : &:r37_1 -# 39| r39_1(glval) = FunctionAddress[shared_ptr_shared_ptr_const_int] : -# 39| r39_2(glval>>) = VariableAddress[#temp39:37] : -# 39| mu39_3(shared_ptr>) = Uninitialized[#temp39:37] : &:r39_2 -# 39| r39_4(glval) = FunctionAddress[shared_ptr] : -# 39| r39_5(glval>>) = VariableAddress[sp_sp_const_int] : -# 39| r39_6(glval>>) = Convert : r39_5 -# 39| r39_7(shared_ptr> &) = CopyValue : r39_6 -# 39| v39_8(void) = Call[shared_ptr] : func:r39_4, this:r39_2, 0:r39_7 -# 39| mu39_9(unknown) = ^CallSideEffect : ~m? -# 39| v39_10(void) = ^IndirectReadSideEffect[0] : &:r39_7, ~m? -# 39| mu39_11(shared_ptr>) = ^IndirectMustWriteSideEffect[-1] : &:r39_2 -# 39| r39_12(shared_ptr>) = Load[#temp39:37] : &:r39_2, ~m? -# 39| v39_13(void) = Call[shared_ptr_shared_ptr_const_int] : func:r39_1, 0:r39_12 -# 39| mu39_14(unknown) = ^CallSideEffect : ~m? -# 39| v39_15(void) = ^BufferReadSideEffect[0] : &:r39_12, ~m? -# 39| mu39_16(unknown) = ^BufferMayWriteSideEffect[0] : &:r39_12 -# 41| r41_1(glval>>) = VariableAddress[sp_const_sp_int] : -# 41| mu41_2(shared_ptr>) = Uninitialized[sp_const_sp_int] : &:r41_1 -# 43| r43_1(glval) = FunctionAddress[shared_ptr_const_shared_ptr_int] : -# 43| r43_2(glval>>) = VariableAddress[#temp43:37] : -# 43| mu43_3(shared_ptr>) = Uninitialized[#temp43:37] : &:r43_2 -# 43| r43_4(glval) = FunctionAddress[shared_ptr] : -# 43| r43_5(glval>>) = VariableAddress[sp_const_sp_int] : -# 43| r43_6(glval>>) = Convert : r43_5 -# 43| r43_7(shared_ptr> &) = CopyValue : r43_6 -# 43| v43_8(void) = Call[shared_ptr] : func:r43_4, this:r43_2, 0:r43_7 -# 43| mu43_9(unknown) = ^CallSideEffect : ~m? -# 43| v43_10(void) = ^IndirectReadSideEffect[0] : &:r43_7, ~m? -# 43| mu43_11(shared_ptr>) = ^IndirectMustWriteSideEffect[-1] : &:r43_2 -# 43| r43_12(shared_ptr>) = Load[#temp43:37] : &:r43_2, ~m? -# 43| v43_13(void) = Call[shared_ptr_const_shared_ptr_int] : func:r43_1, 0:r43_12 -# 43| mu43_14(unknown) = ^CallSideEffect : ~m? -# 43| v43_15(void) = ^BufferReadSideEffect[0] : &:r43_12, ~m? -# 43| mu43_16(unknown) = ^BufferMayWriteSideEffect[0] : &:r43_12 -# 45| r45_1(glval>>) = VariableAddress[sp_const_sp_const_int] : -# 45| mu45_2(shared_ptr>) = Uninitialized[sp_const_sp_const_int] : &:r45_1 -# 47| r47_1(glval) = FunctionAddress[shared_ptr_const_shared_ptr_const_int] : -# 47| r47_2(glval>>) = VariableAddress[#temp47:43] : -# 47| mu47_3(shared_ptr>) = Uninitialized[#temp47:43] : &:r47_2 -# 47| r47_4(glval) = FunctionAddress[shared_ptr] : -# 47| r47_5(glval>>) = VariableAddress[sp_const_sp_const_int] : -# 47| r47_6(glval>>) = Convert : r47_5 -# 47| r47_7(shared_ptr> &) = CopyValue : r47_6 -# 47| v47_8(void) = Call[shared_ptr] : func:r47_4, this:r47_2, 0:r47_7 -# 47| mu47_9(unknown) = ^CallSideEffect : ~m? -# 47| v47_10(void) = ^IndirectReadSideEffect[0] : &:r47_7, ~m? -# 47| mu47_11(shared_ptr>) = ^IndirectMustWriteSideEffect[-1] : &:r47_2 -# 47| r47_12(shared_ptr>) = Load[#temp47:43] : &:r47_2, ~m? -# 47| v47_13(void) = Call[shared_ptr_const_shared_ptr_const_int] : func:r47_1, 0:r47_12 -# 47| mu47_14(unknown) = ^CallSideEffect : ~m? -# 47| v47_15(void) = ^BufferReadSideEffect[0] : &:r47_12, ~m? -# 48| v48_1(void) = NoOp : -# 48| r48_2(glval>>) = VariableAddress[sp_const_sp_const_int] : -# 48| r48_3(glval) = FunctionAddress[~shared_ptr] : -# 48| v48_4(void) = Call[~shared_ptr] : func:r48_3, this:r48_2 -# 48| v48_5(void) = ^IndirectReadSideEffect[-1] : &:r48_2, ~m? -# 48| mu48_6(shared_ptr>) = ^IndirectMustWriteSideEffect[-1] : &:r48_2 -# 48| r48_7(glval>>) = VariableAddress[sp_const_sp_int] : -# 48| r48_8(glval) = FunctionAddress[~shared_ptr] : -# 48| v48_9(void) = Call[~shared_ptr] : func:r48_8, this:r48_7 -# 48| v48_10(void) = ^IndirectReadSideEffect[-1] : &:r48_7, ~m? -# 48| mu48_11(shared_ptr>) = ^IndirectMustWriteSideEffect[-1] : &:r48_7 -# 48| r48_12(glval>>) = VariableAddress[sp_sp_const_int] : -# 48| r48_13(glval) = FunctionAddress[~shared_ptr] : -# 48| v48_14(void) = Call[~shared_ptr] : func:r48_13, this:r48_12 -# 48| v48_15(void) = ^IndirectReadSideEffect[-1] : &:r48_12, ~m? -# 48| mu48_16(shared_ptr>) = ^IndirectMustWriteSideEffect[-1] : &:r48_12 -# 48| r48_17(glval>) = VariableAddress[sp_const_int_pointer] : -# 48| r48_18(glval) = FunctionAddress[~shared_ptr] : -# 48| v48_19(void) = Call[~shared_ptr] : func:r48_18, this:r48_17 -# 48| v48_20(void) = ^IndirectReadSideEffect[-1] : &:r48_17, ~m? -# 48| mu48_21(shared_ptr) = ^IndirectMustWriteSideEffect[-1] : &:r48_17 -# 48| r48_22(glval>) = VariableAddress[sp_const_int] : -# 48| r48_23(glval) = FunctionAddress[~shared_ptr] : -# 48| v48_24(void) = Call[~shared_ptr] : func:r48_23, this:r48_22 -# 48| v48_25(void) = ^IndirectReadSideEffect[-1] : &:r48_22, ~m? -# 48| mu48_26(shared_ptr) = ^IndirectMustWriteSideEffect[-1] : &:r48_22 -# 28| v28_4(void) = ReturnVoid : -# 28| v28_5(void) = AliasedUse : ~m? -# 28| v28_6(void) = ExitFunction : +# 28| v28_1(void) = EnterFunction : +# 28| mu28_2(unknown) = AliasedDefinition : +# 28| mu28_3(unknown) = InitializeNonLocal : +# 29| r29_1(glval>) = VariableAddress[sp_const_int] : +# 29| mu29_2(shared_ptr) = Uninitialized[sp_const_int] : &:r29_1 +# 31| r31_1(glval) = FunctionAddress[shared_ptr_const_int] : +# 31| r31_2(glval>) = VariableAddress[#temp31:26] : +# 31| mu31_3(shared_ptr) = Uninitialized[#temp31:26] : &:r31_2 +# 31| r31_4(glval) = FunctionAddress[shared_ptr] : +# 31| r31_5(glval>) = VariableAddress[sp_const_int] : +# 31| r31_6(glval>) = Convert : r31_5 +# 31| r31_7(shared_ptr &) = CopyValue : r31_6 +# 31| v31_8(void) = Call[shared_ptr] : func:r31_4, this:r31_2, 0:r31_7 +# 31| mu31_9(unknown) = ^CallSideEffect : ~m? +# 31| v31_10(void) = ^IndirectReadSideEffect[0] : &:r31_7, ~m? +# 31| mu31_11(shared_ptr) = ^IndirectMustWriteSideEffect[-1] : &:r31_2 +# 31| r31_12(shared_ptr) = Load[#temp31:26] : &:r31_2, ~m? +# 31| v31_13(void) = Call[shared_ptr_const_int] : func:r31_1, 0:r31_12 +# 31| mu31_14(unknown) = ^CallSideEffect : ~m? +# 31| v31_15(void) = ^BufferReadSideEffect[0] : &:r31_12, ~m? +# 31| r31_16(glval>) = CopyValue : r31_2 +# 31| r31_17(glval) = FunctionAddress[~shared_ptr] : +# 31| v31_18(void) = Call[~shared_ptr] : func:r31_17, this:r31_16 +# 31| v31_19(void) = ^IndirectReadSideEffect[-1] : &:r31_16, ~m? +# 31| mu31_20(shared_ptr) = ^IndirectMustWriteSideEffect[-1] : &:r31_16 +# 33| r33_1(glval>) = VariableAddress[sp_const_int_pointer] : +# 33| mu33_2(shared_ptr) = Uninitialized[sp_const_int_pointer] : &:r33_1 +# 35| r35_1(glval) = FunctionAddress[shared_ptr_const_int_ptr] : +# 35| r35_2(glval>) = VariableAddress[#temp35:30] : +# 35| mu35_3(shared_ptr) = Uninitialized[#temp35:30] : &:r35_2 +# 35| r35_4(glval) = FunctionAddress[shared_ptr] : +# 35| r35_5(glval>) = VariableAddress[sp_const_int_pointer] : +# 35| r35_6(glval>) = Convert : r35_5 +# 35| r35_7(shared_ptr &) = CopyValue : r35_6 +# 35| v35_8(void) = Call[shared_ptr] : func:r35_4, this:r35_2, 0:r35_7 +# 35| mu35_9(unknown) = ^CallSideEffect : ~m? +# 35| v35_10(void) = ^IndirectReadSideEffect[0] : &:r35_7, ~m? +# 35| mu35_11(shared_ptr) = ^IndirectMustWriteSideEffect[-1] : &:r35_2 +# 35| r35_12(shared_ptr) = Load[#temp35:30] : &:r35_2, ~m? +# 35| v35_13(void) = Call[shared_ptr_const_int_ptr] : func:r35_1, 0:r35_12 +# 35| mu35_14(unknown) = ^CallSideEffect : ~m? +# 35| v35_15(void) = ^BufferReadSideEffect[0] : &:r35_12, ~m? +# 35| mu35_16(unknown) = ^BufferMayWriteSideEffect[0] : &:r35_12 +# 35| r35_17(glval>) = CopyValue : r35_2 +# 35| r35_18(glval) = FunctionAddress[~shared_ptr] : +# 35| v35_19(void) = Call[~shared_ptr] : func:r35_18, this:r35_17 +# 35| v35_20(void) = ^IndirectReadSideEffect[-1] : &:r35_17, ~m? +# 35| mu35_21(shared_ptr) = ^IndirectMustWriteSideEffect[-1] : &:r35_17 +# 37| r37_1(glval>>) = VariableAddress[sp_sp_const_int] : +# 37| mu37_2(shared_ptr>) = Uninitialized[sp_sp_const_int] : &:r37_1 +# 39| r39_1(glval) = FunctionAddress[shared_ptr_shared_ptr_const_int] : +# 39| r39_2(glval>>) = VariableAddress[#temp39:37] : +# 39| mu39_3(shared_ptr>) = Uninitialized[#temp39:37] : &:r39_2 +# 39| r39_4(glval) = FunctionAddress[shared_ptr] : +# 39| r39_5(glval>>) = VariableAddress[sp_sp_const_int] : +# 39| r39_6(glval>>) = Convert : r39_5 +# 39| r39_7(shared_ptr> &) = CopyValue : r39_6 +# 39| v39_8(void) = Call[shared_ptr] : func:r39_4, this:r39_2, 0:r39_7 +# 39| mu39_9(unknown) = ^CallSideEffect : ~m? +# 39| v39_10(void) = ^IndirectReadSideEffect[0] : &:r39_7, ~m? +# 39| mu39_11(shared_ptr>) = ^IndirectMustWriteSideEffect[-1] : &:r39_2 +# 39| r39_12(shared_ptr>) = Load[#temp39:37] : &:r39_2, ~m? +# 39| v39_13(void) = Call[shared_ptr_shared_ptr_const_int] : func:r39_1, 0:r39_12 +# 39| mu39_14(unknown) = ^CallSideEffect : ~m? +# 39| v39_15(void) = ^BufferReadSideEffect[0] : &:r39_12, ~m? +# 39| mu39_16(unknown) = ^BufferMayWriteSideEffect[0] : &:r39_12 +# 39| r39_17(glval>>) = CopyValue : r39_2 +# 39| r39_18(glval) = FunctionAddress[~shared_ptr] : +# 39| v39_19(void) = Call[~shared_ptr] : func:r39_18, this:r39_17 +# 39| v39_20(void) = ^IndirectReadSideEffect[-1] : &:r39_17, ~m? +# 39| mu39_21(shared_ptr>) = ^IndirectMustWriteSideEffect[-1] : &:r39_17 +# 41| r41_1(glval>>) = VariableAddress[sp_const_sp_int] : +# 41| mu41_2(shared_ptr>) = Uninitialized[sp_const_sp_int] : &:r41_1 +# 43| r43_1(glval) = FunctionAddress[shared_ptr_const_shared_ptr_int] : +# 43| r43_2(glval>>) = VariableAddress[#temp43:37] : +# 43| mu43_3(shared_ptr>) = Uninitialized[#temp43:37] : &:r43_2 +# 43| r43_4(glval) = FunctionAddress[shared_ptr] : +# 43| r43_5(glval>>) = VariableAddress[sp_const_sp_int] : +# 43| r43_6(glval>>) = Convert : r43_5 +# 43| r43_7(shared_ptr> &) = CopyValue : r43_6 +# 43| v43_8(void) = Call[shared_ptr] : func:r43_4, this:r43_2, 0:r43_7 +# 43| mu43_9(unknown) = ^CallSideEffect : ~m? +# 43| v43_10(void) = ^IndirectReadSideEffect[0] : &:r43_7, ~m? +# 43| mu43_11(shared_ptr>) = ^IndirectMustWriteSideEffect[-1] : &:r43_2 +# 43| r43_12(shared_ptr>) = Load[#temp43:37] : &:r43_2, ~m? +# 43| v43_13(void) = Call[shared_ptr_const_shared_ptr_int] : func:r43_1, 0:r43_12 +# 43| mu43_14(unknown) = ^CallSideEffect : ~m? +# 43| v43_15(void) = ^BufferReadSideEffect[0] : &:r43_12, ~m? +# 43| mu43_16(unknown) = ^BufferMayWriteSideEffect[0] : &:r43_12 +# 43| r43_17(glval>>) = CopyValue : r43_2 +# 43| r43_18(glval) = FunctionAddress[~shared_ptr] : +# 43| v43_19(void) = Call[~shared_ptr] : func:r43_18, this:r43_17 +# 43| v43_20(void) = ^IndirectReadSideEffect[-1] : &:r43_17, ~m? +# 43| mu43_21(shared_ptr>) = ^IndirectMustWriteSideEffect[-1] : &:r43_17 +# 45| r45_1(glval>>) = VariableAddress[sp_const_sp_const_int] : +# 45| mu45_2(shared_ptr>) = Uninitialized[sp_const_sp_const_int] : &:r45_1 +# 47| r47_1(glval) = FunctionAddress[shared_ptr_const_shared_ptr_const_int] : +# 47| r47_2(glval>>) = VariableAddress[#temp47:43] : +# 47| mu47_3(shared_ptr>) = Uninitialized[#temp47:43] : &:r47_2 +# 47| r47_4(glval) = FunctionAddress[shared_ptr] : +# 47| r47_5(glval>>) = VariableAddress[sp_const_sp_const_int] : +# 47| r47_6(glval>>) = Convert : r47_5 +# 47| r47_7(shared_ptr> &) = CopyValue : r47_6 +# 47| v47_8(void) = Call[shared_ptr] : func:r47_4, this:r47_2, 0:r47_7 +# 47| mu47_9(unknown) = ^CallSideEffect : ~m? +# 47| v47_10(void) = ^IndirectReadSideEffect[0] : &:r47_7, ~m? +# 47| mu47_11(shared_ptr>) = ^IndirectMustWriteSideEffect[-1] : &:r47_2 +# 47| r47_12(shared_ptr>) = Load[#temp47:43] : &:r47_2, ~m? +# 47| v47_13(void) = Call[shared_ptr_const_shared_ptr_const_int] : func:r47_1, 0:r47_12 +# 47| mu47_14(unknown) = ^CallSideEffect : ~m? +# 47| v47_15(void) = ^BufferReadSideEffect[0] : &:r47_12, ~m? +# 47| r47_16(glval>>) = CopyValue : r47_2 +# 47| r47_17(glval) = FunctionAddress[~shared_ptr] : +# 47| v47_18(void) = Call[~shared_ptr] : func:r47_17, this:r47_16 +# 47| v47_19(void) = ^IndirectReadSideEffect[-1] : &:r47_16, ~m? +# 47| mu47_20(shared_ptr>) = ^IndirectMustWriteSideEffect[-1] : &:r47_16 +# 48| v48_1(void) = NoOp : +# 48| r48_2(glval>>) = VariableAddress[sp_const_sp_const_int] : +# 48| r48_3(glval) = FunctionAddress[~shared_ptr] : +# 48| v48_4(void) = Call[~shared_ptr] : func:r48_3, this:r48_2 +# 48| v48_5(void) = ^IndirectReadSideEffect[-1] : &:r48_2, ~m? +# 48| mu48_6(shared_ptr>) = ^IndirectMustWriteSideEffect[-1] : &:r48_2 +# 48| r48_7(glval>>) = VariableAddress[sp_const_sp_int] : +# 48| r48_8(glval) = FunctionAddress[~shared_ptr] : +# 48| v48_9(void) = Call[~shared_ptr] : func:r48_8, this:r48_7 +# 48| v48_10(void) = ^IndirectReadSideEffect[-1] : &:r48_7, ~m? +# 48| mu48_11(shared_ptr>) = ^IndirectMustWriteSideEffect[-1] : &:r48_7 +# 48| r48_12(glval>>) = VariableAddress[sp_sp_const_int] : +# 48| r48_13(glval) = FunctionAddress[~shared_ptr] : +# 48| v48_14(void) = Call[~shared_ptr] : func:r48_13, this:r48_12 +# 48| v48_15(void) = ^IndirectReadSideEffect[-1] : &:r48_12, ~m? +# 48| mu48_16(shared_ptr>) = ^IndirectMustWriteSideEffect[-1] : &:r48_12 +# 48| r48_17(glval>) = VariableAddress[sp_const_int_pointer] : +# 48| r48_18(glval) = FunctionAddress[~shared_ptr] : +# 48| v48_19(void) = Call[~shared_ptr] : func:r48_18, this:r48_17 +# 48| v48_20(void) = ^IndirectReadSideEffect[-1] : &:r48_17, ~m? +# 48| mu48_21(shared_ptr) = ^IndirectMustWriteSideEffect[-1] : &:r48_17 +# 48| r48_22(glval>) = VariableAddress[sp_const_int] : +# 48| r48_23(glval) = FunctionAddress[~shared_ptr] : +# 48| v48_24(void) = Call[~shared_ptr] : func:r48_23, this:r48_22 +# 48| v48_25(void) = ^IndirectReadSideEffect[-1] : &:r48_22, ~m? +# 48| mu48_26(shared_ptr) = ^IndirectMustWriteSideEffect[-1] : &:r48_22 +# 28| v28_4(void) = ReturnVoid : +# 28| v28_5(void) = AliasedUse : ~m? +# 28| v28_6(void) = ExitFunction : struct_init.cpp: # 9| Info infos_in_file[] @@ -13954,6 +14118,315 @@ struct_init.cpp: # 36| v36_10(void) = AliasedUse : ~m? # 36| v36_11(void) = ExitFunction : +temp.cpp: +# 14| char temp_test() +# 14| Block 0 +# 14| v14_1(void) = EnterFunction : +# 14| mu14_2(unknown) = AliasedDefinition : +# 14| mu14_3(unknown) = InitializeNonLocal : +# 15| r15_1(glval) = VariableAddress[x] : +# 15| r15_2(glval) = VariableAddress[#temp15:14] : +# 15| mu15_3(ClassWithDestructor2) = Uninitialized[#temp15:14] : &:r15_2 +# 15| r15_4(glval) = FunctionAddress[ClassWithDestructor2] : +# 15| v15_5(void) = Call[ClassWithDestructor2] : func:r15_4, this:r15_2 +# 15| mu15_6(unknown) = ^CallSideEffect : ~m? +# 15| mu15_7(ClassWithDestructor2) = ^IndirectMayWriteSideEffect[-1] : &:r15_2 +# 15| r15_8(glval) = FunctionAddress[get_x] : +# 15| r15_9(char) = Call[get_x] : func:r15_8, this:r15_2 +# 15| mu15_10(unknown) = ^CallSideEffect : ~m? +# 15| v15_11(void) = ^IndirectReadSideEffect[-1] : &:r15_2, ~m? +# 15| mu15_12(ClassWithDestructor2) = ^IndirectMayWriteSideEffect[-1] : &:r15_2 +# 15| r15_13(glval) = CopyValue : r15_2 +# 15| r15_14(glval) = FunctionAddress[~ClassWithDestructor2] : +# 15| v15_15(void) = Call[~ClassWithDestructor2] : func:r15_14, this:r15_13 +# 15| mu15_16(unknown) = ^CallSideEffect : ~m? +# 15| v15_17(void) = ^IndirectReadSideEffect[-1] : &:r15_13, ~m? +# 15| mu15_18(ClassWithDestructor2) = ^IndirectMayWriteSideEffect[-1] : &:r15_13 +# 15| mu15_19(char) = Store[x] : &:r15_1, r15_9 +# 16| r16_1(glval) = VariableAddress[y] : +# 16| mu16_2(ClassWithConstructor) = Uninitialized[y] : &:r16_1 +# 16| r16_3(glval) = FunctionAddress[ClassWithConstructor] : +# 16| r16_4(char) = Constant[97] : +# 16| r16_5(glval) = VariableAddress[#temp16:33] : +# 16| mu16_6(ClassWithDestructor2) = Uninitialized[#temp16:33] : &:r16_5 +# 16| r16_7(glval) = FunctionAddress[ClassWithDestructor2] : +# 16| v16_8(void) = Call[ClassWithDestructor2] : func:r16_7, this:r16_5 +# 16| mu16_9(unknown) = ^CallSideEffect : ~m? +# 16| mu16_10(ClassWithDestructor2) = ^IndirectMayWriteSideEffect[-1] : &:r16_5 +# 16| r16_11(glval) = FunctionAddress[get_x] : +# 16| r16_12(char) = Call[get_x] : func:r16_11, this:r16_5 +# 16| mu16_13(unknown) = ^CallSideEffect : ~m? +# 16| v16_14(void) = ^IndirectReadSideEffect[-1] : &:r16_5, ~m? +# 16| mu16_15(ClassWithDestructor2) = ^IndirectMayWriteSideEffect[-1] : &:r16_5 +# 16| v16_16(void) = Call[ClassWithConstructor] : func:r16_3, this:r16_1, 0:r16_4, 1:r16_12 +# 16| mu16_17(unknown) = ^CallSideEffect : ~m? +# 16| mu16_18(ClassWithConstructor) = ^IndirectMayWriteSideEffect[-1] : &:r16_1 +# 16| r16_19(glval) = CopyValue : r16_5 +# 16| r16_20(glval) = FunctionAddress[~ClassWithDestructor2] : +# 16| v16_21(void) = Call[~ClassWithDestructor2] : func:r16_20, this:r16_19 +# 16| mu16_22(unknown) = ^CallSideEffect : ~m? +# 16| v16_23(void) = ^IndirectReadSideEffect[-1] : &:r16_19, ~m? +# 16| mu16_24(ClassWithDestructor2) = ^IndirectMayWriteSideEffect[-1] : &:r16_19 +# 17| r17_1(glval) = VariableAddress[#return] : +# 17| r17_2(glval) = VariableAddress[#temp17:12] : +# 17| mu17_3(ClassWithDestructor2) = Uninitialized[#temp17:12] : &:r17_2 +# 17| r17_4(glval) = FunctionAddress[ClassWithDestructor2] : +# 17| v17_5(void) = Call[ClassWithDestructor2] : func:r17_4, this:r17_2 +# 17| mu17_6(unknown) = ^CallSideEffect : ~m? +# 17| mu17_7(ClassWithDestructor2) = ^IndirectMayWriteSideEffect[-1] : &:r17_2 +# 17| r17_8(glval) = FunctionAddress[get_x] : +# 17| r17_9(char) = Call[get_x] : func:r17_8, this:r17_2 +# 17| mu17_10(unknown) = ^CallSideEffect : ~m? +# 17| v17_11(void) = ^IndirectReadSideEffect[-1] : &:r17_2, ~m? +# 17| mu17_12(ClassWithDestructor2) = ^IndirectMayWriteSideEffect[-1] : &:r17_2 +# 17| r17_13(glval) = CopyValue : r17_2 +# 17| r17_14(glval) = FunctionAddress[~ClassWithDestructor2] : +# 17| v17_15(void) = Call[~ClassWithDestructor2] : func:r17_14, this:r17_13 +# 17| mu17_16(unknown) = ^CallSideEffect : ~m? +# 17| v17_17(void) = ^IndirectReadSideEffect[-1] : &:r17_13, ~m? +# 17| mu17_18(ClassWithDestructor2) = ^IndirectMayWriteSideEffect[-1] : &:r17_13 +# 17| mu17_19(char) = Store[#return] : &:r17_1, r17_9 +# 18| r18_1(glval) = CopyValue : r16_5 +# 18| r18_2(glval) = FunctionAddress[~ClassWithDestructor2] : +# 18| v18_3(void) = Call[~ClassWithDestructor2] : func:r18_2, this:r18_1 +# 18| mu18_4(unknown) = ^CallSideEffect : ~m? +# 18| v18_5(void) = ^IndirectReadSideEffect[-1] : &:r18_1, ~m? +# 18| mu18_6(ClassWithDestructor2) = ^IndirectMayWriteSideEffect[-1] : &:r18_1 +# 14| r14_4(glval) = VariableAddress[#return] : +# 14| v14_5(void) = ReturnValue : &:r14_4, ~m? +# 14| v14_6(void) = AliasedUse : ~m? +# 14| v14_7(void) = ExitFunction : + +# 21| char temp_test2() +# 21| Block 0 +# 21| v21_1(void) = EnterFunction : +# 21| mu21_2(unknown) = AliasedDefinition : +# 21| mu21_3(unknown) = InitializeNonLocal : +# 22| r22_1(glval) = FunctionAddress[operator new] : +# 22| r22_2(unsigned long) = Constant[1] : +# 22| r22_3(void *) = Call[operator new] : func:r22_1, 0:r22_2 +# 22| mu22_4(unknown) = ^CallSideEffect : ~m? +# 22| mu22_5(unknown) = ^InitializeDynamicAllocation : &:r22_3 +# 22| r22_6(ClassWithDestructor2 *) = Convert : r22_3 +# 22| r22_7(glval) = FunctionAddress[ClassWithDestructor2] : +# 22| v22_8(void) = Call[ClassWithDestructor2] : func:r22_7, this:r22_6 +# 22| mu22_9(unknown) = ^CallSideEffect : ~m? +# 22| mu22_10(ClassWithDestructor2) = ^IndirectMayWriteSideEffect[-1] : &:r22_6 +# 23| r23_1(glval) = VariableAddress[#return] : +# 23| r23_2(glval) = VariableAddress[#temp23:12] : +# 23| mu23_3(ClassWithDestructor2) = Uninitialized[#temp23:12] : &:r23_2 +# 23| r23_4(glval) = FunctionAddress[ClassWithDestructor2] : +# 23| v23_5(void) = Call[ClassWithDestructor2] : func:r23_4, this:r23_2 +# 23| mu23_6(unknown) = ^CallSideEffect : ~m? +# 23| mu23_7(ClassWithDestructor2) = ^IndirectMayWriteSideEffect[-1] : &:r23_2 +# 23| r23_8(glval) = FunctionAddress[get_x] : +# 23| r23_9(char) = Call[get_x] : func:r23_8, this:r23_2 +# 23| mu23_10(unknown) = ^CallSideEffect : ~m? +# 23| v23_11(void) = ^IndirectReadSideEffect[-1] : &:r23_2, ~m? +# 23| mu23_12(ClassWithDestructor2) = ^IndirectMayWriteSideEffect[-1] : &:r23_2 +# 23| r23_13(int) = Convert : r23_9 +# 23| r23_14(glval) = VariableAddress[#temp23:45] : +# 23| mu23_15(ClassWithDestructor2) = Uninitialized[#temp23:45] : &:r23_14 +# 23| r23_16(glval) = FunctionAddress[ClassWithDestructor2] : +# 23| v23_17(void) = Call[ClassWithDestructor2] : func:r23_16, this:r23_14 +# 23| mu23_18(unknown) = ^CallSideEffect : ~m? +# 23| mu23_19(ClassWithDestructor2) = ^IndirectMayWriteSideEffect[-1] : &:r23_14 +# 23| r23_20(glval) = FunctionAddress[get_x] : +# 23| r23_21(char) = Call[get_x] : func:r23_20, this:r23_14 +# 23| mu23_22(unknown) = ^CallSideEffect : ~m? +# 23| v23_23(void) = ^IndirectReadSideEffect[-1] : &:r23_14, ~m? +# 23| mu23_24(ClassWithDestructor2) = ^IndirectMayWriteSideEffect[-1] : &:r23_14 +# 23| r23_25(int) = Convert : r23_21 +# 23| r23_26(int) = Add : r23_13, r23_25 +# 23| r23_27(glval) = CopyValue : r23_14 +# 23| r23_28(glval) = FunctionAddress[~ClassWithDestructor2] : +# 23| v23_29(void) = Call[~ClassWithDestructor2] : func:r23_28, this:r23_27 +# 23| mu23_30(unknown) = ^CallSideEffect : ~m? +# 23| v23_31(void) = ^IndirectReadSideEffect[-1] : &:r23_27, ~m? +# 23| mu23_32(ClassWithDestructor2) = ^IndirectMayWriteSideEffect[-1] : &:r23_27 +# 23| r23_33(glval) = CopyValue : r23_2 +# 23| r23_34(glval) = FunctionAddress[~ClassWithDestructor2] : +# 23| v23_35(void) = Call[~ClassWithDestructor2] : func:r23_34, this:r23_33 +# 23| mu23_36(unknown) = ^CallSideEffect : ~m? +# 23| v23_37(void) = ^IndirectReadSideEffect[-1] : &:r23_33, ~m? +# 23| mu23_38(ClassWithDestructor2) = ^IndirectMayWriteSideEffect[-1] : &:r23_33 +# 23| r23_39(char) = Convert : r23_26 +# 23| mu23_40(char) = Store[#return] : &:r23_1, r23_39 +# 21| r21_4(glval) = VariableAddress[#return] : +# 21| v21_5(void) = ReturnValue : &:r21_4, ~m? +# 21| v21_6(void) = AliasedUse : ~m? +# 21| v21_7(void) = ExitFunction : + +# 29| void temp_test3() +# 29| Block 0 +# 29| v29_1(void) = EnterFunction : +# 29| mu29_2(unknown) = AliasedDefinition : +# 29| mu29_3(unknown) = InitializeNonLocal : +# 30| r30_1(glval) = VariableAddress[rs] : +# 30| r30_2(glval) = VariableAddress[#temp30:38] : +# 30| r30_3(glval) = FunctionAddress[returnValue] : +# 30| r30_4(ClassWithDestructor2) = Call[returnValue] : func:r30_3 +# 30| mu30_5(unknown) = ^CallSideEffect : ~m? +# 30| mu30_6(ClassWithDestructor2) = Store[#temp30:38] : &:r30_2, r30_4 +# 30| r30_7(glval) = Convert : r30_2 +# 30| r30_8(ClassWithDestructor2 &) = CopyValue : r30_7 +# 30| mu30_9(ClassWithDestructor2 &) = Store[rs] : &:r30_1, r30_8 +# 31| v31_1(void) = NoOp : +# 31| r31_2(glval) = CopyValue : r30_2 +# 31| r31_3(glval) = FunctionAddress[~ClassWithDestructor2] : +# 31| v31_4(void) = Call[~ClassWithDestructor2] : func:r31_3, this:r31_2 +# 31| mu31_5(unknown) = ^CallSideEffect : ~m? +# 31| v31_6(void) = ^IndirectReadSideEffect[-1] : &:r31_2, ~m? +# 31| mu31_7(ClassWithDestructor2) = ^IndirectMayWriteSideEffect[-1] : &:r31_2 +# 29| v29_4(void) = ReturnVoid : +# 29| v29_5(void) = AliasedUse : ~m? +# 29| v29_6(void) = ExitFunction : + +# 33| void temp_test4() +# 33| Block 0 +# 33| v33_1(void) = EnterFunction : +# 33| mu33_2(unknown) = AliasedDefinition : +# 33| mu33_3(unknown) = InitializeNonLocal : +# 34| r34_1(glval) = VariableAddress[c] : +# 34| mu34_2(ClassWithDestructor2) = Uninitialized[c] : &:r34_1 +# 34| r34_3(glval) = FunctionAddress[ClassWithDestructor2] : +# 34| v34_4(void) = Call[ClassWithDestructor2] : func:r34_3, this:r34_1 +# 34| mu34_5(unknown) = ^CallSideEffect : ~m? +# 34| mu34_6(ClassWithDestructor2) = ^IndirectMayWriteSideEffect[-1] : &:r34_1 +# 35| r35_1(glval) = VariableAddress[rs2] : +# 35| r35_2(glval) = VariableAddress[#temp35:39] : +# 35| r35_3(glval) = FunctionAddress[returnValue] : +# 35| r35_4(ClassWithDestructor2) = Call[returnValue] : func:r35_3 +# 35| mu35_5(unknown) = ^CallSideEffect : ~m? +# 35| mu35_6(ClassWithDestructor2) = Store[#temp35:39] : &:r35_2, r35_4 +# 35| r35_7(glval) = Convert : r35_2 +# 35| r35_8(ClassWithDestructor2 &) = CopyValue : r35_7 +# 35| mu35_9(ClassWithDestructor2 &) = Store[rs2] : &:r35_1, r35_8 +# 36| v36_1(void) = NoOp : +# 36| r36_2(glval) = CopyValue : r35_2 +# 36| r36_3(glval) = FunctionAddress[~ClassWithDestructor2] : +# 36| v36_4(void) = Call[~ClassWithDestructor2] : func:r36_3, this:r36_2 +# 36| mu36_5(unknown) = ^CallSideEffect : ~m? +# 36| v36_6(void) = ^IndirectReadSideEffect[-1] : &:r36_2, ~m? +# 36| mu36_7(ClassWithDestructor2) = ^IndirectMayWriteSideEffect[-1] : &:r36_2 +# 36| r36_8(glval) = VariableAddress[c] : +# 36| r36_9(glval) = FunctionAddress[~ClassWithDestructor2] : +# 36| v36_10(void) = Call[~ClassWithDestructor2] : func:r36_9, this:r36_8 +# 36| mu36_11(unknown) = ^CallSideEffect : ~m? +# 36| v36_12(void) = ^IndirectReadSideEffect[-1] : &:r36_8, ~m? +# 36| mu36_13(ClassWithDestructor2) = ^IndirectMayWriteSideEffect[-1] : &:r36_8 +# 33| v33_4(void) = ReturnVoid : +# 33| v33_5(void) = AliasedUse : ~m? +# 33| v33_6(void) = ExitFunction : + +# 38| void temp_test5(bool) +# 38| Block 0 +# 38| v38_1(void) = EnterFunction : +# 38| mu38_2(unknown) = AliasedDefinition : +# 38| mu38_3(unknown) = InitializeNonLocal : +# 38| r38_4(glval) = VariableAddress[b] : +# 38| mu38_5(bool) = InitializeParameter[b] : &:r38_4 +# 39| r39_1(glval) = VariableAddress[#temp39:3] : +# 39| r39_2(glval) = VariableAddress[b] : +# 39| r39_3(bool) = Load[b] : &:r39_2, ~m? +# 39| v39_4(void) = ConditionalBranch : r39_3 +#-----| False -> Block 3 +#-----| True -> Block 2 + +# 39| Block 1 +# 39| r39_5(glval) = VariableAddress[#temp39:3] : +# 39| r39_6(ClassWithDestructor2) = Load[#temp39:3] : &:r39_5, ~m? +# 39| r39_7(glval) = CopyValue : r39_1 +# 39| r39_8(glval) = FunctionAddress[~ClassWithDestructor2] : +# 39| v39_9(void) = Call[~ClassWithDestructor2] : func:r39_8, this:r39_7 +# 39| mu39_10(unknown) = ^CallSideEffect : ~m? +# 39| v39_11(void) = ^IndirectReadSideEffect[-1] : &:r39_7, ~m? +# 39| mu39_12(ClassWithDestructor2) = ^IndirectMayWriteSideEffect[-1] : &:r39_7 +# 39| mu39_13(ClassWithDestructor2) = Store[#temp39:3] : &:r39_1, r39_6 +# 40| v40_1(void) = NoOp : +# 38| v38_6(void) = ReturnVoid : +# 38| v38_7(void) = AliasedUse : ~m? +# 38| v38_8(void) = ExitFunction : + +# 39| Block 2 +# 39| r39_14(glval) = VariableAddress[#temp39:7] : +# 39| mu39_15(ClassWithDestructor2) = Uninitialized[#temp39:7] : &:r39_14 +# 39| r39_16(glval) = FunctionAddress[ClassWithDestructor2] : +# 39| v39_17(void) = Call[ClassWithDestructor2] : func:r39_16, this:r39_14 +# 39| mu39_18(unknown) = ^CallSideEffect : ~m? +# 39| mu39_19(ClassWithDestructor2) = ^IndirectMayWriteSideEffect[-1] : &:r39_14 +# 39| r39_20(ClassWithDestructor2) = Load[#temp39:7] : &:r39_14, ~m? +# 39| r39_21(glval) = VariableAddress[#temp39:3] : +# 39| mu39_22(ClassWithDestructor2) = Store[#temp39:3] : &:r39_21, r39_20 +#-----| Goto -> Block 1 + +# 39| Block 3 +# 39| r39_23(glval) = VariableAddress[#temp39:32] : +# 39| mu39_24(ClassWithDestructor2) = Uninitialized[#temp39:32] : &:r39_23 +# 39| r39_25(glval) = FunctionAddress[ClassWithDestructor2] : +# 39| v39_26(void) = Call[ClassWithDestructor2] : func:r39_25, this:r39_23 +# 39| mu39_27(unknown) = ^CallSideEffect : ~m? +# 39| mu39_28(ClassWithDestructor2) = ^IndirectMayWriteSideEffect[-1] : &:r39_23 +# 39| r39_29(ClassWithDestructor2) = Load[#temp39:32] : &:r39_23, ~m? +# 39| r39_30(glval) = VariableAddress[#temp39:3] : +# 39| mu39_31(ClassWithDestructor2) = Store[#temp39:3] : &:r39_30, r39_29 +#-----| Goto -> Block 1 + +# 42| void temp_test6(bool) +# 42| Block 0 +# 42| v42_1(void) = EnterFunction : +# 42| mu42_2(unknown) = AliasedDefinition : +# 42| mu42_3(unknown) = InitializeNonLocal : +# 42| r42_4(glval) = VariableAddress[b] : +# 42| mu42_5(bool) = InitializeParameter[b] : &:r42_4 +# 43| r43_1(glval) = VariableAddress[b] : +# 43| r43_2(bool) = Load[b] : &:r43_1, ~m? +# 43| v43_3(void) = ConditionalBranch : r43_2 +#-----| False -> Block 3 +#-----| True -> Block 2 + +# 43| Block 1 +# 43| r43_4(glval) = VariableAddress[#temp43:3] : +# 43| r43_5(char) = Load[#temp43:3] : &:r43_4, ~m? + +# 43| Block 2 +# 43| r43_6(glval) = VariableAddress[#temp43:7] : +# 43| mu43_7(ClassWithDestructor2) = Uninitialized[#temp43:7] : &:r43_6 +# 43| r43_8(glval) = FunctionAddress[ClassWithDestructor2] : +# 43| v43_9(void) = Call[ClassWithDestructor2] : func:r43_8, this:r43_6 +# 43| mu43_10(unknown) = ^CallSideEffect : ~m? +# 43| mu43_11(ClassWithDestructor2) = ^IndirectMayWriteSideEffect[-1] : &:r43_6 +# 43| r43_12(glval) = FunctionAddress[get_x] : +# 43| r43_13(char) = Call[get_x] : func:r43_12, this:r43_6 +# 43| mu43_14(unknown) = ^CallSideEffect : ~m? +# 43| v43_15(void) = ^IndirectReadSideEffect[-1] : &:r43_6, ~m? +# 43| mu43_16(ClassWithDestructor2) = ^IndirectMayWriteSideEffect[-1] : &:r43_6 +# 43| r43_17(glval) = VariableAddress[#temp43:3] : +# 43| mu43_18(char) = Store[#temp43:3] : &:r43_17, r43_13 +#-----| Goto -> Block 1 + +# 43| Block 3 +# 43| r43_19(glval) = VariableAddress[#temp43:39] : +# 43| mu43_20(ClassWithDestructor2) = Uninitialized[#temp43:39] : &:r43_19 +# 43| r43_21(glval) = FunctionAddress[ClassWithDestructor2] : +# 43| v43_22(void) = Call[ClassWithDestructor2] : func:r43_21, this:r43_19 +# 43| mu43_23(unknown) = ^CallSideEffect : ~m? +# 43| mu43_24(ClassWithDestructor2) = ^IndirectMayWriteSideEffect[-1] : &:r43_19 +# 43| r43_25(glval) = FunctionAddress[get_x] : +# 43| r43_26(char) = Call[get_x] : func:r43_25, this:r43_19 +# 43| mu43_27(unknown) = ^CallSideEffect : ~m? +# 43| v43_28(void) = ^IndirectReadSideEffect[-1] : &:r43_19, ~m? +# 43| mu43_29(ClassWithDestructor2) = ^IndirectMayWriteSideEffect[-1] : &:r43_19 +# 43| r43_30(glval) = VariableAddress[#temp43:3] : +# 43| mu43_31(char) = Store[#temp43:3] : &:r43_30, r43_26 +#-----| Goto -> Block 1 + +# 44| Block 4 +# 44| v44_1(void) = NoOp : +# 42| v42_6(void) = ReturnVoid : +# 42| v42_7(void) = AliasedUse : ~m? +# 42| v42_8(void) = ExitFunction : + try_except.c: # 6| void f() # 6| Block 0 diff --git a/cpp/ql/test/library-tests/ir/ir/temp.cpp b/cpp/ql/test/library-tests/ir/ir/temp.cpp new file mode 100644 index 000000000000..54d21c3f7aef --- /dev/null +++ b/cpp/ql/test/library-tests/ir/ir/temp.cpp @@ -0,0 +1,44 @@ +class ClassWithDestructor2 { +public: + ClassWithDestructor2(); + ~ClassWithDestructor2(); + + char get_x(); +}; + +class ClassWithConstructor { +public: + ClassWithConstructor(char x, char y); +}; + +char temp_test() { + char x = ClassWithDestructor2().get_x(); + ClassWithConstructor y('a', ClassWithDestructor2().get_x()); + return ClassWithDestructor2().get_x(); +} + + +char temp_test2() { + new ClassWithDestructor2(); + return ClassWithDestructor2().get_x() + ClassWithDestructor2().get_x(); +} + +template +T returnValue(); + +void temp_test3() { + const ClassWithDestructor2& rs = returnValue(); +} + +void temp_test4() { + ClassWithDestructor2 c; + const ClassWithDestructor2& rs2 = returnValue(); +} + +void temp_test5(bool b) { + b ? ClassWithDestructor2() : ClassWithDestructor2(); +} + +void temp_test6(bool b) { + b ? ClassWithDestructor2().get_x(): ClassWithDestructor2().get_x(); +} \ No newline at end of file diff --git a/cpp/ql/test/library-tests/ir/ir/unaliased_ssa_consistency.expected b/cpp/ql/test/library-tests/ir/ir/unaliased_ssa_consistency.expected index b93c7d2649f8..5519fdbef090 100644 --- a/cpp/ql/test/library-tests/ir/ir/unaliased_ssa_consistency.expected +++ b/cpp/ql/test/library-tests/ir/ir/unaliased_ssa_consistency.expected @@ -6,6 +6,7 @@ missingOperandType duplicateChiOperand sideEffectWithoutPrimary instructionWithoutSuccessor +| temp.cpp:43:3:43:68 | Load: ... ? ... : ... | Instruction 'Load: ... ? ... : ...' has no successors in function '$@'. | temp.cpp:42:6:42:15 | void temp_test6(bool) | void temp_test6(bool) | ambiguousSuccessors unexplainedLoop unnecessaryPhiInstruction diff --git a/cpp/ql/test/library-tests/ir/ir/unaliased_ssa_consistency_unsound.expected b/cpp/ql/test/library-tests/ir/ir/unaliased_ssa_consistency_unsound.expected index b93c7d2649f8..5519fdbef090 100644 --- a/cpp/ql/test/library-tests/ir/ir/unaliased_ssa_consistency_unsound.expected +++ b/cpp/ql/test/library-tests/ir/ir/unaliased_ssa_consistency_unsound.expected @@ -6,6 +6,7 @@ missingOperandType duplicateChiOperand sideEffectWithoutPrimary instructionWithoutSuccessor +| temp.cpp:43:3:43:68 | Load: ... ? ... : ... | Instruction 'Load: ... ? ... : ...' has no successors in function '$@'. | temp.cpp:42:6:42:15 | void temp_test6(bool) | void temp_test6(bool) | ambiguousSuccessors unexplainedLoop unnecessaryPhiInstruction diff --git a/cpp/ql/test/library-tests/syntax-zoo/aliased_ssa_consistency.expected b/cpp/ql/test/library-tests/syntax-zoo/aliased_ssa_consistency.expected index b2b0a6bf736a..fc29d036aff3 100644 --- a/cpp/ql/test/library-tests/syntax-zoo/aliased_ssa_consistency.expected +++ b/cpp/ql/test/library-tests/syntax-zoo/aliased_ssa_consistency.expected @@ -1,4 +1,22 @@ missingOperand +| conditional_destructors.cpp:39:9:39:13 | IndirectMayWriteSideEffect: reuse of temporary object | Instruction 'IndirectMayWriteSideEffect' is missing an expected operand with tag 'Address' in function '$@'. | conditional_destructors.cpp:38:13:38:14 | void f2() | void f2() | +| conditional_destructors.cpp:39:9:39:13 | IndirectReadSideEffect: reuse of temporary object | Instruction 'IndirectReadSideEffect' is missing an expected operand with tag 'Address' in function '$@'. | conditional_destructors.cpp:38:13:38:14 | void f2() | void f2() | +| conditional_destructors.cpp:39:18:39:22 | IndirectMayWriteSideEffect: reuse of temporary object | Instruction 'IndirectMayWriteSideEffect' is missing an expected operand with tag 'Address' in function '$@'. | conditional_destructors.cpp:38:13:38:14 | void f2() | void f2() | +| conditional_destructors.cpp:39:18:39:22 | IndirectReadSideEffect: reuse of temporary object | Instruction 'IndirectReadSideEffect' is missing an expected operand with tag 'Address' in function '$@'. | conditional_destructors.cpp:38:13:38:14 | void f2() | void f2() | +| conditional_destructors.cpp:42:9:42:13 | IndirectMayWriteSideEffect: reuse of temporary object | Instruction 'IndirectMayWriteSideEffect' is missing an expected operand with tag 'Address' in function '$@'. | conditional_destructors.cpp:38:13:38:14 | void f2() | void f2() | +| conditional_destructors.cpp:42:9:42:13 | IndirectReadSideEffect: reuse of temporary object | Instruction 'IndirectReadSideEffect' is missing an expected operand with tag 'Address' in function '$@'. | conditional_destructors.cpp:38:13:38:14 | void f2() | void f2() | +| conditional_destructors.cpp:42:18:42:22 | IndirectMayWriteSideEffect: reuse of temporary object | Instruction 'IndirectMayWriteSideEffect' is missing an expected operand with tag 'Address' in function '$@'. | conditional_destructors.cpp:38:13:38:14 | void f2() | void f2() | +| conditional_destructors.cpp:42:18:42:22 | IndirectReadSideEffect: reuse of temporary object | Instruction 'IndirectReadSideEffect' is missing an expected operand with tag 'Address' in function '$@'. | conditional_destructors.cpp:38:13:38:14 | void f2() | void f2() | +| destructors.cpp:51:36:51:38 | IndirectMayWriteSideEffect: reuse of temporary object | Instruction 'IndirectMayWriteSideEffect' is missing an expected operand with tag 'Address' in function '$@'. | destructors.cpp:49:7:49:7 | int cond_destruct::f(int) | int cond_destruct::f(int) | +| destructors.cpp:51:36:51:38 | IndirectReadSideEffect: reuse of temporary object | Instruction 'IndirectReadSideEffect' is missing an expected operand with tag 'Address' in function '$@'. | destructors.cpp:49:7:49:7 | int cond_destruct::f(int) | int cond_destruct::f(int) | +| ir.cpp:811:7:811:13 | IndirectMayWriteSideEffect: reuse of temporary object | Instruction 'IndirectMayWriteSideEffect' is missing an expected operand with tag 'Address' in function '$@'. | ir.cpp:801:6:801:25 | void HierarchyConversions() | void HierarchyConversions() | +| ir.cpp:811:7:811:13 | IndirectReadSideEffect: reuse of temporary object | Instruction 'IndirectReadSideEffect' is missing an expected operand with tag 'Address' in function '$@'. | ir.cpp:801:6:801:25 | void HierarchyConversions() | void HierarchyConversions() | +| ir.cpp:812:7:812:26 | IndirectMayWriteSideEffect: reuse of temporary object | Instruction 'IndirectMayWriteSideEffect' is missing an expected operand with tag 'Address' in function '$@'. | ir.cpp:801:6:801:25 | void HierarchyConversions() | void HierarchyConversions() | +| ir.cpp:812:7:812:26 | IndirectReadSideEffect: reuse of temporary object | Instruction 'IndirectReadSideEffect' is missing an expected operand with tag 'Address' in function '$@'. | ir.cpp:801:6:801:25 | void HierarchyConversions() | void HierarchyConversions() | +| ir.cpp:825:7:825:13 | IndirectMayWriteSideEffect: reuse of temporary object | Instruction 'IndirectMayWriteSideEffect' is missing an expected operand with tag 'Address' in function '$@'. | ir.cpp:801:6:801:25 | void HierarchyConversions() | void HierarchyConversions() | +| ir.cpp:825:7:825:13 | IndirectReadSideEffect: reuse of temporary object | Instruction 'IndirectReadSideEffect' is missing an expected operand with tag 'Address' in function '$@'. | ir.cpp:801:6:801:25 | void HierarchyConversions() | void HierarchyConversions() | +| ir.cpp:826:7:826:26 | IndirectMayWriteSideEffect: reuse of temporary object | Instruction 'IndirectMayWriteSideEffect' is missing an expected operand with tag 'Address' in function '$@'. | ir.cpp:801:6:801:25 | void HierarchyConversions() | void HierarchyConversions() | +| ir.cpp:826:7:826:26 | IndirectReadSideEffect: reuse of temporary object | Instruction 'IndirectReadSideEffect' is missing an expected operand with tag 'Address' in function '$@'. | ir.cpp:801:6:801:25 | void HierarchyConversions() | void HierarchyConversions() | | misc.c:125:5:125:11 | CopyValue: (statement expression) | Instruction 'CopyValue' is missing an expected operand with tag 'Unary' in function '$@'. | misc.c:97:6:97:10 | void misc3() | void misc3() | unexpectedOperand duplicateOperand diff --git a/cpp/ql/test/library-tests/syntax-zoo/raw_consistency.expected b/cpp/ql/test/library-tests/syntax-zoo/raw_consistency.expected index a3dae8f8a36e..28d13e01f866 100644 --- a/cpp/ql/test/library-tests/syntax-zoo/raw_consistency.expected +++ b/cpp/ql/test/library-tests/syntax-zoo/raw_consistency.expected @@ -1,4 +1,22 @@ missingOperand +| conditional_destructors.cpp:39:9:39:13 | IndirectMayWriteSideEffect: reuse of temporary object | Instruction 'IndirectMayWriteSideEffect' is missing an expected operand with tag 'Address' in function '$@'. | conditional_destructors.cpp:38:13:38:14 | void f2() | void f2() | +| conditional_destructors.cpp:39:9:39:13 | IndirectReadSideEffect: reuse of temporary object | Instruction 'IndirectReadSideEffect' is missing an expected operand with tag 'Address' in function '$@'. | conditional_destructors.cpp:38:13:38:14 | void f2() | void f2() | +| conditional_destructors.cpp:39:18:39:22 | IndirectMayWriteSideEffect: reuse of temporary object | Instruction 'IndirectMayWriteSideEffect' is missing an expected operand with tag 'Address' in function '$@'. | conditional_destructors.cpp:38:13:38:14 | void f2() | void f2() | +| conditional_destructors.cpp:39:18:39:22 | IndirectReadSideEffect: reuse of temporary object | Instruction 'IndirectReadSideEffect' is missing an expected operand with tag 'Address' in function '$@'. | conditional_destructors.cpp:38:13:38:14 | void f2() | void f2() | +| conditional_destructors.cpp:42:9:42:13 | IndirectMayWriteSideEffect: reuse of temporary object | Instruction 'IndirectMayWriteSideEffect' is missing an expected operand with tag 'Address' in function '$@'. | conditional_destructors.cpp:38:13:38:14 | void f2() | void f2() | +| conditional_destructors.cpp:42:9:42:13 | IndirectReadSideEffect: reuse of temporary object | Instruction 'IndirectReadSideEffect' is missing an expected operand with tag 'Address' in function '$@'. | conditional_destructors.cpp:38:13:38:14 | void f2() | void f2() | +| conditional_destructors.cpp:42:18:42:22 | IndirectMayWriteSideEffect: reuse of temporary object | Instruction 'IndirectMayWriteSideEffect' is missing an expected operand with tag 'Address' in function '$@'. | conditional_destructors.cpp:38:13:38:14 | void f2() | void f2() | +| conditional_destructors.cpp:42:18:42:22 | IndirectReadSideEffect: reuse of temporary object | Instruction 'IndirectReadSideEffect' is missing an expected operand with tag 'Address' in function '$@'. | conditional_destructors.cpp:38:13:38:14 | void f2() | void f2() | +| destructors.cpp:51:36:51:38 | IndirectMayWriteSideEffect: reuse of temporary object | Instruction 'IndirectMayWriteSideEffect' is missing an expected operand with tag 'Address' in function '$@'. | destructors.cpp:49:7:49:7 | int cond_destruct::f(int) | int cond_destruct::f(int) | +| destructors.cpp:51:36:51:38 | IndirectReadSideEffect: reuse of temporary object | Instruction 'IndirectReadSideEffect' is missing an expected operand with tag 'Address' in function '$@'. | destructors.cpp:49:7:49:7 | int cond_destruct::f(int) | int cond_destruct::f(int) | +| ir.cpp:811:7:811:13 | IndirectMayWriteSideEffect: reuse of temporary object | Instruction 'IndirectMayWriteSideEffect' is missing an expected operand with tag 'Address' in function '$@'. | ir.cpp:801:6:801:25 | void HierarchyConversions() | void HierarchyConversions() | +| ir.cpp:811:7:811:13 | IndirectReadSideEffect: reuse of temporary object | Instruction 'IndirectReadSideEffect' is missing an expected operand with tag 'Address' in function '$@'. | ir.cpp:801:6:801:25 | void HierarchyConversions() | void HierarchyConversions() | +| ir.cpp:812:7:812:26 | IndirectMayWriteSideEffect: reuse of temporary object | Instruction 'IndirectMayWriteSideEffect' is missing an expected operand with tag 'Address' in function '$@'. | ir.cpp:801:6:801:25 | void HierarchyConversions() | void HierarchyConversions() | +| ir.cpp:812:7:812:26 | IndirectReadSideEffect: reuse of temporary object | Instruction 'IndirectReadSideEffect' is missing an expected operand with tag 'Address' in function '$@'. | ir.cpp:801:6:801:25 | void HierarchyConversions() | void HierarchyConversions() | +| ir.cpp:825:7:825:13 | IndirectMayWriteSideEffect: reuse of temporary object | Instruction 'IndirectMayWriteSideEffect' is missing an expected operand with tag 'Address' in function '$@'. | ir.cpp:801:6:801:25 | void HierarchyConversions() | void HierarchyConversions() | +| ir.cpp:825:7:825:13 | IndirectReadSideEffect: reuse of temporary object | Instruction 'IndirectReadSideEffect' is missing an expected operand with tag 'Address' in function '$@'. | ir.cpp:801:6:801:25 | void HierarchyConversions() | void HierarchyConversions() | +| ir.cpp:826:7:826:26 | IndirectMayWriteSideEffect: reuse of temporary object | Instruction 'IndirectMayWriteSideEffect' is missing an expected operand with tag 'Address' in function '$@'. | ir.cpp:801:6:801:25 | void HierarchyConversions() | void HierarchyConversions() | +| ir.cpp:826:7:826:26 | IndirectReadSideEffect: reuse of temporary object | Instruction 'IndirectReadSideEffect' is missing an expected operand with tag 'Address' in function '$@'. | ir.cpp:801:6:801:25 | void HierarchyConversions() | void HierarchyConversions() | | misc.c:125:5:125:11 | CopyValue: (statement expression) | Instruction 'CopyValue' is missing an expected operand with tag 'Unary' in function '$@'. | misc.c:97:6:97:10 | void misc3() | void misc3() | | try_catch.cpp:23:5:23:18 | CopyValue: (statement expression) | Instruction 'CopyValue' is missing an expected operand with tag 'Unary' in function '$@'. | try_catch.cpp:19:6:19:23 | void throw_from_nonstmt(int) | void throw_from_nonstmt(int) | unexpectedOperand diff --git a/cpp/ql/test/library-tests/syntax-zoo/unaliased_ssa_consistency.expected b/cpp/ql/test/library-tests/syntax-zoo/unaliased_ssa_consistency.expected index b2b0a6bf736a..fc29d036aff3 100644 --- a/cpp/ql/test/library-tests/syntax-zoo/unaliased_ssa_consistency.expected +++ b/cpp/ql/test/library-tests/syntax-zoo/unaliased_ssa_consistency.expected @@ -1,4 +1,22 @@ missingOperand +| conditional_destructors.cpp:39:9:39:13 | IndirectMayWriteSideEffect: reuse of temporary object | Instruction 'IndirectMayWriteSideEffect' is missing an expected operand with tag 'Address' in function '$@'. | conditional_destructors.cpp:38:13:38:14 | void f2() | void f2() | +| conditional_destructors.cpp:39:9:39:13 | IndirectReadSideEffect: reuse of temporary object | Instruction 'IndirectReadSideEffect' is missing an expected operand with tag 'Address' in function '$@'. | conditional_destructors.cpp:38:13:38:14 | void f2() | void f2() | +| conditional_destructors.cpp:39:18:39:22 | IndirectMayWriteSideEffect: reuse of temporary object | Instruction 'IndirectMayWriteSideEffect' is missing an expected operand with tag 'Address' in function '$@'. | conditional_destructors.cpp:38:13:38:14 | void f2() | void f2() | +| conditional_destructors.cpp:39:18:39:22 | IndirectReadSideEffect: reuse of temporary object | Instruction 'IndirectReadSideEffect' is missing an expected operand with tag 'Address' in function '$@'. | conditional_destructors.cpp:38:13:38:14 | void f2() | void f2() | +| conditional_destructors.cpp:42:9:42:13 | IndirectMayWriteSideEffect: reuse of temporary object | Instruction 'IndirectMayWriteSideEffect' is missing an expected operand with tag 'Address' in function '$@'. | conditional_destructors.cpp:38:13:38:14 | void f2() | void f2() | +| conditional_destructors.cpp:42:9:42:13 | IndirectReadSideEffect: reuse of temporary object | Instruction 'IndirectReadSideEffect' is missing an expected operand with tag 'Address' in function '$@'. | conditional_destructors.cpp:38:13:38:14 | void f2() | void f2() | +| conditional_destructors.cpp:42:18:42:22 | IndirectMayWriteSideEffect: reuse of temporary object | Instruction 'IndirectMayWriteSideEffect' is missing an expected operand with tag 'Address' in function '$@'. | conditional_destructors.cpp:38:13:38:14 | void f2() | void f2() | +| conditional_destructors.cpp:42:18:42:22 | IndirectReadSideEffect: reuse of temporary object | Instruction 'IndirectReadSideEffect' is missing an expected operand with tag 'Address' in function '$@'. | conditional_destructors.cpp:38:13:38:14 | void f2() | void f2() | +| destructors.cpp:51:36:51:38 | IndirectMayWriteSideEffect: reuse of temporary object | Instruction 'IndirectMayWriteSideEffect' is missing an expected operand with tag 'Address' in function '$@'. | destructors.cpp:49:7:49:7 | int cond_destruct::f(int) | int cond_destruct::f(int) | +| destructors.cpp:51:36:51:38 | IndirectReadSideEffect: reuse of temporary object | Instruction 'IndirectReadSideEffect' is missing an expected operand with tag 'Address' in function '$@'. | destructors.cpp:49:7:49:7 | int cond_destruct::f(int) | int cond_destruct::f(int) | +| ir.cpp:811:7:811:13 | IndirectMayWriteSideEffect: reuse of temporary object | Instruction 'IndirectMayWriteSideEffect' is missing an expected operand with tag 'Address' in function '$@'. | ir.cpp:801:6:801:25 | void HierarchyConversions() | void HierarchyConversions() | +| ir.cpp:811:7:811:13 | IndirectReadSideEffect: reuse of temporary object | Instruction 'IndirectReadSideEffect' is missing an expected operand with tag 'Address' in function '$@'. | ir.cpp:801:6:801:25 | void HierarchyConversions() | void HierarchyConversions() | +| ir.cpp:812:7:812:26 | IndirectMayWriteSideEffect: reuse of temporary object | Instruction 'IndirectMayWriteSideEffect' is missing an expected operand with tag 'Address' in function '$@'. | ir.cpp:801:6:801:25 | void HierarchyConversions() | void HierarchyConversions() | +| ir.cpp:812:7:812:26 | IndirectReadSideEffect: reuse of temporary object | Instruction 'IndirectReadSideEffect' is missing an expected operand with tag 'Address' in function '$@'. | ir.cpp:801:6:801:25 | void HierarchyConversions() | void HierarchyConversions() | +| ir.cpp:825:7:825:13 | IndirectMayWriteSideEffect: reuse of temporary object | Instruction 'IndirectMayWriteSideEffect' is missing an expected operand with tag 'Address' in function '$@'. | ir.cpp:801:6:801:25 | void HierarchyConversions() | void HierarchyConversions() | +| ir.cpp:825:7:825:13 | IndirectReadSideEffect: reuse of temporary object | Instruction 'IndirectReadSideEffect' is missing an expected operand with tag 'Address' in function '$@'. | ir.cpp:801:6:801:25 | void HierarchyConversions() | void HierarchyConversions() | +| ir.cpp:826:7:826:26 | IndirectMayWriteSideEffect: reuse of temporary object | Instruction 'IndirectMayWriteSideEffect' is missing an expected operand with tag 'Address' in function '$@'. | ir.cpp:801:6:801:25 | void HierarchyConversions() | void HierarchyConversions() | +| ir.cpp:826:7:826:26 | IndirectReadSideEffect: reuse of temporary object | Instruction 'IndirectReadSideEffect' is missing an expected operand with tag 'Address' in function '$@'. | ir.cpp:801:6:801:25 | void HierarchyConversions() | void HierarchyConversions() | | misc.c:125:5:125:11 | CopyValue: (statement expression) | Instruction 'CopyValue' is missing an expected operand with tag 'Unary' in function '$@'. | misc.c:97:6:97:10 | void misc3() | void misc3() | unexpectedOperand duplicateOperand diff --git a/cpp/ql/test/successor-tests/conditional_destructors/cfg.expected b/cpp/ql/test/successor-tests/conditional_destructors/cfg.expected index a47bcaf6fbf4..3f0e397a7c4d 100644 --- a/cpp/ql/test/successor-tests/conditional_destructors/cfg.expected +++ b/cpp/ql/test/successor-tests/conditional_destructors/cfg.expected @@ -1,175 +1,189 @@ -| C1::C1 | false | 237 | 237 | C1 | -| C1::C1 | false | 359 | 359 | C1 | -| C1::C1 | false | 363 | 363 | C1 | -| C1::C1 | false | 398 | 398 | ExprStmt | -| C1::C1 | false | 400 | 400 | this | -| C1::C1 | false | 401 | 401 | val | -| C1::C1 | false | 403 | 403 | x | -| C1::C1 | false | 405 | 405 | ... = ... | -| C1::C1 | false | 407 | 407 | return ... | -| C1::C1 | false | 409 | 409 | { ... } | -| C1::C1 | true | 398 | 403 | | -| C1::C1 | true | 400 | 401 | | -| C1::C1 | true | 401 | 405 | | -| C1::C1 | true | 403 | 400 | | -| C1::C1 | true | 405 | 407 | | -| C1::C1 | true | 407 | 237 | | -| C1::C1 | true | 409 | 398 | | -| C1::operator= | false | 348 | 348 | operator= | -| C1::operator= | false | 355 | 355 | operator= | -| C1::operator== | false | 226 | 226 | operator== | -| C1::operator== | false | 376 | 376 | return ... | -| C1::operator== | false | 378 | 378 | this | -| C1::operator== | false | 379 | 379 | val | -| C1::operator== | false | 382 | 382 | other | -| C1::operator== | false | 384 | 384 | (reference dereference) | -| C1::operator== | false | 385 | 385 | val | -| C1::operator== | false | 387 | 387 | ... == ... | -| C1::operator== | false | 389 | 389 | { ... } | -| C1::operator== | true | 376 | 378 | | -| C1::operator== | true | 378 | 379 | | -| C1::operator== | true | 379 | 382 | | -| C1::operator== | true | 382 | 385 | | -| C1::operator== | true | 385 | 387 | | -| C1::operator== | true | 387 | 226 | | -| C1::operator== | true | 389 | 376 | | -| C2::C2 | false | 170 | 170 | C2 | -| C2::C2 | false | 288 | 288 | C2 | -| C2::C2 | false | 334 | 334 | ExprStmt | -| C2::C2 | false | 336 | 336 | this | -| C2::C2 | false | 337 | 337 | val | -| C2::C2 | false | 339 | 339 | x | -| C2::C2 | false | 341 | 341 | ... = ... | -| C2::C2 | false | 343 | 343 | return ... | -| C2::C2 | false | 345 | 345 | { ... } | -| C2::C2 | true | 334 | 339 | | -| C2::C2 | true | 336 | 337 | | -| C2::C2 | true | 337 | 341 | | -| C2::C2 | true | 339 | 336 | | -| C2::C2 | true | 341 | 343 | | -| C2::C2 | true | 343 | 170 | | -| C2::C2 | true | 345 | 334 | | -| C2::operator= | false | 282 | 282 | operator= | -| C2::operator== | false | 159 | 159 | operator== | -| C2::operator== | false | 301 | 301 | return ... | -| C2::operator== | false | 303 | 303 | this | -| C2::operator== | false | 304 | 304 | val | -| C2::operator== | false | 307 | 307 | other | -| C2::operator== | false | 309 | 309 | (reference dereference) | -| C2::operator== | false | 310 | 310 | val | -| C2::operator== | false | 312 | 312 | ... == ... | -| C2::operator== | false | 314 | 314 | { ... } | -| C2::operator== | true | 301 | 303 | | -| C2::operator== | true | 303 | 304 | | -| C2::operator== | true | 304 | 307 | | -| C2::operator== | true | 307 | 310 | | -| C2::operator== | true | 310 | 312 | | -| C2::operator== | true | 312 | 159 | | -| C2::operator== | true | 314 | 301 | | -| C2::~C2 | false | 316 | 316 | ~C2 | -| C2::~C2 | false | 321 | 321 | ; | -| C2::~C2 | false | 323 | 323 | return ... | -| C2::~C2 | false | 325 | 325 | { ... } | -| C2::~C2 | true | 321 | 323 | | -| C2::~C2 | true | 323 | 316 | | -| C2::~C2 | true | 325 | 321 | | -| __va_list_tag::operator= | false | 57 | 57 | operator= | -| __va_list_tag::operator= | false | 63 | 63 | operator= | -| f1 | false | 215 | 215 | f1 | -| f1 | false | 220 | 220 | if (...) ... | -| f1 | false | 234 | 234 | call to operator== | -| f1 | false | 235 | 235 | call to C1 | -| f1 | false | 240 | 240 | 1 | -| f1 | false | 241 | 241 | temporary object | -| f1 | false | 242 | 242 | (const C1)... | -| f1 | false | 243 | 243 | call to C1 | -| f1 | false | 247 | 247 | 2 | -| f1 | false | 248 | 248 | temporary object | -| f1 | false | 249 | 249 | (const C1)... | -| f1 | false | 250 | 250 | (reference to) | -| f1 | false | 251 | 251 | ; | -| f1 | false | 253 | 253 | { ... } | -| f1 | false | 255 | 255 | if (...) ... | -| f1 | false | 258 | 258 | call to operator== | -| f1 | false | 259 | 259 | call to C1 | -| f1 | false | 263 | 263 | 3 | -| f1 | false | 264 | 264 | temporary object | -| f1 | false | 265 | 265 | (const C1)... | -| f1 | false | 266 | 266 | call to C1 | -| f1 | false | 270 | 270 | 3 | -| f1 | false | 271 | 271 | temporary object | -| f1 | false | 272 | 272 | (const C1)... | -| f1 | false | 273 | 273 | (reference to) | -| f1 | false | 274 | 274 | ; | -| f1 | false | 276 | 276 | { ... } | -| f1 | false | 278 | 278 | return ... | -| f1 | false | 280 | 280 | { ... } | -| f1 | true | 220 | 247 | | -| f1 | true | 234 | 253 | T | -| f1 | true | 234 | 255 | F | -| f1 | true | 235 | 234 | | -| f1 | true | 240 | 235 | | -| f1 | true | 243 | 240 | | -| f1 | true | 247 | 243 | | -| f1 | true | 251 | 255 | | -| f1 | true | 253 | 251 | | -| f1 | true | 255 | 270 | | -| f1 | true | 258 | 276 | T | -| f1 | true | 258 | 278 | F | -| f1 | true | 259 | 258 | | -| f1 | true | 263 | 259 | | -| f1 | true | 266 | 263 | | -| f1 | true | 270 | 266 | | -| f1 | true | 274 | 278 | | -| f1 | true | 276 | 274 | | -| f1 | true | 278 | 215 | | -| f1 | true | 280 | 220 | | -| f2 | false | 148 | 148 | f2 | -| f2 | false | 153 | 153 | if (...) ... | -| f2 | false | 167 | 167 | call to operator== | -| f2 | false | 168 | 168 | call to C2 | -| f2 | false | 173 | 173 | 1 | -| f2 | false | 174 | 174 | temporary object | -| f2 | false | 175 | 175 | (const C2)... | -| f2 | false | 176 | 176 | call to C2 | -| f2 | false | 180 | 180 | 2 | -| f2 | false | 181 | 181 | temporary object | -| f2 | false | 182 | 182 | (const C2)... | -| f2 | false | 183 | 183 | (reference to) | -| f2 | false | 184 | 184 | ; | -| f2 | false | 186 | 186 | { ... } | -| f2 | false | 188 | 188 | if (...) ... | -| f2 | false | 191 | 191 | call to operator== | -| f2 | false | 192 | 192 | call to C2 | -| f2 | false | 196 | 196 | 3 | -| f2 | false | 197 | 197 | temporary object | +| C1::C1 | false | 305 | 305 | C1 | +| C1::C1 | false | 473 | 473 | C1 | +| C1::C1 | false | 477 | 477 | C1 | +| C1::C1 | false | 521 | 521 | ExprStmt | +| C1::C1 | false | 524 | 524 | this | +| C1::C1 | false | 526 | 526 | val | +| C1::C1 | false | 529 | 529 | x | +| C1::C1 | false | 532 | 532 | ... = ... | +| C1::C1 | false | 535 | 535 | return ... | +| C1::C1 | false | 538 | 538 | { ... } | +| C1::C1 | true | 521 | 529 | | +| C1::C1 | true | 524 | 526 | | +| C1::C1 | true | 526 | 532 | | +| C1::C1 | true | 529 | 524 | | +| C1::C1 | true | 532 | 535 | | +| C1::C1 | true | 535 | 305 | | +| C1::C1 | true | 538 | 521 | | +| C1::operator= | false | 462 | 462 | operator= | +| C1::operator= | false | 469 | 469 | operator= | +| C1::operator== | false | 292 | 292 | operator== | +| C1::operator== | false | 491 | 491 | return ... | +| C1::operator== | false | 494 | 494 | this | +| C1::operator== | false | 496 | 496 | val | +| C1::operator== | false | 500 | 500 | other | +| C1::operator== | false | 503 | 503 | (reference dereference) | +| C1::operator== | false | 505 | 505 | val | +| C1::operator== | false | 508 | 508 | ... == ... | +| C1::operator== | false | 511 | 511 | { ... } | +| C1::operator== | true | 491 | 494 | | +| C1::operator== | true | 494 | 496 | | +| C1::operator== | true | 496 | 500 | | +| C1::operator== | true | 500 | 505 | | +| C1::operator== | true | 505 | 508 | | +| C1::operator== | true | 508 | 292 | | +| C1::operator== | true | 511 | 491 | | +| C2::C2 | false | 189 | 189 | C2 | +| C2::C2 | false | 385 | 385 | C2 | +| C2::C2 | false | 442 | 442 | ExprStmt | +| C2::C2 | false | 445 | 445 | this | +| C2::C2 | false | 447 | 447 | val | +| C2::C2 | false | 450 | 450 | x | +| C2::C2 | false | 453 | 453 | ... = ... | +| C2::C2 | false | 456 | 456 | return ... | +| C2::C2 | false | 459 | 459 | { ... } | +| C2::C2 | true | 442 | 450 | | +| C2::C2 | true | 445 | 447 | | +| C2::C2 | true | 447 | 453 | | +| C2::C2 | true | 450 | 445 | | +| C2::C2 | true | 453 | 456 | | +| C2::C2 | true | 456 | 189 | | +| C2::C2 | true | 459 | 442 | | +| C2::operator= | false | 379 | 379 | operator= | +| C2::operator== | false | 176 | 176 | operator== | +| C2::operator== | false | 399 | 399 | return ... | +| C2::operator== | false | 402 | 402 | this | +| C2::operator== | false | 404 | 404 | val | +| C2::operator== | false | 408 | 408 | other | +| C2::operator== | false | 411 | 411 | (reference dereference) | +| C2::operator== | false | 413 | 413 | val | +| C2::operator== | false | 416 | 416 | ... == ... | +| C2::operator== | false | 419 | 419 | { ... } | +| C2::operator== | true | 399 | 402 | | +| C2::operator== | true | 402 | 404 | | +| C2::operator== | true | 404 | 408 | | +| C2::operator== | true | 408 | 413 | | +| C2::operator== | true | 413 | 416 | | +| C2::operator== | true | 416 | 176 | | +| C2::operator== | true | 419 | 399 | | +| C2::~C2 | false | 265 | 265 | ~C2 | +| C2::~C2 | false | 426 | 426 | ; | +| C2::~C2 | false | 429 | 429 | return ... | +| C2::~C2 | false | 432 | 432 | { ... } | +| C2::~C2 | true | 426 | 429 | | +| C2::~C2 | true | 429 | 265 | | +| C2::~C2 | true | 432 | 426 | | +| __va_list_tag::operator= | false | 66 | 66 | operator= | +| __va_list_tag::operator= | false | 72 | 72 | operator= | +| f1 | false | 280 | 280 | f1 | +| f1 | false | 286 | 286 | if (...) ... | +| f1 | false | 301 | 301 | call to operator== | +| f1 | false | 303 | 303 | call to C1 | +| f1 | false | 310 | 310 | 1 | +| f1 | false | 312 | 312 | temporary object | +| f1 | false | 314 | 314 | (const C1)... | +| f1 | false | 316 | 316 | call to C1 | +| f1 | false | 322 | 322 | 2 | +| f1 | false | 324 | 324 | temporary object | +| f1 | false | 326 | 326 | (const C1)... | +| f1 | false | 328 | 328 | (reference to) | +| f1 | false | 330 | 330 | ; | +| f1 | false | 333 | 333 | { ... } | +| f1 | false | 336 | 336 | if (...) ... | +| f1 | false | 340 | 340 | call to operator== | +| f1 | false | 342 | 342 | call to C1 | +| f1 | false | 348 | 348 | 3 | +| f1 | false | 350 | 350 | temporary object | +| f1 | false | 352 | 352 | (const C1)... | +| f1 | false | 354 | 354 | call to C1 | +| f1 | false | 360 | 360 | 3 | +| f1 | false | 362 | 362 | temporary object | +| f1 | false | 364 | 364 | (const C1)... | +| f1 | false | 366 | 366 | (reference to) | +| f1 | false | 368 | 368 | ; | +| f1 | false | 371 | 371 | { ... } | +| f1 | false | 374 | 374 | return ... | +| f1 | false | 377 | 377 | { ... } | +| f1 | true | 286 | 322 | | +| f1 | true | 301 | 333 | T | +| f1 | true | 301 | 336 | F | +| f1 | true | 303 | 301 | | +| f1 | true | 310 | 303 | | +| f1 | true | 316 | 310 | | +| f1 | true | 322 | 316 | | +| f1 | true | 330 | 336 | | +| f1 | true | 333 | 330 | | +| f1 | true | 336 | 360 | | +| f1 | true | 340 | 371 | T | +| f1 | true | 340 | 374 | F | +| f1 | true | 342 | 340 | | +| f1 | true | 348 | 342 | | +| f1 | true | 354 | 348 | | +| f1 | true | 360 | 354 | | +| f1 | true | 368 | 374 | | +| f1 | true | 371 | 368 | | +| f1 | true | 374 | 280 | | +| f1 | true | 377 | 286 | | +| f2 | false | 164 | 164 | f2 | +| f2 | false | 170 | 170 | if (...) ... | +| f2 | false | 185 | 185 | call to operator== | +| f2 | false | 187 | 187 | call to C2 | +| f2 | false | 194 | 194 | 1 | +| f2 | false | 196 | 196 | temporary object | | f2 | false | 198 | 198 | (const C2)... | -| f2 | false | 199 | 199 | call to C2 | -| f2 | false | 203 | 203 | 3 | -| f2 | false | 204 | 204 | temporary object | -| f2 | false | 205 | 205 | (const C2)... | -| f2 | false | 206 | 206 | (reference to) | -| f2 | false | 207 | 207 | ; | -| f2 | false | 209 | 209 | { ... } | -| f2 | false | 211 | 211 | return ... | -| f2 | false | 213 | 213 | { ... } | -| f2 | true | 153 | 180 | | -| f2 | true | 167 | 186 | T | -| f2 | true | 167 | 188 | F | -| f2 | true | 168 | 167 | | -| f2 | true | 173 | 168 | | -| f2 | true | 176 | 173 | | -| f2 | true | 180 | 176 | | -| f2 | true | 184 | 188 | | -| f2 | true | 186 | 184 | | -| f2 | true | 188 | 203 | | -| f2 | true | 191 | 209 | T | -| f2 | true | 191 | 211 | F | -| f2 | true | 192 | 191 | | -| f2 | true | 196 | 192 | | -| f2 | true | 199 | 196 | | -| f2 | true | 203 | 199 | | -| f2 | true | 207 | 211 | | -| f2 | true | 209 | 207 | | -| f2 | true | 211 | 148 | | -| f2 | true | 213 | 153 | | +| f2 | false | 200 | 200 | call to C2 | +| f2 | false | 206 | 206 | 2 | +| f2 | false | 208 | 208 | temporary object | +| f2 | false | 210 | 210 | (const C2)... | +| f2 | false | 212 | 212 | (reference to) | +| f2 | false | 214 | 214 | ; | +| f2 | false | 217 | 217 | { ... } | +| f2 | false | 220 | 220 | if (...) ... | +| f2 | false | 224 | 224 | call to operator== | +| f2 | false | 226 | 226 | call to C2 | +| f2 | false | 232 | 232 | 3 | +| f2 | false | 234 | 234 | temporary object | +| f2 | false | 236 | 236 | (const C2)... | +| f2 | false | 238 | 238 | call to C2 | +| f2 | false | 244 | 244 | 3 | +| f2 | false | 246 | 246 | temporary object | +| f2 | false | 248 | 248 | (const C2)... | +| f2 | false | 250 | 250 | (reference to) | +| f2 | false | 252 | 252 | ; | +| f2 | false | 255 | 255 | { ... } | +| f2 | false | 258 | 258 | return ... | +| f2 | false | 261 | 261 | { ... } | +| f2 | false | 264 | 264 | call to ~C2 | +| f2 | false | 267 | 267 | reuse of temporary object | +| f2 | false | 269 | 269 | call to ~C2 | +| f2 | false | 271 | 271 | reuse of temporary object | +| f2 | false | 273 | 273 | call to ~C2 | +| f2 | false | 275 | 275 | reuse of temporary object | +| f2 | false | 277 | 277 | call to ~C2 | +| f2 | false | 279 | 279 | reuse of temporary object | +| f2 | true | 170 | 206 | | +| f2 | true | 185 | 217 | T | +| f2 | true | 185 | 220 | F | +| f2 | true | 187 | 185 | | +| f2 | true | 194 | 187 | | +| f2 | true | 200 | 194 | | +| f2 | true | 206 | 200 | | +| f2 | true | 214 | 220 | | +| f2 | true | 217 | 214 | | +| f2 | true | 220 | 244 | | +| f2 | true | 224 | 255 | T | +| f2 | true | 224 | 258 | F | +| f2 | true | 226 | 224 | | +| f2 | true | 232 | 226 | | +| f2 | true | 238 | 232 | | +| f2 | true | 244 | 238 | | +| f2 | true | 252 | 258 | | +| f2 | true | 255 | 252 | | +| f2 | true | 258 | 164 | | +| f2 | true | 261 | 170 | | +| f2 | true | 267 | 264 | | +| f2 | true | 269 | 267 | | +| f2 | true | 271 | 269 | | +| f2 | true | 275 | 273 | | +| f2 | true | 277 | 275 | | +| f2 | true | 279 | 277 | |