Thanks to visit codestin.com
Credit goes to github.com

Skip to content

Commit 5811d0b

Browse files
author
Robert Marsh
committed
C++: add AliasedDefinition to IR global var inits
1 parent 12ccf36 commit 5811d0b

5 files changed

Lines changed: 101 additions & 91 deletions

File tree

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

Lines changed: 32 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -32,6 +32,10 @@ class TranslatedGlobalOrNamespaceVarInit extends TranslatedInstructionContainer,
3232
tag = EnterFunctionTag() and
3333
type = getVoidType()
3434
or
35+
op instanceof Opcode::AliasedDefinition and
36+
tag = AliasedDefinitionTag() and
37+
type = getUnknownType()
38+
or
3539
op instanceof Opcode::VariableAddress and
3640
tag = InitializerVariableAddressTag() and
3741
type = getTypeForGLValue(var.getType())
@@ -40,30 +44,48 @@ class TranslatedGlobalOrNamespaceVarInit extends TranslatedInstructionContainer,
4044
tag = ReturnTag() and
4145
type = getVoidType()
4246
or
47+
op instanceof Opcode::AliasedUse and
48+
tag = AliasedUseTag() and
49+
type = getVoidType()
50+
or
4351
op instanceof Opcode::ExitFunction and
4452
tag = ExitFunctionTag() and
4553
type = getVoidType()
4654
}
4755

4856
override Instruction getInstructionSuccessor(InstructionTag tag, EdgeKind kind) {
49-
tag = EnterFunctionTag() and
5057
kind instanceof GotoEdge and
51-
result = getInstruction(InitializerVariableAddressTag())
52-
or
53-
tag = InitializerVariableAddressTag() and
54-
kind instanceof GotoEdge and
55-
result = getChild(1).getFirstInstruction()
56-
or
57-
tag = ReturnTag() and
58-
kind instanceof GotoEdge and
59-
result = getInstruction(ExitFunctionTag())
58+
(
59+
tag = EnterFunctionTag() and
60+
result = getInstruction(AliasedDefinitionTag())
61+
or
62+
tag = AliasedDefinitionTag() and
63+
result = getInstruction(InitializerVariableAddressTag())
64+
or
65+
tag = InitializerVariableAddressTag() and
66+
result = getChild(1).getFirstInstruction()
67+
or
68+
tag = ReturnTag() and
69+
result = getInstruction(AliasedUseTag())
70+
or
71+
tag = AliasedUseTag() and
72+
result = getInstruction(ExitFunctionTag())
73+
)
6074
}
6175

6276
override Instruction getChildSuccessor(TranslatedElement child) {
6377
child = getChild(1) and
6478
result = getInstruction(ReturnTag())
6579
}
6680

