Skip to content

Commit bac7e46

Browse files
committed
C++: tests for destructors after a while-loop condition
1 parent d1160f8 commit bac7e46

File tree

5 files changed

+328
-0
lines changed

5 files changed

+328
-0
lines changed

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

Lines changed: 71 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -16580,6 +16580,77 @@ ir.cpp:
1658016580
# 2189| <params>:
1658116581
# 2190| [Destructor] void Bool2::~Bool2()
1658216582
# 2190| <params>:
16583+
# 2193| [TopLevelFunction] void WhileLoopDestructors(bool)
16584+
# 2193| <params>:
16585+
# 2193| getParameter(0): [Parameter] b
16586+
# 2193| Type = [BoolType] bool
16587+
# 2193| getEntryPoint(): [BlockStmt] { ... }
16588+
# 2194| getStmt(0): [BlockStmt] { ... }
16589+
# 2195| getStmt(0): [DeclStmt] declaration
16590+
# 2195| getDeclarationEntry(0): [VariableDeclarationEntry] definition of s
16591+
# 2195| Type = [Struct] String
16592+
# 2195| getVariable().getInitializer(): [Initializer] initializer for s
16593+
# 2195| getExpr(): [ConstructorCall] call to String
16594+
# 2195| Type = [VoidType] void
16595+
# 2195| ValueCategory = prvalue
16596+
# 2196| getStmt(1): [WhileStmt] while (...) ...
16597+
# 2196| getCondition(): [VariableAccess] b
16598+
# 2196| Type = [BoolType] bool
16599+
# 2196| ValueCategory = prvalue(load)
16600+
# 2196| getStmt(): [BlockStmt] { ... }
16601+
# 2197| getStmt(0): [ExprStmt] ExprStmt
16602+
# 2197| getExpr(): [AssignExpr] ... = ...
16603+
# 2197| Type = [BoolType] bool
16604+
# 2197| ValueCategory = lvalue
16605+
# 2197| getLValue(): [VariableAccess] b
16606+
# 2197| Type = [BoolType] bool
16607+
# 2197| ValueCategory = lvalue
16608+
# 2197| getRValue(): [Literal] 0
16609+
# 2197| Type = [BoolType] bool
16610+
# 2197| Value = [Literal] 0
16611+
# 2197| ValueCategory = prvalue
16612+
# 2199| getImplicitDestructorCall(0): [DestructorCall] call to ~String
16613+
# 2199| Type = [VoidType] void
16614+
# 2199| ValueCategory = prvalue
16615+
# 2199| getQualifier(): [VariableAccess] s
16616+
# 2199| Type = [Struct] String
16617+
# 2199| ValueCategory = lvalue
16618+
# 2201| getStmt(1): [BlockStmt] { ... }
16619+
# 2202| getStmt(0): [WhileStmt] while (...) ...
16620+
# 2202| getCondition(): [ConditionDeclExpr] (condition decl)
16621+
# 2202| Type = [BoolType] bool
16622+
# 2202| ValueCategory = prvalue
16623+
# 2202| getChild(0): [FunctionCall] call to operator bool
16624+
# 2202| Type = [BoolType] bool
16625+
# 2202| ValueCategory = prvalue
16626+
# 2202| getQualifier(): [VariableAccess] B
16627+
# 2202| Type = [Class] Bool
16628+
# 2202| ValueCategory = prvalue(load)
16629+
# 2202| getStmt(): [BlockStmt] { ... }
16630+
# 2203| getStmt(0): [ExprStmt] ExprStmt
16631+
# 2203| getExpr(): [AssignExpr] ... = ...
16632+
# 2203| Type = [BoolType] bool
16633+
# 2203| ValueCategory = lvalue
16634+
# 2203| getLValue(): [VariableAccess] b
16635+
# 2203| Type = [BoolType] bool
16636+
# 2203| ValueCategory = lvalue
16637+
# 2203| getRValue(): [Literal] 0
16638+
# 2203| Type = [BoolType] bool
16639+
# 2203| Value = [Literal] 0
16640+
# 2203| ValueCategory = prvalue
16641+
# 2204| getImplicitDestructorCall(0): [DestructorCall] call to ~Bool
16642+
# 2204| Type = [VoidType] void
16643+
# 2204| ValueCategory = prvalue
16644+
# 2204| getQualifier(): [VariableAccess] B
16645+
# 2204| Type = [Class] Bool
16646+
# 2204| ValueCategory = lvalue
16647+
# 2204| getImplicitDestructorCall(0): [DestructorCall] call to ~Bool
16648+
# 2204| Type = [VoidType] void
16649+
# 2204| ValueCategory = prvalue
16650+
# 2204| getQualifier(): [VariableAccess] B
16651+
# 2204| Type = [Class] Bool
16652+
# 2204| ValueCategory = lvalue
16653+
# 2206| getStmt(2): [ReturnStmt] return ...
1658316654
perf-regression.cpp:
1658416655
# 4| [CopyAssignmentOperator] Big& Big::operator=(Big const&)
1658516656
# 4| <params>:

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

