Skip to content

Commit 4d76fd1

Browse files
committed
C++: Handle block assignments in the IR
1 parent 5c905b7 commit 4d76fd1

File tree

8 files changed

+127
-45
lines changed

8 files changed

+127
-45
lines changed

cpp/ql/lib/semmle/code/cpp/ir/implementation/raw/internal/TranslatedExpr.qll

Lines changed: 69 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1491,6 +1491,75 @@ class TranslatedAssignExpr extends TranslatedNonConstantExpr {
14911491
}
14921492
}
14931493

1494+
class TranslatedBlockAssignExpr extends TranslatedNonConstantExpr {
1495+
override BlockAssignExpr expr;
1496+
1497+
final override TranslatedElement getChild(int id) {
1498+
id = 0 and result = this.getLeftOperand()
1499+
or
1500+
id = 1 and result = this.getRightOperand()
1501+
}
1502+
1503+
final override Instruction getFirstInstruction() {
1504+
// The operand evaluation order should since block assignments behave like memcpy.
1505+
result = this.getLeftOperand().getFirstInstruction()
1506+
}
1507+
1508+
final override Instruction getResult() { result = this.getInstruction(AssignmentStoreTag()) }
1509+
1510+
final TranslatedExpr getLeftOperand() {
1511+
result = getTranslatedExpr(expr.getLValue().getFullyConverted())
1512+
}
1513+
1514+
final TranslatedExpr getRightOperand() {
1515+
result = getTranslatedExpr(expr.getRValue().getFullyConverted())
1516+
}
1517+
1518+
override Instruction getInstructionSuccessor(InstructionTag tag, EdgeKind kind) {
1519+
tag = LoadTag() and
1520+
result = this.getInstruction(AssignmentStoreTag()) and
1521+
kind instanceof GotoEdge
1522+
or
1523+
tag = AssignmentStoreTag() and
1524+
result = this.getParent().getChildSuccessor(this) and
1525+
kind instanceof GotoEdge
1526+
}
1527+
1528+
override Instruction getChildSuccessor(TranslatedElement child) {
1529+
child = this.getLeftOperand() and
1530+
result = this.getRightOperand().getFirstInstruction()
1531+
or
1532+
child = this.getRightOperand() and
1533+
result = this.getInstruction(LoadTag())
1534+
}
1535+
1536+
override predicate hasInstruction(Opcode opcode, InstructionTag tag, CppType resultType) {
1537+
tag = LoadTag() and
1538+
opcode instanceof Opcode::Load and
1539+
resultType = getTypeForPRValue(expr.getRValue().getType())
1540+
or
1541+
tag = AssignmentStoreTag() and
1542+
opcode instanceof Opcode::Store and
1543+
// The frontend specifies that the relevant type is the one of the source.
1544+
resultType = getTypeForPRValue(expr.getRValue().getType())
1545+
}
1546+
1547+
override Instruction getInstructionRegisterOperand(InstructionTag tag, OperandTag operandTag) {
1548+
tag = LoadTag() and
1549+
operandTag instanceof AddressOperandTag and
1550+
result = this.getRightOperand().getResult()
1551+
or
1552+
tag = AssignmentStoreTag() and
1553+
(
1554+
operandTag instanceof AddressOperandTag and
1555+
result = this.getLeftOperand().getResult()
1556+
or
1557+
operandTag instanceof StoreValueOperandTag and
1558+
result = this.getInstruction(LoadTag())
1559+
)
1560+
}
1561+
}
1562+
14941563
class TranslatedAssignOperation extends TranslatedNonConstantExpr {
14951564
override AssignOperation expr;
14961565

cpp/ql/test/library-tests/ir/ir/aliased_ssa_consistency.expected

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,6 @@ missingOperandType
66
duplicateChiOperand
77
sideEffectWithoutPrimary
88
instructionWithoutSuccessor
9-
| file://:0:0:0:0 | InitializeIndirection: (unnamed parameter 0) | Instruction 'InitializeIndirection: (unnamed parameter 0)' has no successors in function '$@'. | ir.cpp:1834:11:1834:11 | block_assignment::A& block_assignment::A::operator=(block_assignment::A&&) | block_assignment::A& block_assignment::A::operator=(block_assignment::A&&) |
109
ambiguousSuccessors
1110
unexplainedLoop
1211
unnecessaryPhiInstruction

cpp/ql/test/library-tests/ir/ir/aliased_ssa_consistency_unsound.expected

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,6 @@ missingOperandType
66
duplicateChiOperand
77
sideEffectWithoutPrimary
88
instructionWithoutSuccessor
9-
| file://:0:0:0:0 | InitializeIndirection: (unnamed parameter 0) | Instruction 'InitializeIndirection: (unnamed parameter 0)' has no successors in function '$@'. | ir.cpp:1834:11:1834:11 | block_assignment::A& block_assignment::A::operator=(block_assignment::A&&) | block_assignment::A& block_assignment::A::operator=(block_assignment::A&&) |
109
ambiguousSuccessors
1110
unexplainedLoop
1211
unnecessaryPhiInstruction

cpp/ql/test/library-tests/ir/ir/operand_locations.expected

Lines changed: 26 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -701,6 +701,8 @@
701701
| file://:0:0:0:0 | Address | &:r0_3 |
702702
| file://:0:0:0:0 | Address | &:r0_3 |
703703
| file://:0:0:0:0 | Address | &:r0_3 |
704+
| file://:0:0:0:0 | Address | &:r0_3 |
705+
| file://:0:0:0:0 | Address | &:r0_5 |
704706
| file://:0:0:0:0 | Address | &:r0_5 |
705707
| file://:0:0:0:0 | Address | &:r0_5 |
706708
| file://:0:0:0:0 | Address | &:r0_5 |
@@ -711,6 +713,8 @@
711713
| file://:0:0:0:0 | Address | &:r0_5 |
712714
| file://:0:0:0:0 | Address | &:r0_6 |
713715
| file://:0:0:0:0 | Address | &:r0_7 |
716+
| file://:0:0:0:0 | Address | &:r0_7 |
717+
| file://:0:0:0:0 | Address | &:r0_8 |
714718
| file://:0:0:0:0 | Address | &:r0_8 |
715719
| file://:0:0:0:0 | Address | &:r0_8 |
716720
| file://:0:0:0:0 | Address | &:r0_8 |
@@ -722,10 +726,13 @@
722726
| file://:0:0:0:0 | Address | &:r0_10 |
723727
| file://:0:0:0:0 | Address | &:r0_11 |
724728
| file://:0:0:0:0 | Address | &:r0_11 |
729+
| file://:0:0:0:0 | Address | &:r0_11 |
725730
| file://:0:0:0:0 | Address | &:r0_13 |
726731
| file://:0:0:0:0 | Address | &:r0_15 |
727732
| file://:0:0:0:0 | Address | &:r0_15 |
728733
| file://:0:0:0:0 | Address | &:r0_15 |
734+
| file://:0:0:0:0 | Address | &:r0_15 |
735+
| file://:0:0:0:0 | Address | &:r0_16 |
729736
| file://:0:0:0:0 | Address | &:r0_16 |
730737
| file://:0:0:0:0 | Address | &:r0_17 |
731738
| file://:0:0:0:0 | Address | &:r0_18 |
@@ -750,6 +757,7 @@
750757
| file://:0:0:0:0 | ChiPartial | partial:m0_11 |
751758
| file://:0:0:0:0 | ChiPartial | partial:m0_11 |
752759
| file://:0:0:0:0 | ChiPartial | partial:m0_13 |
760+
| file://:0:0:0:0 | ChiPartial | partial:m0_13 |
753761
| file://:0:0:0:0 | ChiTotal | total:m0_3 |
754762
| file://:0:0:0:0 | ChiTotal | total:m0_4 |
755763
| file://:0:0:0:0 | ChiTotal | total:m0_4 |
@@ -760,6 +768,7 @@
760768
| file://:0:0:0:0 | ChiTotal | total:m1688_3 |
761769
| file://:0:0:0:0 | ChiTotal | total:m1716_8 |
762770
| file://:0:0:0:0 | ChiTotal | total:m1716_19 |
771+
| file://:0:0:0:0 | ChiTotal | total:m1834_8 |
763772
| file://:0:0:0:0 | ChiTotal | total:m1839_8 |
764773
| file://:0:0:0:0 | Left | r0_2 |
765774
| file://:0:0:0:0 | Left | r0_4 |
@@ -776,14 +785,18 @@
776785
| file://:0:0:0:0 | Load | m0_2 |
777786
| file://:0:0:0:0 | Load | m0_2 |
778787
| file://:0:0:0:0 | Load | m0_2 |
788+
| file://:0:0:0:0 | Load | m0_2 |
779789
| file://:0:0:0:0 | Load | m745_6 |
780790
| file://:0:0:0:0 | Load | m754_6 |
781791
| file://:0:0:0:0 | Load | m763_6 |
782792
| file://:0:0:0:0 | Load | m1466_4 |
783793
| file://:0:0:0:0 | Load | m1466_4 |
784794
| file://:0:0:0:0 | Load | m1685_9 |
785795
| file://:0:0:0:0 | Load | m1714_7 |
796+
| file://:0:0:0:0 | Load | m1834_6 |
797+
| file://:0:0:0:0 | Load | m1834_6 |
786798
| file://:0:0:0:0 | Load | m1839_6 |
799+
| file://:0:0:0:0 | Load | ~m0_4 |
787800
| file://:0:0:0:0 | Load | ~m1444_6 |
788801
| file://:0:0:0:0 | Load | ~m1712_10 |
789802
| file://:0:0:0:0 | Load | ~m1712_14 |
@@ -800,6 +813,7 @@
800813
| file://:0:0:0:0 | SideEffect | m0_4 |
801814
| file://:0:0:0:0 | SideEffect | m0_4 |
802815
| file://:0:0:0:0 | SideEffect | m0_4 |
816+
| file://:0:0:0:0 | SideEffect | m0_4 |
803817
| file://:0:0:0:0 | SideEffect | m0_14 |
804818
| file://:0:0:0:0 | SideEffect | m1078_23 |
805819
| file://:0:0:0:0 | SideEffect | m1078_23 |
@@ -834,8 +848,10 @@
834848
| file://:0:0:0:0 | StoreValue | r0_6 |
835849
| file://:0:0:0:0 | StoreValue | r0_7 |
836850
| file://:0:0:0:0 | StoreValue | r0_9 |
851+
| file://:0:0:0:0 | StoreValue | r0_12 |
837852
| file://:0:0:0:0 | StoreValue | r0_13 |
838853
| file://:0:0:0:0 | StoreValue | r0_13 |
854+
| file://:0:0:0:0 | StoreValue | r0_19 |
839855
| file://:0:0:0:0 | StoreValue | r0_20 |
840856
| file://:0:0:0:0 | StoreValue | r0_22 |
841857
| file://:0:0:0:0 | StoreValue | r0_22 |
@@ -850,19 +866,24 @@
850866
| file://:0:0:0:0 | Unary | r0_6 |
851867
| file://:0:0:0:0 | Unary | r0_6 |
852868
| file://:0:0:0:0 | Unary | r0_6 |
869+
| file://:0:0:0:0 | Unary | r0_6 |
853870
| file://:0:0:0:0 | Unary | r0_7 |
854871
| file://:0:0:0:0 | Unary | r0_7 |
855872
| file://:0:0:0:0 | Unary | r0_7 |
856873
| file://:0:0:0:0 | Unary | r0_7 |
857874
| file://:0:0:0:0 | Unary | r0_8 |
858875
| file://:0:0:0:0 | Unary | r0_9 |
859876
| file://:0:0:0:0 | Unary | r0_9 |
877+
| file://:0:0:0:0 | Unary | r0_9 |
878+
| file://:0:0:0:0 | Unary | r0_10 |
860879
| file://:0:0:0:0 | Unary | r0_10 |
861880
| file://:0:0:0:0 | Unary | r0_10 |
862881
| file://:0:0:0:0 | Unary | r0_11 |
863882
| file://:0:0:0:0 | Unary | r0_12 |
864883
| file://:0:0:0:0 | Unary | r0_14 |
865884
| file://:0:0:0:0 | Unary | r0_14 |
885+
| file://:0:0:0:0 | Unary | r0_17 |
886+
| file://:0:0:0:0 | Unary | r0_18 |
866887
| file://:0:0:0:0 | Unary | r0_18 |
867888
| file://:0:0:0:0 | Unary | r0_19 |
868889
| file://:0:0:0:0 | Unary | r0_20 |
@@ -8536,9 +8557,14 @@
85368557
| ir.cpp:1834:11:1834:11 | Address | &:r1834_5 |
85378558
| ir.cpp:1834:11:1834:11 | Address | &:r1834_5 |
85388559
| ir.cpp:1834:11:1834:11 | Address | &:r1834_7 |
8560+
| ir.cpp:1834:11:1834:11 | Address | &:r1834_7 |
8561+
| ir.cpp:1834:11:1834:11 | Address | &:r1834_10 |
85398562
| ir.cpp:1834:11:1834:11 | ChiPartial | partial:m1834_3 |
85408563
| ir.cpp:1834:11:1834:11 | ChiTotal | total:m1834_2 |
8564+
| ir.cpp:1834:11:1834:11 | Load | m0_20 |
85418565
| ir.cpp:1834:11:1834:11 | Load | m1834_6 |
8566+
| ir.cpp:1834:11:1834:11 | SideEffect | m0_14 |
8567+
| ir.cpp:1834:11:1834:11 | SideEffect | m1834_3 |
85428568
| ir.cpp:1839:12:1839:12 | Address | &:r1839_5 |
85438569
| ir.cpp:1839:12:1839:12 | Address | &:r1839_5 |
85448570
| ir.cpp:1839:12:1839:12 | Address | &:r1839_7 |

cpp/ql/test/library-tests/ir/ir/raw_consistency.expected

Lines changed: 0 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -7,9 +7,6 @@ duplicateChiOperand
77
sideEffectWithoutPrimary
88
instructionWithoutSuccessor
99
| ../../../include/memory.h:68:25:68:33 | CopyValue: (reference to) | Instruction 'CopyValue: (reference to)' has no successors in function '$@'. | ../../../include/memory.h:67:5:67:5 | void std::unique_ptr<int, std::default_delete<int>>::~unique_ptr() | void std::unique_ptr<int, std::default_delete<int>>::~unique_ptr() |
10-
| file://:0:0:0:0 | FieldAddress: e | Instruction 'FieldAddress: e' has no successors in function '$@'. | ir.cpp:1834:11:1834:11 | block_assignment::A& block_assignment::A::operator=(block_assignment::A&&) | block_assignment::A& block_assignment::A::operator=(block_assignment::A&&) |
11-
| file://:0:0:0:0 | FieldAddress: e | Instruction 'FieldAddress: e' has no successors in function '$@'. | ir.cpp:1834:11:1834:11 | block_assignment::A& block_assignment::A::operator=(block_assignment::A&&) | block_assignment::A& block_assignment::A::operator=(block_assignment::A&&) |
12-
| file://:0:0:0:0 | InitializeIndirection: (unnamed parameter 0) | Instruction 'InitializeIndirection: (unnamed parameter 0)' has no successors in function '$@'. | ir.cpp:1834:11:1834:11 | block_assignment::A& block_assignment::A::operator=(block_assignment::A&&) | block_assignment::A& block_assignment::A::operator=(block_assignment::A&&) |
1310
ambiguousSuccessors
1411
unexplainedLoop
1512
unnecessaryPhiInstruction
@@ -20,11 +17,9 @@ containsLoopOfForwardEdges
2017
lostReachability
2118
backEdgeCountMismatch
2219
useNotDominatedByDefinition
23-
| file://:0:0:0:0 | Address | Operand 'Address' is not dominated by its definition in function '$@'. | ir.cpp:1834:11:1834:11 | block_assignment::A& block_assignment::A::operator=(block_assignment::A&&) | block_assignment::A& block_assignment::A::operator=(block_assignment::A&&) |
2420
| ir.cpp:1486:8:1486:8 | Unary | Operand 'Unary' is not dominated by its definition in function '$@'. | ir.cpp:1486:8:1486:8 | void StructuredBindingDataMemberStruct::StructuredBindingDataMemberStruct() | void StructuredBindingDataMemberStruct::StructuredBindingDataMemberStruct() |
2521
| ir.cpp:1751:51:1751:51 | Address | Operand 'Address' is not dominated by its definition in function '$@'. | ir.cpp:1750:5:1750:34 | int implicit_copy_constructor_test(CopyConstructorTestNonVirtualClass const&, CopyConstructorTestVirtualClass const&) | int implicit_copy_constructor_test(CopyConstructorTestNonVirtualClass const&, CopyConstructorTestVirtualClass const&) |
2622
| ir.cpp:1752:48:1752:48 | Address | Operand 'Address' is not dominated by its definition in function '$@'. | ir.cpp:1750:5:1750:34 | int implicit_copy_constructor_test(CopyConstructorTestNonVirtualClass const&, CopyConstructorTestVirtualClass const&) | int implicit_copy_constructor_test(CopyConstructorTestNonVirtualClass const&, CopyConstructorTestVirtualClass const&) |
27-
| ir.cpp:1834:11:1834:11 | Address | Operand 'Address' is not dominated by its definition in function '$@'. | ir.cpp:1834:11:1834:11 | block_assignment::A& block_assignment::A::operator=(block_assignment::A&&) | block_assignment::A& block_assignment::A::operator=(block_assignment::A&&) |
2823
switchInstructionWithoutDefaultEdge
2924
notMarkedAsConflated
3025
wronglyMarkedAsConflated

cpp/ql/test/library-tests/ir/ir/raw_ir.expected

Lines changed: 32 additions & 36 deletions
Original file line numberDiff line numberDiff line change
@@ -9799,42 +9799,38 @@ ir.cpp:
97999799

98009800
# 1834| block_assignment::A& block_assignment::A::operator=(block_assignment::A&&)
98019801
# 1834| Block 0
9802-
# 1834| v1834_1(void) = EnterFunction :
9803-
# 1834| mu1834_2(unknown) = AliasedDefinition :
9804-
# 1834| mu1834_3(unknown) = InitializeNonLocal :
9805-
# 1834| r1834_4(glval<unknown>) = VariableAddress[#this] :
9806-
# 1834| mu1834_5(glval<A>) = InitializeParameter[#this] : &:r1834_4
9807-
# 1834| r1834_6(glval<A>) = Load[#this] : &:r1834_4, ~m?
9808-
# 1834| mu1834_7(A) = InitializeIndirection[#this] : &:r1834_6
9809-
#-----| r0_1(glval<A &&>) = VariableAddress[(unnamed parameter 0)] :
9810-
#-----| mu0_2(A &&) = InitializeParameter[(unnamed parameter 0)] : &:r0_1
9811-
#-----| r0_3(A &&) = Load[(unnamed parameter 0)] : &:r0_1, ~m?
9812-
#-----| mu0_4(unknown) = InitializeIndirection[(unnamed parameter 0)] : &:r0_3
9813-
9814-
#-----| Block 1
9815-
#-----| r0_5(glval<unknown>) = VariableAddress[#this] :
9816-
#-----| r0_6(A *) = Load[#this] : &:r0_5, ~m?
9817-
#-----| r0_7(glval<enum <unnamed>[1]>) = FieldAddress[e] : r0_6
9818-
9819-
#-----| Block 2
9820-
#-----| r0_8(glval<A &&>) = VariableAddress[(unnamed parameter 0)] :
9821-
#-----| r0_9(A &&) = Load[(unnamed parameter 0)] : &:r0_8, ~m?
9822-
#-----| r0_10(glval<A>) = CopyValue : r0_9
9823-
#-----| r0_11(glval<enum <unnamed>[1]>) = FieldAddress[e] : r0_10
9824-
9825-
#-----| Block 3
9826-
#-----| r0_12(glval<A &>) = VariableAddress[#return] :
9827-
#-----| r0_13(glval<unknown>) = VariableAddress[#this] :
9828-
#-----| r0_14(A *) = Load[#this] : &:r0_13, ~m?
9829-
#-----| r0_15(glval<A>) = CopyValue : r0_14
9830-
#-----| r0_16(A &) = CopyValue : r0_15
9831-
#-----| mu0_17(A &) = Store[#return] : &:r0_12, r0_16
9832-
# 1834| v1834_8(void) = ReturnIndirection[#this] : &:r1834_6, ~m?
9833-
#-----| v0_18(void) = ReturnIndirection[(unnamed parameter 0)] : &:r0_3, ~m?
9834-
# 1834| r1834_9(glval<A &>) = VariableAddress[#return] :
9835-
# 1834| v1834_10(void) = ReturnValue : &:r1834_9, ~m?
9836-
# 1834| v1834_11(void) = AliasedUse : ~m?
9837-
# 1834| v1834_12(void) = ExitFunction :
9802+
# 1834| v1834_1(void) = EnterFunction :
9803+
# 1834| mu1834_2(unknown) = AliasedDefinition :
9804+
# 1834| mu1834_3(unknown) = InitializeNonLocal :
9805+
# 1834| r1834_4(glval<unknown>) = VariableAddress[#this] :
9806+
# 1834| mu1834_5(glval<A>) = InitializeParameter[#this] : &:r1834_4
9807+
# 1834| r1834_6(glval<A>) = Load[#this] : &:r1834_4, ~m?
9808+
# 1834| mu1834_7(A) = InitializeIndirection[#this] : &:r1834_6
9809+
#-----| r0_1(glval<A &&>) = VariableAddress[(unnamed parameter 0)] :
9810+
#-----| mu0_2(A &&) = InitializeParameter[(unnamed parameter 0)] : &:r0_1
9811+
#-----| r0_3(A &&) = Load[(unnamed parameter 0)] : &:r0_1, ~m?
9812+
#-----| mu0_4(unknown) = InitializeIndirection[(unnamed parameter 0)] : &:r0_3
9813+
#-----| r0_5(glval<unknown>) = VariableAddress[#this] :
9814+
#-----| r0_6(A *) = Load[#this] : &:r0_5, ~m?
9815+
#-----| r0_7(glval<enum <unnamed>[1]>) = FieldAddress[e] : r0_6
9816+
#-----| r0_8(glval<A &&>) = VariableAddress[(unnamed parameter 0)] :
9817+
#-----| r0_9(A &&) = Load[(unnamed parameter 0)] : &:r0_8, ~m?
9818+
#-----| r0_10(glval<A>) = CopyValue : r0_9
9819+
#-----| r0_11(glval<enum <unnamed>[1]>) = FieldAddress[e] : r0_10
9820+
#-----| r0_12(enum <unnamed>[1]) = Load[?] : &:r0_11, ~m?
9821+
#-----| mu0_13(enum <unnamed>[1]) = Store[?] : &:r0_7, r0_12
9822+
#-----| r0_14(glval<A &>) = VariableAddress[#return] :
9823+
#-----| r0_15(glval<unknown>) = VariableAddress[#this] :
9824+
#-----| r0_16(A *) = Load[#this] : &:r0_15, ~m?
9825+
#-----| r0_17(glval<A>) = CopyValue : r0_16
9826+
#-----| r0_18(A &) = CopyValue : r0_17
9827+
#-----| mu0_19(A &) = Store[#return] : &:r0_14, r0_18
9828+
# 1834| v1834_8(void) = ReturnIndirection[#this] : &:r1834_6, ~m?
9829+
#-----| v0_20(void) = ReturnIndirection[(unnamed parameter 0)] : &:r0_3, ~m?
9830+
# 1834| r1834_9(glval<A &>) = VariableAddress[#return] :
9831+
# 1834| v1834_10(void) = ReturnValue : &:r1834_9, ~m?
9832+
# 1834| v1834_11(void) = AliasedUse : ~m?
9833+
# 1834| v1834_12(void) = ExitFunction :
98389834

98399835
# 1839| block_assignment::B& block_assignment::B::operator=(block_assignment::B&&)
98409836
# 1839| Block 0

cpp/ql/test/library-tests/ir/ir/unaliased_ssa_consistency.expected

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,6 @@ missingOperandType
66
duplicateChiOperand
77
sideEffectWithoutPrimary
88
instructionWithoutSuccessor
9-
| file://:0:0:0:0 | InitializeIndirection: (unnamed parameter 0) | Instruction 'InitializeIndirection: (unnamed parameter 0)' has no successors in function '$@'. | ir.cpp:1834:11:1834:11 | block_assignment::A& block_assignment::A::operator=(block_assignment::A&&) | block_assignment::A& block_assignment::A::operator=(block_assignment::A&&) |
109
ambiguousSuccessors
1110
unexplainedLoop
1211
unnecessaryPhiInstruction

cpp/ql/test/library-tests/ir/ir/unaliased_ssa_consistency_unsound.expected

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,6 @@ missingOperandType
66
duplicateChiOperand
77
sideEffectWithoutPrimary
88
instructionWithoutSuccessor
9-
| file://:0:0:0:0 | InitializeIndirection: (unnamed parameter 0) | Instruction 'InitializeIndirection: (unnamed parameter 0)' has no successors in function '$@'. | ir.cpp:1834:11:1834:11 | block_assignment::A& block_assignment::A::operator=(block_assignment::A&&) | block_assignment::A& block_assignment::A::operator=(block_assignment::A&&) |
109
ambiguousSuccessors
1110
unexplainedLoop
1211
unnecessaryPhiInstruction

0 commit comments

Comments
 (0)