C++: fix for duplicated parent of ReturnVoid statements

This commit is contained in:
Robert Marsh
2024-02-23 16:19:34 +00:00
parent 6f7f68fee8
commit dd97584eff
7 changed files with 188 additions and 102 deletions

View File

@@ -616,7 +616,7 @@ newtype TTranslatedElement =
exists(ArrayOrVectorAggregateLiteral initList |
initList.getAnElementExpr(_).getFullyConverted() = expr
) or
exists(ReturnStmt returnStmt | returnStmt.getExpr().getFullyConverted() = expr) or
exists(ReturnStmt returnStmt | returnStmt.getExpr().getFullyConverted() = expr and hasReturnValue(returnStmt.getEnclosingFunction())) or
exists(ConstructorFieldInit fieldInit | fieldInit.getExpr().getFullyConverted() = expr) or
exists(NewExpr newExpr | newExpr.getInitializer().getFullyConverted() = expr) or
exists(ThrowExpr throw | throw.getExpr().getFullyConverted() = expr) or

View File

@@ -474,7 +474,7 @@ class TranslatedReturnVoidExpressionStmt extends TranslatedReturnStmt {
override Instruction getALastInstructionInternal() {
if this.hasAnImplicitDestructorCall()
then
result = this.getChildInternal(max(int id | exists(this.getChild(id)))).getALastInstruction()
result = this.getChild(max(int id | exists(this.getChild(id)))).getALastInstruction()
else result = this.getInstruction(OnlyInstructionTag())
}

View File

@@ -17895,6 +17895,26 @@ ir.cpp:
# 2292| getQualifier(): [VariableAccess] s
# 2292| Type = [Struct] String
# 2292| ValueCategory = lvalue
# 2294| [TopLevelFunction] void VoidReturnDestructors()
# 2294| <params>:
# 2294| getEntryPoint(): [BlockStmt] { ... }
# 2295| getStmt(0): [DeclStmt] declaration
# 2295| getDeclarationEntry(0): [VariableDeclarationEntry] definition of s
# 2295| Type = [Struct] String
# 2295| getVariable().getInitializer(): [Initializer] initializer for s
# 2295| getExpr(): [ConstructorCall] call to String
# 2295| Type = [VoidType] void
# 2295| ValueCategory = prvalue
# 2296| getStmt(1): [ReturnStmt] return ...
# 2296| getExpr(): [FunctionCall] call to VoidFunc
# 2296| Type = [VoidType] void
# 2296| ValueCategory = prvalue
# 2297| getImplicitDestructorCall(0): [DestructorCall] call to ~String
# 2297| Type = [VoidType] void
# 2297| ValueCategory = prvalue
# 2297| getQualifier(): [VariableAccess] s
# 2297| Type = [Struct] String
# 2297| ValueCategory = lvalue
perf-regression.cpp:
# 4| [CopyAssignmentOperator] Big& Big::operator=(Big const&)
# 4| <params>:

View File

@@ -14268,65 +14268,61 @@ ir.cpp:
# 2277| r2277_1(glval<bool>) = VariableAddress[b] :
# 2277| r2277_2(bool) = Load[b] : &:r2277_1, m2275_6
# 2277| v2277_3(void) = ConditionalBranch : r2277_2
#-----| False -> Block 4
#-----| True -> Block 3
#-----| False -> Block 3
#-----| True -> Block 2
# 2275| Block 1
# 2275| m2275_7(unknown) = Phi : from 2:~m2284_21, from 2:~m2284_5, from 5:~m2284_21, from 5:~m2284_5, from 3:~m2284_13, from 2:~m2284_21, from 2:~m2284_5, from 5:~m2284_21, from 5:~m2284_5, from 6:~m2284_30
# 2275| m2275_7(unknown) = Phi : from 2:~m2284_5, from 4:~m2284_13, from 5:~m2284_22
# 2275| v2275_8(void) = ReturnVoid :
# 2275| v2275_9(void) = AliasedUse : ~m2275_7
# 2275| v2275_10(void) = ExitFunction :
# 2278| Block 3
# 2278| v2278_1(void) = NoOp :
# 2278| Block 2
# 2278| v2278_1(void) = NoOp :
# 2284| r2284_1(glval<String>) = VariableAddress[s] :
# 2284| r2284_2(glval<unknown>) = FunctionAddress[~String] :
# 2284| v2284_3(void) = Call[~String] : func:r2284_2, this:r2284_1
# 2284| m2284_4(unknown) = ^CallSideEffect : ~m2276_6
# 2284| m2284_5(unknown) = Chi : total:m2276_6, partial:m2284_4
# 2284| v2284_6(void) = ^IndirectReadSideEffect[-1] : &:r2284_1, m2276_8
# 2284| m2284_7(String) = ^IndirectMayWriteSideEffect[-1] : &:r2284_1
# 2284| m2284_8(String) = Chi : total:m2276_8, partial:m2284_7
#-----| Goto -> Block 1
# 2280| Block 3
# 2280| r2280_1(glval<bool>) = VariableAddress[b] :
# 2280| r2280_2(bool) = Load[b] : &:r2280_1, m2275_6
# 2280| v2280_3(void) = ConditionalBranch : r2280_2
#-----| False -> Block 5
#-----| True -> Block 4
# 2281| Block 4
# 2281| r2281_1(glval<unknown>) = FunctionAddress[VoidFunc] :
# 2281| v2281_2(void) = Call[VoidFunc] : func:r2281_1
# 2281| m2281_3(unknown) = ^CallSideEffect : ~m2276_6
# 2281| m2281_4(unknown) = Chi : total:m2276_6, partial:m2281_3
# 2281| v2281_5(void) = NoOp :
# 2284| r2284_9(glval<String>) = VariableAddress[s] :
# 2284| r2284_10(glval<unknown>) = FunctionAddress[~String] :
# 2284| v2284_11(void) = Call[~String] : func:r2284_10, this:r2284_9
# 2284| m2284_12(unknown) = ^CallSideEffect : ~m2276_6
# 2284| m2284_13(unknown) = Chi : total:m2276_6, partial:m2284_12
# 2284| m2284_12(unknown) = ^CallSideEffect : ~m2281_4
# 2284| m2284_13(unknown) = Chi : total:m2281_4, partial:m2284_12
# 2284| v2284_14(void) = ^IndirectReadSideEffect[-1] : &:r2284_9, m2276_8
# 2284| m2284_15(String) = ^IndirectMayWriteSideEffect[-1] : &:r2284_9
# 2284| m2284_16(String) = Chi : total:m2276_8, partial:m2284_15
#-----| Goto -> Block 1
# 2280| Block 4
# 2280| r2280_1(glval<bool>) = VariableAddress[b] :
# 2280| r2280_2(bool) = Load[b] : &:r2280_1, m2275_6
# 2280| v2280_3(void) = ConditionalBranch : r2280_2
#-----| False -> Block 6
#-----| True -> Block 5
#-----| True -> Block 5
# 2281| Block 5
# 2281| r2281_6(glval<unknown>) = FunctionAddress[VoidFunc] :
# 2281| v2281_7(void) = Call[VoidFunc] : func:r2281_1, func:r2281_6
# 2281| m2281_8(unknown) = ^CallSideEffect : ~m2276_6
# 2281| m2281_9(unknown) = Chi : total:m2276_6, partial:m2281_3, partial:m2281_8
# 2281| v2281_5(void) = NoOp :
# 2284| r2284_1(glval<String>) = VariableAddress[s] :
# 2284| r2284_2(glval<unknown>) = FunctionAddress[~String] :
# 2284| v2284_3(void) = Call[~String] : func:r2284_18, func:r2284_2, this:r2284_1, this:r2284_17
# 2284| m2284_4(unknown) = ^CallSideEffect : ~m2281_4, ~m2281_9
# 2284| m2284_5(unknown) = Chi : total:m2281_4, total:m2281_9, partial:m2284_20, partial:m2284_4
# 2284| v2284_6(void) = ^IndirectReadSideEffect[-1] : &:r2284_1, &:r2284_17, m2276_8
# 2284| m2284_7(String) = ^IndirectMayWriteSideEffect[-1] : &:r2284_1, &:r2284_17
# 2284| m2284_8(String) = Chi : total:m2276_8, partial:m2284_23, partial:m2284_7
#-----| Goto -> Block 1
# 2281| Block 5
#-----| Goto -> Block 1
# 2283| Block 6
# 2283| Block 5
# 2283| r2283_1(glval<String>) = VariableAddress[s] :
# 2284| v2284_25(void) = NoOp :
# 2284| r2284_26(glval<String>) = VariableAddress[s] :
# 2284| r2284_27(glval<unknown>) = FunctionAddress[~String] :
# 2284| v2284_28(void) = Call[~String] : func:r2284_27, this:r2284_26
# 2284| m2284_29(unknown) = ^CallSideEffect : ~m2276_6
# 2284| m2284_30(unknown) = Chi : total:m2276_6, partial:m2284_29
# 2284| v2284_31(void) = ^IndirectReadSideEffect[-1] : &:r2284_26, m2276_8
# 2284| m2284_32(String) = ^IndirectMayWriteSideEffect[-1] : &:r2284_26
# 2284| m2284_33(String) = Chi : total:m2276_8, partial:m2284_32
# 2284| v2284_17(void) = NoOp :
# 2284| r2284_18(glval<String>) = VariableAddress[s] :
# 2284| r2284_19(glval<unknown>) = FunctionAddress[~String] :
# 2284| v2284_20(void) = Call[~String] : func:r2284_19, this:r2284_18
# 2284| m2284_21(unknown) = ^CallSideEffect : ~m2276_6
# 2284| m2284_22(unknown) = Chi : total:m2276_6, partial:m2284_21
# 2284| v2284_23(void) = ^IndirectReadSideEffect[-1] : &:r2284_18, m2276_8
# 2284| m2284_24(String) = ^IndirectMayWriteSideEffect[-1] : &:r2284_18
# 2284| m2284_25(String) = Chi : total:m2276_8, partial:m2284_24
#-----| Goto -> Block 1
# 2286| int IfReturnDestructors3(bool)
@@ -14387,6 +14383,37 @@ ir.cpp:
# 2292| m2292_16(String) = Chi : total:m2287_8, partial:m2292_15
#-----| Goto -> Block 1
# 2294| void VoidReturnDestructors()
# 2294| Block 0
# 2294| v2294_1(void) = EnterFunction :
# 2294| m2294_2(unknown) = AliasedDefinition :
# 2294| m2294_3(unknown) = InitializeNonLocal :
# 2294| m2294_4(unknown) = Chi : total:m2294_2, partial:m2294_3
# 2295| r2295_1(glval<String>) = VariableAddress[s] :
# 2295| m2295_2(String) = Uninitialized[s] : &:r2295_1
# 2295| r2295_3(glval<unknown>) = FunctionAddress[String] :
# 2295| v2295_4(void) = Call[String] : func:r2295_3, this:r2295_1
# 2295| m2295_5(unknown) = ^CallSideEffect : ~m2294_4
# 2295| m2295_6(unknown) = Chi : total:m2294_4, partial:m2295_5
# 2295| m2295_7(String) = ^IndirectMayWriteSideEffect[-1] : &:r2295_1
# 2295| m2295_8(String) = Chi : total:m2295_2, partial:m2295_7
# 2296| r2296_1(glval<unknown>) = FunctionAddress[VoidFunc] :
# 2296| v2296_2(void) = Call[VoidFunc] : func:r2296_1
# 2296| m2296_3(unknown) = ^CallSideEffect : ~m2295_6
# 2296| m2296_4(unknown) = Chi : total:m2295_6, partial:m2296_3
# 2296| v2296_5(void) = NoOp :
# 2297| r2297_1(glval<String>) = VariableAddress[s] :
# 2297| r2297_2(glval<unknown>) = FunctionAddress[~String] :
# 2297| v2297_3(void) = Call[~String] : func:r2297_2, this:r2297_1
# 2297| m2297_4(unknown) = ^CallSideEffect : ~m2296_4
# 2297| m2297_5(unknown) = Chi : total:m2296_4, partial:m2297_4
# 2297| v2297_6(void) = ^IndirectReadSideEffect[-1] : &:r2297_1, m2295_8
# 2297| m2297_7(String) = ^IndirectMayWriteSideEffect[-1] : &:r2297_1
# 2297| m2297_8(String) = Chi : total:m2295_8, partial:m2297_7
# 2294| v2294_5(void) = ReturnVoid :
# 2294| v2294_6(void) = AliasedUse : ~m2297_5
# 2294| v2294_7(void) = ExitFunction :
perf-regression.cpp:
# 6| void Big::Big()
# 6| Block 0

View File

@@ -2291,4 +2291,9 @@ int IfReturnDestructors3(bool b) {
return 0;
}
void VoidReturnDestructors() {
String s;
return VoidFunc();
}
// semmle-extractor-options: -std=c++20 --clang

View File

@@ -11765,11 +11765,8 @@
| ir.cpp:2275:6:2275:24 | ChiPartial | partial:m2275_3 |
| ir.cpp:2275:6:2275:24 | ChiTotal | total:m2275_2 |
| ir.cpp:2275:6:2275:24 | Phi | from 2:~m2284_5 |
| ir.cpp:2275:6:2275:24 | Phi | from 2:~m2284_21 |
| ir.cpp:2275:6:2275:24 | Phi | from 3:~m2284_13 |
| ir.cpp:2275:6:2275:24 | Phi | from 5:~m2284_5 |
| ir.cpp:2275:6:2275:24 | Phi | from 5:~m2284_21 |
| ir.cpp:2275:6:2275:24 | Phi | from 6:~m2284_30 |
| ir.cpp:2275:6:2275:24 | Phi | from 4:~m2284_13 |
| ir.cpp:2275:6:2275:24 | Phi | from 5:~m2284_22 |
| ir.cpp:2275:6:2275:24 | SideEffect | ~m2275_7 |
| ir.cpp:2275:31:2275:31 | Address | &:r2275_5 |
| ir.cpp:2276:12:2276:12 | Address | &:r2276_1 |
@@ -11788,49 +11785,39 @@
| ir.cpp:2280:8:2280:8 | Condition | r2280_2 |
| ir.cpp:2280:8:2280:8 | Load | m2275_6 |
| ir.cpp:2281:16:2281:23 | CallTarget | func:r2281_1 |
| ir.cpp:2281:16:2281:23 | CallTarget | func:r2281_6 |
| ir.cpp:2281:16:2281:23 | ChiPartial | partial:m2281_3 |
| ir.cpp:2281:16:2281:23 | ChiPartial | partial:m2281_8 |
| ir.cpp:2281:16:2281:23 | ChiTotal | total:m2276_6 |
| ir.cpp:2281:16:2281:23 | SideEffect | ~m2276_6 |
| ir.cpp:2284:1:2284:1 | Address | &:r2284_1 |
| ir.cpp:2284:1:2284:1 | Address | &:r2284_1 |
| ir.cpp:2284:1:2284:1 | Address | &:r2284_9 |
| ir.cpp:2284:1:2284:1 | Address | &:r2284_9 |
| ir.cpp:2284:1:2284:1 | Address | &:r2284_17 |
| ir.cpp:2284:1:2284:1 | Address | &:r2284_17 |
| ir.cpp:2284:1:2284:1 | Address | &:r2284_26 |
| ir.cpp:2284:1:2284:1 | Address | &:r2284_26 |
| ir.cpp:2284:1:2284:1 | Address | &:r2284_18 |
| ir.cpp:2284:1:2284:1 | Address | &:r2284_18 |
| ir.cpp:2284:1:2284:1 | Arg(this) | this:r2284_1 |
| ir.cpp:2284:1:2284:1 | Arg(this) | this:r2284_9 |
| ir.cpp:2284:1:2284:1 | Arg(this) | this:r2284_17 |
| ir.cpp:2284:1:2284:1 | Arg(this) | this:r2284_26 |
| ir.cpp:2284:1:2284:1 | Arg(this) | this:r2284_18 |
| ir.cpp:2284:1:2284:1 | CallTarget | func:r2284_2 |
| ir.cpp:2284:1:2284:1 | CallTarget | func:r2284_10 |
| ir.cpp:2284:1:2284:1 | CallTarget | func:r2284_18 |
| ir.cpp:2284:1:2284:1 | CallTarget | func:r2284_27 |
| ir.cpp:2284:1:2284:1 | CallTarget | func:r2284_19 |
| ir.cpp:2284:1:2284:1 | ChiPartial | partial:m2284_4 |
| ir.cpp:2284:1:2284:1 | ChiPartial | partial:m2284_7 |
| ir.cpp:2284:1:2284:1 | ChiPartial | partial:m2284_12 |
| ir.cpp:2284:1:2284:1 | ChiPartial | partial:m2284_15 |
| ir.cpp:2284:1:2284:1 | ChiPartial | partial:m2284_20 |
| ir.cpp:2284:1:2284:1 | ChiPartial | partial:m2284_23 |
| ir.cpp:2284:1:2284:1 | ChiPartial | partial:m2284_29 |
| ir.cpp:2284:1:2284:1 | ChiPartial | partial:m2284_32 |
| ir.cpp:2284:1:2284:1 | ChiPartial | partial:m2284_21 |
| ir.cpp:2284:1:2284:1 | ChiPartial | partial:m2284_24 |
| ir.cpp:2284:1:2284:1 | ChiTotal | total:m2276_6 |
| ir.cpp:2284:1:2284:1 | ChiTotal | total:m2276_6 |
| ir.cpp:2284:1:2284:1 | ChiTotal | total:m2276_8 |
| ir.cpp:2284:1:2284:1 | ChiTotal | total:m2276_8 |
| ir.cpp:2284:1:2284:1 | ChiTotal | total:m2276_8 |
| ir.cpp:2284:1:2284:1 | ChiTotal | total:m2281_4 |
| ir.cpp:2284:1:2284:1 | ChiTotal | total:m2281_9 |
| ir.cpp:2284:1:2284:1 | SideEffect | m2276_8 |
| ir.cpp:2284:1:2284:1 | SideEffect | m2276_8 |
| ir.cpp:2284:1:2284:1 | SideEffect | m2276_8 |
| ir.cpp:2284:1:2284:1 | SideEffect | ~m2276_6 |
| ir.cpp:2284:1:2284:1 | SideEffect | ~m2276_6 |
| ir.cpp:2284:1:2284:1 | SideEffect | ~m2281_4 |
| ir.cpp:2284:1:2284:1 | SideEffect | ~m2281_9 |
| ir.cpp:2286:5:2286:24 | Address | &:r2286_9 |
| ir.cpp:2286:5:2286:24 | ChiPartial | partial:m2286_3 |
| ir.cpp:2286:5:2286:24 | ChiTotal | total:m2286_2 |
@@ -11877,6 +11864,32 @@
| ir.cpp:2292:1:2292:1 | SideEffect | m2287_8 |
| ir.cpp:2292:1:2292:1 | SideEffect | ~m2287_6 |
| ir.cpp:2292:1:2292:1 | SideEffect | ~m2287_6 |
| ir.cpp:2294:6:2294:26 | ChiPartial | partial:m2294_3 |
| ir.cpp:2294:6:2294:26 | ChiTotal | total:m2294_2 |
| ir.cpp:2294:6:2294:26 | SideEffect | ~m2297_5 |
| ir.cpp:2295:12:2295:12 | Address | &:r2295_1 |
| ir.cpp:2295:12:2295:12 | Address | &:r2295_1 |
| ir.cpp:2295:12:2295:12 | Arg(this) | this:r2295_1 |
| ir.cpp:2295:12:2295:12 | CallTarget | func:r2295_3 |
| ir.cpp:2295:12:2295:12 | ChiPartial | partial:m2295_5 |
| ir.cpp:2295:12:2295:12 | ChiPartial | partial:m2295_7 |
| ir.cpp:2295:12:2295:12 | ChiTotal | total:m2294_4 |
| ir.cpp:2295:12:2295:12 | ChiTotal | total:m2295_2 |
| ir.cpp:2295:12:2295:12 | SideEffect | ~m2294_4 |
| ir.cpp:2296:12:2296:19 | CallTarget | func:r2296_1 |
| ir.cpp:2296:12:2296:19 | ChiPartial | partial:m2296_3 |
| ir.cpp:2296:12:2296:19 | ChiTotal | total:m2295_6 |
| ir.cpp:2296:12:2296:19 | SideEffect | ~m2295_6 |
| ir.cpp:2297:1:2297:1 | Address | &:r2297_1 |
| ir.cpp:2297:1:2297:1 | Address | &:r2297_1 |
| ir.cpp:2297:1:2297:1 | Arg(this) | this:r2297_1 |
| ir.cpp:2297:1:2297:1 | CallTarget | func:r2297_2 |
| ir.cpp:2297:1:2297:1 | ChiPartial | partial:m2297_4 |
| ir.cpp:2297:1:2297:1 | ChiPartial | partial:m2297_7 |
| ir.cpp:2297:1:2297:1 | ChiTotal | total:m2295_8 |
| ir.cpp:2297:1:2297:1 | ChiTotal | total:m2296_4 |
| ir.cpp:2297:1:2297:1 | SideEffect | m2295_8 |
| ir.cpp:2297:1:2297:1 | SideEffect | ~m2296_4 |
| perf-regression.cpp:6:3:6:5 | Address | &:r6_5 |
| perf-regression.cpp:6:3:6:5 | Address | &:r6_5 |
| perf-regression.cpp:6:3:6:5 | Address | &:r6_7 |

View File

@@ -13242,16 +13242,36 @@ ir.cpp:
# 2277| r2277_1(glval<bool>) = VariableAddress[b] :
# 2277| r2277_2(bool) = Load[b] : &:r2277_1, ~m?
# 2277| v2277_3(void) = ConditionalBranch : r2277_2
#-----| False -> Block 4
#-----| True -> Block 3
#-----| False -> Block 3
#-----| True -> Block 2
# 2275| Block 1
# 2275| v2275_6(void) = ReturnVoid :
# 2275| v2275_7(void) = AliasedUse : ~m?
# 2275| v2275_8(void) = ExitFunction :
# 2278| Block 3
# 2278| Block 2
# 2278| v2278_1(void) = NoOp :
# 2284| r2284_1(glval<String>) = VariableAddress[s] :
# 2284| r2284_2(glval<unknown>) = FunctionAddress[~String] :
# 2284| v2284_3(void) = Call[~String] : func:r2284_2, this:r2284_1
# 2284| mu2284_4(unknown) = ^CallSideEffect : ~m?
# 2284| v2284_5(void) = ^IndirectReadSideEffect[-1] : &:r2284_1, ~m?
# 2284| mu2284_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r2284_1
#-----| Goto -> Block 1
# 2280| Block 3
# 2280| r2280_1(glval<bool>) = VariableAddress[b] :
# 2280| r2280_2(bool) = Load[b] : &:r2280_1, ~m?
# 2280| v2280_3(void) = ConditionalBranch : r2280_2
#-----| False -> Block 5
#-----| True -> Block 4
# 2281| Block 4
# 2281| r2281_1(glval<unknown>) = FunctionAddress[VoidFunc] :
# 2281| v2281_2(void) = Call[VoidFunc] : func:r2281_1
# 2281| mu2281_3(unknown) = ^CallSideEffect : ~m?
# 2281| v2281_4(void) = NoOp :
# 2284| r2284_7(glval<String>) = VariableAddress[s] :
# 2284| r2284_8(glval<unknown>) = FunctionAddress[~String] :
# 2284| v2284_9(void) = Call[~String] : func:r2284_8, this:r2284_7
@@ -13260,39 +13280,15 @@ ir.cpp:
# 2284| mu2284_12(String) = ^IndirectMayWriteSideEffect[-1] : &:r2284_7
#-----| Goto -> Block 1
# 2280| Block 4
# 2280| r2280_1(glval<bool>) = VariableAddress[b] :
# 2280| r2280_2(bool) = Load[b] : &:r2280_1, ~m?
# 2280| v2280_3(void) = ConditionalBranch : r2280_2
#-----| False -> Block 6
#-----| True -> Block 5
#-----| True -> Block 5
# 2281| Block 5
# 2281| r2281_5(glval<unknown>) = FunctionAddress[VoidFunc] :
# 2281| v2281_6(void) = Call[VoidFunc] : func:r2281_1, func:r2281_5
# 2281| mu2281_7(unknown) = ^CallSideEffect : ~m?
# 2281| v2281_8(void) = NoOp :
# 2284| r2284_13(glval<String>) = VariableAddress[s] :
# 2284| r2284_14(glval<unknown>) = FunctionAddress[~String] :
# 2284| v2284_3(void) = Call[~String] : func:r2284_14, func:r2284_2, this:r2284_1, this:r2284_13
# 2284| mu2284_4(unknown) = ^CallSideEffect : ~m?
# 2284| v2284_5(void) = ^IndirectReadSideEffect[-1] : &:r2284_1, &:r2284_13, ~m?
# 2284| mu2284_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r2284_1, &:r2284_13
#-----| Goto -> Block 1
# 2281| Block 5
#-----| Goto -> Block 1
# 2283| Block 6
# 2283| Block 5
# 2283| r2283_1(glval<String>) = VariableAddress[s] :
# 2284| v2284_19(void) = NoOp :
# 2284| r2284_20(glval<String>) = VariableAddress[s] :
# 2284| r2284_21(glval<unknown>) = FunctionAddress[~String] :
# 2284| v2284_22(void) = Call[~String] : func:r2284_21, this:r2284_20
# 2284| mu2284_23(unknown) = ^CallSideEffect : ~m?
# 2284| v2284_24(void) = ^IndirectReadSideEffect[-1] : &:r2284_20, ~m?
# 2284| mu2284_25(String) = ^IndirectMayWriteSideEffect[-1] : &:r2284_20
# 2284| v2284_13(void) = NoOp :
# 2284| r2284_14(glval<String>) = VariableAddress[s] :
# 2284| r2284_15(glval<unknown>) = FunctionAddress[~String] :
# 2284| v2284_16(void) = Call[~String] : func:r2284_15, this:r2284_14
# 2284| mu2284_17(unknown) = ^CallSideEffect : ~m?
# 2284| v2284_18(void) = ^IndirectReadSideEffect[-1] : &:r2284_14, ~m?
# 2284| mu2284_19(String) = ^IndirectMayWriteSideEffect[-1] : &:r2284_14
#-----| Goto -> Block 1
# 2286| int IfReturnDestructors3(bool)
@@ -13344,6 +13340,31 @@ ir.cpp:
# 2292| mu2292_12(String) = ^IndirectMayWriteSideEffect[-1] : &:r2292_7
#-----| Goto -> Block 1
# 2294| void VoidReturnDestructors()
# 2294| Block 0
# 2294| v2294_1(void) = EnterFunction :
# 2294| mu2294_2(unknown) = AliasedDefinition :
# 2294| mu2294_3(unknown) = InitializeNonLocal :
# 2295| r2295_1(glval<String>) = VariableAddress[s] :
# 2295| mu2295_2(String) = Uninitialized[s] : &:r2295_1
# 2295| r2295_3(glval<unknown>) = FunctionAddress[String] :
# 2295| v2295_4(void) = Call[String] : func:r2295_3, this:r2295_1
# 2295| mu2295_5(unknown) = ^CallSideEffect : ~m?
# 2295| mu2295_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r2295_1
# 2296| r2296_1(glval<unknown>) = FunctionAddress[VoidFunc] :
# 2296| v2296_2(void) = Call[VoidFunc] : func:r2296_1
# 2296| mu2296_3(unknown) = ^CallSideEffect : ~m?
# 2296| v2296_4(void) = NoOp :
# 2297| r2297_1(glval<String>) = VariableAddress[s] :
# 2297| r2297_2(glval<unknown>) = FunctionAddress[~String] :
# 2297| v2297_3(void) = Call[~String] : func:r2297_2, this:r2297_1
# 2297| mu2297_4(unknown) = ^CallSideEffect : ~m?
# 2297| v2297_5(void) = ^IndirectReadSideEffect[-1] : &:r2297_1, ~m?
# 2297| mu2297_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r2297_1
# 2294| v2294_4(void) = ReturnVoid :
# 2294| v2294_5(void) = AliasedUse : ~m?
# 2294| v2294_6(void) = ExitFunction :
perf-regression.cpp:
# 6| void Big::Big()
# 6| Block 0