Lines changed: 89 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -13163,6 +13163,95 @@ ir.cpp:
1316313163
# 2177| v2177_8(void) = AliasedUse : ~m2182_14
1316413164
# 2177| v2177_9(void) = ExitFunction :
1316513165

13166+
# 2193| void WhileLoopDestructors(bool)
13167+
# 2193| Block 0
13168+
# 2193| v2193_1(void) = EnterFunction :
13169+
# 2193| m2193_2(unknown) = AliasedDefinition :
13170+
# 2193| m2193_3(unknown) = InitializeNonLocal :
13171+
# 2193| m2193_4(unknown) = Chi : total:m2193_2, partial:m2193_3
13172+
# 2193| r2193_5(glval<bool>) = VariableAddress[b] :
13173+
# 2193| m2193_6(bool) = InitializeParameter[b] : &:r2193_5
13174+
# 2195| r2195_1(glval<String>) = VariableAddress[s] :
13175+
# 2195| m2195_2(String) = Uninitialized[s] : &:r2195_1
13176+
# 2195| r2195_3(glval<unknown>) = FunctionAddress[String] :
13177+
# 2195| v2195_4(void) = Call[String] : func:r2195_3, this:r2195_1
13178+
# 2195| m2195_5(unknown) = ^CallSideEffect : ~m2193_4
13179+
# 2195| m2195_6(unknown) = Chi : total:m2193_4, partial:m2195_5
13180+
# 2195| m2195_7(String) = ^IndirectMayWriteSideEffect[-1] : &:r2195_1
13181+
# 2195| m2195_8(String) = Chi : total:m2195_2, partial:m2195_7
13182+
#-----| Goto -> Block 1
13183+
13184+
# 2196| Block 1
13185+
# 2196| m2196_1(bool) = Phi : from 0:m2193_6, from 2:m2197_3
13186+
# 2196| r2196_2(glval<bool>) = VariableAddress[b] :
13187+
# 2196| r2196_3(bool) = Load[b] : &:r2196_2, m2196_1
13188+
# 2196| v2196_4(void) = ConditionalBranch : r2196_3
13189+
#-----| False -> Block 3
13190+
#-----| True -> Block 2
13191+
13192+
# 2197| Block 2
13193+
# 2197| r2197_1(bool) = Constant[0] :
13194+
# 2197| r2197_2(glval<bool>) = VariableAddress[b] :
13195+
# 2197| m2197_3(bool) = Store[b] : &:r2197_2, r2197_1
13196+
#-----| Goto (back edge) -> Block 1
13197+
13198+
# 2199| Block 3
13199+
# 2199| r2199_1(glval<String>) = VariableAddress[s] :
13200+
# 2199| r2199_2(glval<unknown>) = FunctionAddress[~String] :
13201+
# 2199| v2199_3(void) = Call[~String] : func:r2199_2, this:r2199_1
13202+
# 2199| m2199_4(unknown) = ^CallSideEffect : ~m2195_6
13203+
# 2199| m2199_5(unknown) = Chi : total:m2195_6, partial:m2199_4
13204+
# 2199| v2199_6(void) = ^IndirectReadSideEffect[-1] : &:r2199_1, m2195_8
13205+
# 2199| m2199_7(String) = ^IndirectMayWriteSideEffect[-1] : &:r2199_1
13206+
# 2199| m2199_8(String) = Chi : total:m2195_8, partial:m2199_7
13207+
#-----| Goto -> Block 4
13208+
13209+
# 2202| Block 4
13210+
# 2202| m2202_1(unknown) = Phi : from 3:~m2199_5, from 5:~m2204_5
13211+
# 2202| m2202_2(bool) = Phi : from 3:m2196_1, from 5:m2203_3
13212+
# 2202| r2202_3(glval<Bool>) = VariableAddress[B] :
13213+
# 2202| m2202_4(Bool) = Uninitialized[B] : &:r2202_3
13214+
# 2202| r2202_5(glval<unknown>) = FunctionAddress[Bool] :
13215+
# 2202| r2202_6(glval<bool>) = VariableAddress[b] :
13216+
# 2202| r2202_7(bool) = Load[b] : &:r2202_6, m2202_2
13217+
# 2202| v2202_8(void) = Call[Bool] : func:r2202_5, this:r2202_3, 0:r2202_7
13218+
# 2202| m2202_9(unknown) = ^CallSideEffect : ~m2202_1
13219+
# 2202| m2202_10(unknown) = Chi : total:m2202_1, partial:m2202_9
13220+
# 2202| m2202_11(Bool) = ^IndirectMayWriteSideEffect[-1] : &:r2202_3
13221+
# 2202| m2202_12(Bool) = Chi : total:m2202_4, partial:m2202_11
13222+
# 2202| r2202_13(glval<Bool>) = VariableAddress[B] :
13223+
# 2202| r2202_14(glval<unknown>) = FunctionAddress[operator bool] :
13224+
# 2202| r2202_15(bool) = Call[operator bool] : func:r2202_14, this:r2202_13
13225+
# 2202| m2202_16(unknown) = ^CallSideEffect : ~m2202_10
13226+
# 2202| m2202_17(unknown) = Chi : total:m2202_10, partial:m2202_16
13227+
# 2202| v2202_18(void) = ^IndirectReadSideEffect[-1] : &:r2202_13, m2202_12
13228+
# 2202| m2202_19(Bool) = ^IndirectMayWriteSideEffect[-1] : &:r2202_13
13229+
# 2202| m2202_20(Bool) = Chi : total:m2202_12, partial:m2202_19
13230+
# 2202| r2202_21(bool) = CopyValue : r2202_15
13231+
# 2202| v2202_22(void) = ConditionalBranch : r2202_21
13232+
#-----| False -> Block 6
13233+
#-----| True -> Block 5
13234+
13235+
# 2203| Block 5
13236+
# 2203| r2203_1(bool) = Constant[0] :
13237+
# 2203| r2203_2(glval<bool>) = VariableAddress[b] :
13238+
# 2203| m2203_3(bool) = Store[b] : &:r2203_2, r2203_1
13239+
# 2204| r2204_1(glval<Bool>) = VariableAddress[B] :
13240+
# 2204| r2204_2(glval<unknown>) = FunctionAddress[~Bool] :
13241+
# 2204| v2204_3(void) = Call[~Bool] : func:r2204_2, this:r2204_1
13242+
# 2204| m2204_4(unknown) = ^CallSideEffect : ~m2202_17
13243+
# 2204| m2204_5(unknown) = Chi : total:m2202_17, partial:m2204_4
13244+
# 2204| v2204_6(void) = ^IndirectReadSideEffect[-1] : &:r2204_1, m2202_20
13245+
# 2204| m2204_7(Bool) = ^IndirectMayWriteSideEffect[-1] : &:r2204_1
13246+
# 2204| m2204_8(Bool) = Chi : total:m2202_20, partial:m2204_7
13247+
#-----| Goto (back edge) -> Block 4
13248+
13249+
# 2206| Block 6
13250+
# 2206| v2206_1(void) = NoOp :
13251+
# 2193| v2193_7(void) = ReturnVoid :
13252+
# 2193| v2193_8(void) = AliasedUse : ~m2202_17
13253+
# 2193| v2193_9(void) = ExitFunction :
13254+
1316613255
perf-regression.cpp:
1316713256
# 6| void Big::Big()
1316813257
# 6| Block 0

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

Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2190,4 +2190,18 @@ class Bool2 {
21902190
~Bool2();
21912191
};
21922192