81+
final override CppType getInstructionMemoryOperandType(
82+
InstructionTag tag, TypedOperandTag operandTag
83+
) {
84+
tag = AliasedUseTag() and
85+
operandTag instanceof SideEffectOperandTag and
86+
result = getUnknownType()
87+
}
88+
6789
override IRUserVariable getInstructionVariable(InstructionTag tag) {
6890
tag = InitializerVariableAddressTag() and
6991
result.getVariable() = var

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

Lines changed: 0 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -3,10 +3,6 @@ unexpectedOperand
33
duplicateOperand
44
missingPhiOperand
55
missingOperandType
6-
| ir.cpp:1038:12:1038:18 | ChiTotal | Operand 'ChiTotal' of instruction 'Chi' is missing a type in function '$@'. | ir.cpp:1038:6:1038:8 | (lambda [] type at line 1038, col. 12) lam | (lambda [] type at line 1038, col. 12) lam |
7-
| ir.cpp:1695:16:1695:16 | ChiTotal | Operand 'ChiTotal' of instruction 'Chi' is missing a type in function '$@'. | ir.cpp:1695:5:1695:12 | int global_2 | int global_2 |
8-
| ir.cpp:1697:22:1697:22 | ChiTotal | Operand 'ChiTotal' of instruction 'Chi' is missing a type in function '$@'. | ir.cpp:1697:11:1697:18 | int const global_3 | int const global_3 |
9-
| struct_init.cpp:10:7:10:9 | ChiTotal | Operand 'ChiTotal' of instruction 'Chi' is missing a type in function '$@'. | struct_init.cpp:9:13:9:25 | Info infos_in_file[] | Info infos_in_file[] |
106
duplicateChiOperand
117
sideEffectWithoutPrimary
128
instructionWithoutSuccessor
@@ -25,14 +21,6 @@ useNotDominatedByDefinition
2521
switchInstructionWithoutDefaultEdge
2622
notMarkedAsConflated
2723
wronglyMarkedAsConflated
28-
| ir.cpp:1038:12:1038:18 | Chi: [...](...){...} | Instruction 'Chi: [...](...){...}' should not be marked as having a conflated result in function '$@'. | ir.cpp:1038:6:1038:8 | (lambda [] type at line 1038, col. 12) lam | (lambda [] type at line 1038, col. 12) lam |
29-
| ir.cpp:1038:12:1038:18 | Chi: [...](...){...} | Instruction 'Chi: [...](...){...}' should not be marked as having a conflated result in function '$@'. | ir.cpp:1038:6:1038:8 | (lambda [] type at line 1038, col. 12) lam | (lambda [] type at line 1038, col. 12) lam |
30-
| ir.cpp:1695:16:1695:16 | Chi: 1 | Instruction 'Chi: 1' should not be marked as having a conflated result in function '$@'. | ir.cpp:1695:5:1695:12 | int global_2 | int global_2 |
31-
| ir.cpp:1697:22:1697:22 | Chi: 2 | Instruction 'Chi: 2' should not be marked as having a conflated result in function '$@'. | ir.cpp:1697:11:1697:18 | int const global_3 | int const global_3 |
32-
| struct_init.cpp:10:7:10:9 | Chi: array to pointer conversion | Instruction 'Chi: array to pointer conversion' should not be marked as having a conflated result in function '$@'. | struct_init.cpp:9:13:9:25 | Info infos_in_file[] | Info infos_in_file[] |
33-
| struct_init.cpp:10:12:10:19 | Chi: handler1 | Instruction 'Chi: handler1' should not be marked as having a conflated result in function '$@'. | struct_init.cpp:9:13:9:25 | Info infos_in_file[] | Info infos_in_file[] |
34-
| struct_init.cpp:11:7:11:9 | Chi: array to pointer conversion | Instruction 'Chi: array to pointer conversion' should not be marked as having a conflated result in function '$@'. | struct_init.cpp:9:13:9:25 | Info infos_in_file[] | Info infos_in_file[] |
35-
| struct_init.cpp:11:12:11:20 | Chi: & ... | Instruction 'Chi: & ...' should not be marked as having a conflated result in function '$@'. | struct_init.cpp:9:13:9:25 | Info infos_in_file[] | Info infos_in_file[] |
3624
invalidOverlap
3725
nonUniqueEnclosingIRFunction
3826
fieldAddressOnNonPointer

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

Lines changed: 0 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -3,10 +3,6 @@ unexpectedOperand
33
duplicateOperand
44
missingPhiOperand
55
missingOperandType
6-
| ir.cpp:1038:12:1038:18 | ChiTotal | Operand 'ChiTotal' of instruction 'Chi' is missing a type in function '$@'. | ir.cpp:1038:6:1038:8 | (lambda [] type at line 1038, col. 12) lam | (lambda [] type at line 1038, col. 12) lam |
7-
| ir.cpp:1695:16:1695:16 | ChiTotal | Operand 'ChiTotal' of instruction 'Chi' is missing a type in function '$@'. | ir.cpp:1695:5:1695:12 | int global_2 | int global_2 |
8-
| ir.cpp:1697:22:1697:22 | ChiTotal | Operand 'ChiTotal' of instruction 'Chi' is missing a type in function '$@'. | ir.cpp:1697:11:1697:18 | int const global_3 | int const global_3 |
9-
| struct_init.cpp:10:7:10:9 | ChiTotal | Operand 'ChiTotal' of instruction 'Chi' is missing a type in function '$@'. | struct_init.cpp:9:13:9:25 | Info infos_in_file[] | Info infos_in_file[] |
106
duplicateChiOperand
117
sideEffectWithoutPrimary
128
instructionWithoutSuccessor
@@ -25,14 +21,6 @@ useNotDominatedByDefinition
2521
switchInstructionWithoutDefaultEdge
2622
notMarkedAsConflated
2723
wronglyMarkedAsConflated
28-
| ir.cpp:1038:12:1038:18 | Chi: [...](...){...} | Instruction 'Chi: [...](...){...}' should not be marked as having a conflated result in function '$@'. | ir.cpp:1038:6:1038:8 | (lambda [] type at line 1038, col. 12) lam | (lambda [] type at line 1038, col. 12) lam |
29-
| ir.cpp:1038:12:1038:18 | Chi: [...](...){...} | Instruction 'Chi: [...](...){...}' should not be marked as having a conflated result in function '$@'. | ir.cpp:1038:6:1038:8 | (lambda [] type at line 1038, col. 12) lam | (lambda [] type at line 1038, col. 12) lam |
30-
| ir.cpp:1695:16:1695:16 | Chi: 1 | Instruction 'Chi: 1' should not be marked as having a conflated result in function '$@'. | ir.cpp:1695:5:1695:12 | int global_2 | int global_2 |
31-
| ir.cpp:1697:22:1697:22 | Chi: 2 | Instruction 'Chi: 2' should not be marked as having a conflated result in function '$@'. | ir.cpp:1697:11:1697:18 | int const global_3 | int const global_3 |
32-
| struct_init.cpp:10:7:10:9 | Chi: array to pointer conversion | Instruction 'Chi: array to pointer conversion' should not be marked as having a conflated result in function '$@'. | struct_init.cpp:9:13:9:25 | Info infos_in_file[] | Info infos_in_file[] |
33-
| struct_init.cpp:10:12:10:19 | Chi: handler1 | Instruction 'Chi: handler1' should not be marked as having a conflated result in function '$@'. | struct_init.cpp:9:13:9:25 | Info infos_in_file[] | Info infos_in_file[] |
34-
| struct_init.cpp:11:7:11:9 | Chi: array to pointer conversion | Instruction 'Chi: array to pointer conversion' should not be marked as having a conflated result in function '$@'. | struct_init.cpp:9:13:9:25 | Info infos_in_file[] | Info infos_in_file[] |
35-
| struct_init.cpp:11:12:11:20 | Chi: & ... | Instruction 'Chi: & ...' should not be marked as having a conflated result in function '$@'. | struct_init.cpp:9:13:9:25 | Info infos_in_file[] | Info infos_in_file[] |
3624
invalidOverlap
3725
nonUniqueEnclosingIRFunction
3826
fieldAddressOnNonPointer

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

Lines changed: 30 additions & 26 deletions
Original file line numberDiff line numberDiff line change
@@ -4666,15 +4666,16 @@
46664666
| ir.cpp:1034:6:1034:20 | ChiTotal | total:m1034_2 |
46674667
| ir.cpp:1034:6:1034:20 | SideEffect | m1034_3 |
46684668
| ir.cpp:1035:15:1035:15 | Address | &:r1035_1 |
4669-
| ir.cpp:1038:6:1038:8 | Address | &:r1038_2 |
4670-
| ir.cpp:1038:12:1038:18 | Address | &:r1038_3 |
4671-
| ir.cpp:1038:12:1038:18 | Address | &:r1038_3 |
4672-
| ir.cpp:1038:12:1038:18 | ChiPartial | partial:m1038_4 |
4673-
| ir.cpp:1038:12:1038:18 | ChiPartial | partial:m1038_7 |
4674-
| ir.cpp:1038:12:1038:18 | ChiTotal | total:m1038_5 |
4675-
| ir.cpp:1038:12:1038:18 | ChiTotal | total:~m? |
4676-
| ir.cpp:1038:12:1038:18 | Load | ~m1038_5 |
4677-
| ir.cpp:1038:12:1038:18 | StoreValue | r1038_6 |
4669+
| ir.cpp:1038:6:1038:8 | Address | &:r1038_3 |
4670+
| ir.cpp:1038:6:1038:8 | SideEffect | ~m1038_9 |
4671+
| ir.cpp:1038:12:1038:18 | Address | &:r1038_4 |
4672+
| ir.cpp:1038:12:1038:18 | Address | &:r1038_4 |
4673+
| ir.cpp:1038:12:1038:18 | ChiPartial | partial:m1038_5 |
4674+
| ir.cpp:1038:12:1038:18 | ChiPartial | partial:m1038_8 |
4675+
| ir.cpp:1038:12:1038:18 | ChiTotal | total:m1038_2 |
4676+
| ir.cpp:1038:12:1038:18 | ChiTotal | total:m1038_6 |
4677+
| ir.cpp:1038:12:1038:18 | Load | ~m1038_6 |
4678+
| ir.cpp:1038:12:1038:18 | StoreValue | r1038_7 |
46784679
| ir.cpp:1038:14:1038:14 | Address | &:r1038_5 |
46794680
| ir.cpp:1038:14:1038:14 | Address | &:r1038_5 |
46804681
| ir.cpp:1038:14:1038:14 | Address | &:r1038_5 |
@@ -7536,14 +7537,16 @@
75367537
| ir.cpp:1689:50:1689:50 | Load | m1689_6 |
75377538
| ir.cpp:1689:50:1689:50 | SideEffect | m1689_3 |
75387539
| ir.cpp:1689:50:1689:50 | SideEffect | m1689_8 |
7539-
| ir.cpp:1695:5:1695:12 | Address | &:r1695_2 |
7540-
| ir.cpp:1695:16:1695:16 | ChiPartial | partial:m1695_4 |
7541-
| ir.cpp:1695:16:1695:16 | ChiTotal | total:~m? |
7542-
| ir.cpp:1695:16:1695:16 | StoreValue | r1695_3 |
7543-
| ir.cpp:1697:11:1697:18 | Address | &:r1697_2 |
7544-
| ir.cpp:1697:22:1697:22 | ChiPartial | partial:m1697_4 |
7545-
| ir.cpp:1697:22:1697:22 | ChiTotal | total:~m? |
7546-
| ir.cpp:1697:22:1697:22 | StoreValue | r1697_3 |
7540+
| ir.cpp:1695:5:1695:12 | Address | &:r1695_3 |
7541+
| ir.cpp:1695:5:1695:12 | SideEffect | ~m1695_6 |
7542+
| ir.cpp:1695:16:1695:16 | ChiPartial | partial:m1695_5 |
7543+
| ir.cpp:1695:16:1695:16 | ChiTotal | total:m1695_2 |
7544+
| ir.cpp:1695:16:1695:16 | StoreValue | r1695_4 |
7545+
| ir.cpp:1697:11:1697:18 | Address | &:r1697_3 |
7546+
| ir.cpp:1697:11:1697:18 | SideEffect | ~m1697_6 |
7547+
| ir.cpp:1697:22:1697:22 | ChiPartial | partial:m1697_5 |
7548+
| ir.cpp:1697:22:1697:22 | ChiTotal | total:m1697_2 |
7549+
| ir.cpp:1697:22:1697:22 | StoreValue | r1697_4 |
75477550
| perf-regression.cpp:6:3:6:5 | Address | &:r6_5 |
75487551
| perf-regression.cpp:6:3:6:5 | Address | &:r6_5 |
75497552
| perf-regression.cpp:6:3:6:5 | Address | &:r6_7 |
@@ -7787,18 +7790,19 @@
77877790
| smart_ptr.cpp:47:43:47:63 | SideEffect | ~m47_16 |
77887791
| smart_ptr.cpp:47:43:47:63 | Unary | r47_5 |
77897792
| smart_ptr.cpp:47:43:47:63 | Unary | r47_6 |
7790-
| struct_init.cpp:9:13:9:25 | Left | r9_2 |
7791-
| struct_init.cpp:9:13:9:25 | Left | r9_2 |
7792-
| struct_init.cpp:9:31:12:1 | Right | r9_3 |
7793-
| struct_init.cpp:9:31:12:1 | Right | r9_5 |
7794-
| struct_init.cpp:9:31:12:1 | Unary | r9_4 |
7795-
| struct_init.cpp:9:31:12:1 | Unary | r9_4 |
7796-
| struct_init.cpp:9:31:12:1 | Unary | r9_6 |
7797-
| struct_init.cpp:9:31:12:1 | Unary | r9_6 |
7793+
| struct_init.cpp:9:13:9:25 | Left | r9_3 |
7794+
| struct_init.cpp:9:13:9:25 | Left | r9_3 |
7795+
| struct_init.cpp:9:13:9:25 | SideEffect | ~m11_10 |
7796+
| struct_init.cpp:9:31:12:1 | Right | r9_4 |
7797+
| struct_init.cpp:9:31:12:1 | Right | r9_6 |
7798+
| struct_init.cpp:9:31:12:1 | Unary | r9_5 |
7799+
| struct_init.cpp:9:31:12:1 | Unary | r9_5 |
7800+
| struct_init.cpp:9:31:12:1 | Unary | r9_7 |
7801+
| struct_init.cpp:9:31:12:1 | Unary | r9_7 |
77987802
| struct_init.cpp:10:5:10:21 | Address | &:r10_1 |
77997803
| struct_init.cpp:10:5:10:21 | Address | &:r10_6 |
78007804
| struct_init.cpp:10:7:10:9 | ChiPartial | partial:m10_4 |
7801-
| struct_init.cpp:10:7:10:9 | ChiTotal | total:~m? |
7805+
| struct_init.cpp:10:7:10:9 | ChiTotal | total:m9_2 |
78027806
| struct_init.cpp:10:7:10:9 | StoreValue | r10_3 |
78037807
| struct_init.cpp:10:7:10:9 | Unary | r10_2 |
78047808
| struct_init.cpp:10:12:10:19 | ChiPartial | partial:m10_8 |

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

Lines changed: 39 additions & 31 deletions
Original file line numberDiff line numberDiff line change
@@ -5622,14 +5622,16 @@ ir.cpp:
56225622

56235623
# 1038| (lambda [] type at line 1038, col. 12) lam
56245624
# 1038| Block 0
5625-
# 1038| v1038_1(void) = EnterFunction :
5626-
# 1038| r1038_2(glval<decltype([...](...){...})>) = VariableAddress :
5627-
# 1038| r1038_3(glval<decltype([...](...){...})>) = VariableAddress :
5628-
# 1038| mu1038_4(decltype([...](...){...})) = Uninitialized : &:r1038_3
5629-
# 1038| r1038_5(decltype([...](...){...})) = Load[?] : &:r1038_3, ~m?
5630-
# 1038| mu1038_6(decltype([...](...){...})) = Store[?] : &:r1038_2, r1038_5
5631-
# 1038| v1038_7(void) = ReturnVoid :
5632-
# 1038| v1038_8(void) = ExitFunction :
5625+
# 1038| v1038_1(void) = EnterFunction :
5626+
# 1038| mu1038_2(unknown) = AliasedDefinition :
5627+
# 1038| r1038_3(glval<decltype([...](...){...})>) = VariableAddress :
5628+
# 1038| r1038_4(glval<decltype([...](...){...})>) = VariableAddress :
5629+
# 1038| mu1038_5(decltype([...](...){...})) = Uninitialized : &:r1038_4
5630+
# 1038| r1038_6(decltype([...](...){...})) = Load[?] : &:r1038_4, ~m?
5631+
# 1038| mu1038_7(decltype([...](...){...})) = Store[?] : &:r1038_3, r1038_6
5632+
# 1038| v1038_8(void) = ReturnVoid :
5633+
# 1038| v1038_9(void) = AliasedUse : ~m?
5634+
# 1038| v1038_10(void) = ExitFunction :
56335635

56345636
# 1038| void (lambda [] type at line 1038, col. 12)::operator()() const
56355637
# 1038| Block 0
@@ -8861,21 +8863,25 @@ ir.cpp:
88618863

88628864
# 1695| int global_2
88638865
# 1695| Block 0
8864-
# 1695| v1695_1(void) = EnterFunction :
8865-
# 1695| r1695_2(glval<int>) = VariableAddress :
8866-
# 1695| r1695_3(int) = Constant[1] :
8867-
# 1695| mu1695_4(int) = Store[?] : &:r1695_2, r1695_3
8868-
# 1695| v1695_5(void) = ReturnVoid :
8869-
# 1695| v1695_6(void) = ExitFunction :
8866+
# 1695| v1695_1(void) = EnterFunction :
8867+
# 1695| mu1695_2(unknown) = AliasedDefinition :
8868+
# 1695| r1695_3(glval<int>) = VariableAddress :
8869+
# 1695| r1695_4(int) = Constant[1] :
8870+
# 1695| mu1695_5(int) = Store[?] : &:r1695_3, r1695_4
8871+
# 1695| v1695_6(void) = ReturnVoid :
8872+
# 1695| v1695_7(void) = AliasedUse : ~m?
8873+
# 1695| v1695_8(void) = ExitFunction :
88708874

88718875
# 1697| int const global_3
88728876
# 1697| Block 0
8873-
# 1697| v1697_1(void) = EnterFunction :
8874-
# 1697| r1697_2(glval<int>) = VariableAddress :
8875-
# 1697| r1697_3(int) = Constant[2] :
8876-
# 1697| mu1697_4(int) = Store[?] : &:r1697_2, r1697_3
8877-
# 1697| v1697_5(void) = ReturnVoid :
8878-
# 1697| v1697_6(void) = ExitFunction :
8877+
# 1697| v1697_1(void) = EnterFunction :
8878+
# 1697| mu1697_2(unknown) = AliasedDefinition :
8879+
# 1697| r1697_3(glval<int>) = VariableAddress :
8880+
# 1697| r1697_4(int) = Constant[2] :
8881+
# 1697| mu1697_5(int) = Store[?] : &:r1697_3, r1697_4
8882+
# 1697| v1697_6(void) = ReturnVoid :
8883+
# 1697| v1697_7(void) = AliasedUse : ~m?
8884+
# 1697| v1697_8(void) = ExitFunction :
88798885

88808886
perf-regression.cpp:
88818887
# 6| void Big::Big()
@@ -9101,28 +9107,30 @@ struct_init.cpp:
91019107
# 9| Info infos_in_file[]
91029108
# 9| Block 0
91039109
# 9| v9_1(void) = EnterFunction :
9104-
# 9| r9_2(glval<Info[]>) = VariableAddress :
9105-
# 9| r9_3(int) = Constant[0] :
9106-
# 9| r9_4(glval<Info>) = PointerAdd[16] : r9_2, r9_3
9107-
# 10| r10_1(glval<char *>) = FieldAddress[name] : r9_4
9110+
# 9| mu9_2(unknown) = AliasedDefinition :
9111+
# 9| r9_3(glval<Info[]>) = VariableAddress :
9112+
# 9| r9_4(int) = Constant[0] :
9113+
# 9| r9_5(glval<Info>) = PointerAdd[16] : r9_3, r9_4
9114+
# 10| r10_1(glval<char *>) = FieldAddress[name] : r9_5
91089115
# 10| r10_2(glval<char[2]>) = StringConstant :
91099116
# 10| r10_3(char *) = Convert : r10_2
91109117
# 10| mu10_4(char *) = Store[?] : &:r10_1, r10_3
9111-
# 10| r10_5(glval<..(*)(..)>) = FieldAddress[handler] : r9_4
9118+
# 10| r10_5(glval<..(*)(..)>) = FieldAddress[handler] : r9_5
91129119
# 10| r10_6(..(*)(..)) = FunctionAddress[handler1] :
91139120
# 10| mu10_7(..(*)(..)) = Store[?] : &:r10_5, r10_6
9114-
# 9| r9_5(int) = Constant[1] :
9115-
# 9| r9_6(glval<Info>) = PointerAdd[16] : r9_2, r9_5
9116-
# 11| r11_1(glval<char *>) = FieldAddress[name] : r9_6
9121+
# 9| r9_6(int) = Constant[1] :
9122+
# 9| r9_7(glval<Info>) = PointerAdd[16] : r9_3, r9_6
9123+
# 11| r11_1(glval<char *>) = FieldAddress[name] : r9_7
91179124
# 11| r11_2(glval<char[2]>) = StringConstant :
91189125
# 11| r11_3(char *) = Convert : r11_2
91199126
# 11| mu11_4(char *) = Store[?] : &:r11_1, r11_3
9120-
# 11| r11_5(glval<..(*)(..)>) = FieldAddress[handler] : r9_6
9127+
# 11| r11_5(glval<..(*)(..)>) = FieldAddress[handler] : r9_7
91219128
# 11| r11_6(glval<..()(..)>) = FunctionAddress[handler2] :
91229129
# 11| r11_7(..(*)(..)) = CopyValue : r11_6
91239130
# 11| mu11_8(..(*)(..)) = Store[?] : &:r11_5, r11_7
9124-
# 9| v9_7(void) = ReturnVoid :
9125-
# 9| v9_8(void) = ExitFunction :
9131+
# 9| v9_8(void) = ReturnVoid :
9132+
# 9| v9_9(void) = AliasedUse : ~m?
9133+
# 9| v9_10(void) = ExitFunction :
91269134

91279135
# 14| Info* global_pointer
91289136

0 commit comments

Comments
 (0)