2193+
void WhileLoopDestructors(bool b) {
2194+
{
2195+
String s;
2196+
while(b) {
2197+
b = false;
2198+
}
2199+
}
2200+
2201+
{
2202+
while (Bool B = Bool(b)) {
2203+
b = false;
2204+
}
2205+
}
2206+
}
21932207
// semmle-extractor-options: -std=c++17 --clang

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

Lines changed: 70 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -10758,6 +10758,76 @@
1075810758
| ir.cpp:2182:5:2182:5 | SideEffect | m2181_8 |
1075910759
| ir.cpp:2182:5:2182:5 | SideEffect | ~m2181_6 |
1076010760
| ir.cpp:2182:5:2182:5 | SideEffect | ~m2182_9 |
10761+
| ir.cpp:2193:6:2193:25 | ChiPartial | partial:m2193_3 |
10762+
| ir.cpp:2193:6:2193:25 | ChiTotal | total:m2193_2 |
10763+
| ir.cpp:2193:6:2193:25 | SideEffect | ~m2202_17 |
10764+
| ir.cpp:2193:32:2193:32 | Address | &:r2193_5 |
10765+
| ir.cpp:2195:16:2195:16 | Address | &:r2195_1 |
10766+
| ir.cpp:2195:16:2195:16 | Address | &:r2195_1 |
10767+
| ir.cpp:2195:16:2195:16 | Arg(this) | this:r2195_1 |
10768+
| ir.cpp:2195:16:2195:16 | CallTarget | func:r2195_3 |
10769+
| ir.cpp:2195:16:2195:16 | ChiPartial | partial:m2195_5 |
10770+
| ir.cpp:2195:16:2195:16 | ChiPartial | partial:m2195_7 |
10771+
| ir.cpp:2195:16:2195:16 | ChiTotal | total:m2193_4 |
10772+
| ir.cpp:2195:16:2195:16 | ChiTotal | total:m2195_2 |
10773+
| ir.cpp:2195:16:2195:16 | SideEffect | ~m2193_4 |
10774+
| ir.cpp:2196:15:2196:15 | Address | &:r2196_2 |
10775+
| ir.cpp:2196:15:2196:15 | Condition | r2196_3 |
10776+
| ir.cpp:2196:15:2196:15 | Load | m2196_1 |
10777+
| ir.cpp:2196:15:2196:15 | Phi | from 0:m2193_6 |
10778+
| ir.cpp:2196:15:2196:15 | Phi | from 2:m2197_3 |
10779+
| ir.cpp:2197:13:2197:13 | Address | &:r2197_2 |
10780+
| ir.cpp:2197:17:2197:21 | StoreValue | r2197_1 |
10781+
| ir.cpp:2199:5:2199:5 | Address | &:r2199_1 |
10782+
| ir.cpp:2199:5:2199:5 | Address | &:r2199_1 |
10783+
| ir.cpp:2199:5:2199:5 | Arg(this) | this:r2199_1 |
10784+
| ir.cpp:2199:5:2199:5 | CallTarget | func:r2199_2 |
10785+
| ir.cpp:2199:5:2199:5 | ChiPartial | partial:m2199_4 |
10786+
| ir.cpp:2199:5:2199:5 | ChiPartial | partial:m2199_7 |
10787+
| ir.cpp:2199:5:2199:5 | ChiTotal | total:m2195_6 |
10788+
| ir.cpp:2199:5:2199:5 | ChiTotal | total:m2195_8 |
10789+
| ir.cpp:2199:5:2199:5 | SideEffect | m2195_8 |
10790+
| ir.cpp:2199:5:2199:5 | SideEffect | ~m2195_6 |
10791+
| ir.cpp:2202:16:2202:31 | Address | &:r2202_3 |
10792+
| ir.cpp:2202:16:2202:31 | Address | &:r2202_3 |
10793+
| ir.cpp:2202:16:2202:31 | Arg(this) | this:r2202_3 |
10794+
| ir.cpp:2202:16:2202:31 | Condition | r2202_21 |
10795+
| ir.cpp:2202:16:2202:31 | Phi | from 3:m2196_1 |
10796+
| ir.cpp:2202:16:2202:31 | Phi | from 3:~m2199_5 |
10797+
| ir.cpp:2202:16:2202:31 | Phi | from 5:m2203_3 |
10798+
| ir.cpp:2202:16:2202:31 | Phi | from 5:~m2204_5 |
10799+
| ir.cpp:2202:21:2202:21 | Address | &:r2202_13 |
10800+
| ir.cpp:2202:21:2202:21 | Address | &:r2202_13 |
10801+
| ir.cpp:2202:21:2202:21 | Arg(this) | this:r2202_13 |
10802+
| ir.cpp:2202:21:2202:21 | CallTarget | func:r2202_14 |
10803+
| ir.cpp:2202:21:2202:21 | ChiPartial | partial:m2202_16 |
10804+
| ir.cpp:2202:21:2202:21 | ChiPartial | partial:m2202_19 |
10805+
| ir.cpp:2202:21:2202:21 | ChiTotal | total:m2202_10 |
10806+
| ir.cpp:2202:21:2202:21 | ChiTotal | total:m2202_12 |
10807+
| ir.cpp:2202:21:2202:21 | SideEffect | m2202_12 |
10808+
| ir.cpp:2202:21:2202:21 | SideEffect | ~m2202_10 |
10809+
| ir.cpp:2202:21:2202:21 | Unary | r2202_15 |
10810+
| ir.cpp:2202:24:2202:31 | CallTarget | func:r2202_5 |
10811+
| ir.cpp:2202:24:2202:31 | ChiPartial | partial:m2202_9 |
10812+
| ir.cpp:2202:24:2202:31 | ChiPartial | partial:m2202_11 |
10813+
| ir.cpp:2202:24:2202:31 | ChiTotal | total:m2202_1 |
10814+
| ir.cpp:2202:24:2202:31 | ChiTotal | total:m2202_4 |
10815+
| ir.cpp:2202:24:2202:31 | SideEffect | ~m2202_1 |
10816+
| ir.cpp:2202:30:2202:30 | Address | &:r2202_6 |
10817+
| ir.cpp:2202:30:2202:30 | Arg(0) | 0:r2202_7 |
10818+
| ir.cpp:2202:30:2202:30 | Load | m2202_2 |
10819+
| ir.cpp:2203:13:2203:13 | Address | &:r2203_2 |
10820+
| ir.cpp:2203:17:2203:21 | StoreValue | r2203_1 |
10821+
| ir.cpp:2204:9:2204:9 | Address | &:r2204_1 |
10822+
| ir.cpp:2204:9:2204:9 | Address | &:r2204_1 |
10823+
| ir.cpp:2204:9:2204:9 | Arg(this) | this:r2204_1 |
10824+
| ir.cpp:2204:9:2204:9 | CallTarget | func:r2204_2 |
10825+
| ir.cpp:2204:9:2204:9 | ChiPartial | partial:m2204_4 |
10826+
| ir.cpp:2204:9:2204:9 | ChiPartial | partial:m2204_7 |
10827+
| ir.cpp:2204:9:2204:9 | ChiTotal | total:m2202_17 |
10828+
| ir.cpp:2204:9:2204:9 | ChiTotal | total:m2202_20 |
10829+
| ir.cpp:2204:9:2204:9 | SideEffect | m2202_20 |
10830+
| ir.cpp:2204:9:2204:9 | SideEffect | ~m2202_17 |
1076110831
| perf-regression.cpp:6:3:6:5 | Address | &:r6_5 |
1076210832
| perf-regression.cpp:6:3:6:5 | Address | &:r6_5 |
1076310833
| perf-regression.cpp:6:3:6:5 | Address | &:r6_7 |

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

Lines changed: 84 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -12250,6 +12250,90 @@ ir.cpp:
1225012250
# 2177| v2177_7(void) = AliasedUse : ~m?
1225112251
# 2177| v2177_8(void) = ExitFunction :
1225212252

12253+
# 2193| void WhileLoopDestructors(bool)
12254+
# 2193| Block 0
12255+
# 2193| v2193_1(void) = EnterFunction :
12256+
# 2193| mu2193_2(unknown) = AliasedDefinition :
12257+
# 2193| mu2193_3(unknown) = InitializeNonLocal :
12258+
# 2193| r2193_4(glval<bool>) = VariableAddress[b] :
12259+
# 2193| mu2193_5(bool) = InitializeParameter[b] : &:r2193_4
12260+
# 2195| r2195_1(glval<String>) = VariableAddress[s] :
12261+
# 2195| mu2195_2(String) = Uninitialized[s] : &:r2195_1
12262+
# 2195| r2195_3(glval<unknown>) = FunctionAddress[String] :
12263+
# 2195| v2195_4(void) = Call[String] : func:r2195_3, this:r2195_1
12264+
# 2195| mu2195_5(unknown) = ^CallSideEffect : ~m?
12265+
# 2195| mu2195_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r2195_1
12266+
#-----| Goto -> Block 1
12267+
12268+
# 2196| Block 1
12269+
# 2196| r2196_1(glval<bool>) = VariableAddress[b] :
12270+
# 2196| r2196_2(bool) = Load[b] : &:r2196_1, ~m?
12271+
# 2196| v2196_3(void) = ConditionalBranch : r2196_2
12272+
#-----| False -> Block 3
12273+
#-----| True -> Block 2
12274+
12275+
# 2197| Block 2
12276+
# 2197| r2197_1(bool) = Constant[0] :
12277+
# 2197| r2197_2(glval<bool>) = VariableAddress[b] :
12278+
# 2197| mu2197_3(bool) = Store[b] : &:r2197_2, r2197_1
12279+
#-----| Goto (back edge) -> Block 1
12280+
12281+
# 2199| Block 3
12282+
# 2199| r2199_1(glval<String>) = VariableAddress[s] :
12283+
# 2199| r2199_2(glval<unknown>) = FunctionAddress[~String] :
12284+
# 2199| v2199_3(void) = Call[~String] : func:r2199_2, this:r2199_1
12285+
# 2199| mu2199_4(unknown) = ^CallSideEffect : ~m?
12286+
# 2199| v2199_5(void) = ^IndirectReadSideEffect[-1] : &:r2199_1, ~m?
12287+
# 2199| mu2199_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r2199_1
12288+
#-----| Goto -> Block 4
12289+
12290+
# 2202| Block 4
12291+
# 2202| r2202_1(glval<Bool>) = VariableAddress[B] :
12292+
# 2202| mu2202_2(Bool) = Uninitialized[B] : &:r2202_1
12293+
# 2202| r2202_3(glval<unknown>) = FunctionAddress[Bool] :
12294+
# 2202| r2202_4(glval<bool>) = VariableAddress[b] :
12295+
# 2202| r2202_5(bool) = Load[b] : &:r2202_4, ~m?
12296+
# 2202| v2202_6(void) = Call[Bool] : func:r2202_3, this:r2202_1, 0:r2202_5
12297+
# 2202| mu2202_7(unknown) = ^CallSideEffect : ~m?
12298+
# 2202| mu2202_8(Bool) = ^IndirectMayWriteSideEffect[-1] : &:r2202_1
12299+
# 2202| r2202_9(glval<Bool>) = VariableAddress[B] :
12300+
# 2202| r2202_10(glval<unknown>) = FunctionAddress[operator bool] :
12301+
# 2202| r2202_11(bool) = Call[operator bool] : func:r2202_10, this:r2202_9
12302+
# 2202| mu2202_12(unknown) = ^CallSideEffect : ~m?
12303+
# 2202| v2202_13(void) = ^IndirectReadSideEffect[-1] : &:r2202_9, ~m?
12304+
# 2202| mu2202_14(Bool) = ^IndirectMayWriteSideEffect[-1] : &:r2202_9
12305+
# 2202| r2202_15(bool) = CopyValue : r2202_11
12306+
# 2202| v2202_16(void) = ConditionalBranch : r2202_15
12307+
#-----| False -> Block 7
12308+
#-----| True -> Block 5
12309+
12310+
# 2203| Block 5
12311+
# 2203| r2203_1(bool) = Constant[0] :
12312+
# 2203| r2203_2(glval<bool>) = VariableAddress[b] :
12313+
# 2203| mu2203_3(bool) = Store[b] : &:r2203_2, r2203_1
12314+
# 2204| r2204_1(glval<Bool>) = VariableAddress[B] :
12315+
# 2204| r2204_2(glval<unknown>) = FunctionAddress[~Bool] :
12316+
# 2204| v2204_3(void) = Call[~Bool] : func:r2204_2, this:r2204_1
12317+
# 2204| mu2204_4(unknown) = ^CallSideEffect : ~m?
12318+
# 2204| v2204_5(void) = ^IndirectReadSideEffect[-1] : &:r2204_1, ~m?
12319+
# 2204| mu2204_6(Bool) = ^IndirectMayWriteSideEffect[-1] : &:r2204_1
12320+
#-----| Goto (back edge) -> Block 4
12321+
12322+
# 2204| Block 6
12323+
# 2204| r2204_7(glval<Bool>) = VariableAddress[B] :
12324+
# 2204| r2204_8(glval<unknown>) = FunctionAddress[~Bool] :
12325+
# 2204| v2204_9(void) = Call[~Bool] : func:r2204_8, this:r2204_7
12326+
# 2204| mu2204_10(unknown) = ^CallSideEffect : ~m?
12327+
# 2204| v2204_11(void) = ^IndirectReadSideEffect[-1] : &:r2204_7, ~m?
12328+
# 2204| mu2204_12(Bool) = ^IndirectMayWriteSideEffect[-1] : &:r2204_7
12329+
#-----| Goto -> Block 7
12330+
12331+
# 2206| Block 7
12332+
# 2206| v2206_1(void) = NoOp :
12333+
# 2193| v2193_6(void) = ReturnVoid :
12334+
# 2193| v2193_7(void) = AliasedUse : ~m?
12335+
# 2193| v2193_8(void) = ExitFunction :
12336+
1225312337
perf-regression.cpp:
1225412338
# 6| void Big::Big()
1225512339
# 6| Block 0

0 commit comments

Comments
 (0)