Merge pull request #15670 from jketema/destructors7

C++: Add IR tests for destruction of static locals
This commit is contained in:
Jeroen Ketema
2024-02-21 12:54:38 +01:00
committed by GitHub
6 changed files with 474 additions and 20 deletions

View File

@@ -10404,24 +10404,6 @@ ir.cpp:
# 1245| Type = [PointerType] const char *
# 1245| ValueCategory = prvalue(load)
# 1246| getStmt(3): [ReturnStmt] return ...
# 1246| getImplicitDestructorCall(0): [DestructorCall] call to ~String
# 1246| Type = [VoidType] void
# 1246| ValueCategory = prvalue
# 1246| getQualifier(): [VariableAccess] c
# 1246| Type = [Struct] String
# 1246| ValueCategory = lvalue
# 1246| getImplicitDestructorCall(1): [DestructorCall] call to ~String
# 1246| Type = [VoidType] void
# 1246| ValueCategory = prvalue
# 1246| getQualifier(): [VariableAccess] b
# 1246| Type = [Struct] String
# 1246| ValueCategory = lvalue
# 1246| getImplicitDestructorCall(2): [DestructorCall] call to ~String
# 1246| Type = [VoidType] void
# 1246| ValueCategory = prvalue
# 1246| getQualifier(): [VariableAccess] a
# 1246| Type = [Struct] String
# 1246| ValueCategory = lvalue
# 1250| [TopLevelFunction] char* strcpy(char*, char const*)
# 1250| <params>:
# 1250| getParameter(0): [Parameter] destination
@@ -16901,6 +16883,96 @@ ir.cpp:
# 2167| getQualifier(): [VariableAccess] x
# 2167| Type = [Class] ClassWithDestructor
# 2167| ValueCategory = lvalue
# 2169| [TopLevelFunction] void static_variable_with_destructor_1()
# 2169| <params>:
# 2169| getEntryPoint(): [BlockStmt] { ... }
# 2170| getStmt(0): [DeclStmt] declaration
# 2170| getDeclarationEntry(0): [VariableDeclarationEntry] definition of a
# 2170| Type = [Class] ClassWithDestructor
# 2170| getVariable().getInitializer(): [Initializer] initializer for a
# 2170| getExpr(): [ConstructorCall] call to ClassWithDestructor
# 2170| Type = [VoidType] void
# 2170| ValueCategory = prvalue
# 2171| getStmt(1): [DeclStmt] declaration
# 2171| getDeclarationEntry(0): [VariableDeclarationEntry] definition of b
# 2171| Type = [Class] ClassWithDestructor
#-----| getVariable().getInitializer(): [Initializer] initializer for b
#-----| getExpr(): [ConstructorCall] call to ClassWithDestructor
#-----| Type = [VoidType] void
#-----| ValueCategory = prvalue
# 2172| getStmt(2): [ReturnStmt] return ...
# 2172| getImplicitDestructorCall(0): [DestructorCall] call to ~ClassWithDestructor
# 2172| Type = [VoidType] void
# 2172| ValueCategory = prvalue
# 2172| getQualifier(): [VariableAccess] a
# 2172| Type = [Class] ClassWithDestructor
# 2172| ValueCategory = lvalue
# 2174| [TopLevelFunction] void static_variable_with_destructor_2()
# 2174| <params>:
# 2174| getEntryPoint(): [BlockStmt] { ... }
# 2175| getStmt(0): [DeclStmt] declaration
# 2175| getDeclarationEntry(0): [VariableDeclarationEntry] definition of a
# 2175| Type = [Class] ClassWithDestructor
#-----| getVariable().getInitializer(): [Initializer] initializer for a
#-----| getExpr(): [ConstructorCall] call to ClassWithDestructor
#-----| Type = [VoidType] void
#-----| ValueCategory = prvalue
# 2176| getStmt(1): [DeclStmt] declaration
# 2176| getDeclarationEntry(0): [VariableDeclarationEntry] definition of b
# 2176| Type = [Class] ClassWithDestructor
# 2176| getVariable().getInitializer(): [Initializer] initializer for b
# 2176| getExpr(): [ConstructorCall] call to ClassWithDestructor
# 2176| Type = [VoidType] void
# 2176| ValueCategory = prvalue
# 2177| getStmt(2): [ReturnStmt] return ...
# 2177| getImplicitDestructorCall(0): [DestructorCall] call to ~ClassWithDestructor
# 2177| Type = [VoidType] void
# 2177| ValueCategory = prvalue
# 2177| getQualifier(): [VariableAccess] b
# 2177| Type = [Class] ClassWithDestructor
# 2177| ValueCategory = lvalue
# 2179| [TopLevelFunction] void static_variable_with_destructor_3()
# 2179| <params>:
# 2179| getEntryPoint(): [BlockStmt] { ... }
# 2180| getStmt(0): [DeclStmt] declaration
# 2180| getDeclarationEntry(0): [VariableDeclarationEntry] definition of a
# 2180| Type = [Class] ClassWithDestructor
# 2180| getVariable().getInitializer(): [Initializer] initializer for a
# 2180| getExpr(): [ConstructorCall] call to ClassWithDestructor
# 2180| Type = [VoidType] void
# 2180| ValueCategory = prvalue
# 2181| getStmt(1): [DeclStmt] declaration
# 2181| getDeclarationEntry(0): [VariableDeclarationEntry] definition of b
# 2181| Type = [Class] ClassWithDestructor
# 2181| getVariable().getInitializer(): [Initializer] initializer for b
# 2181| getExpr(): [ConstructorCall] call to ClassWithDestructor
# 2181| Type = [VoidType] void
# 2181| ValueCategory = prvalue
# 2182| getStmt(2): [DeclStmt] declaration
# 2182| getDeclarationEntry(0): [VariableDeclarationEntry] definition of c
# 2182| Type = [Class] ClassWithDestructor
#-----| getVariable().getInitializer(): [Initializer] initializer for c
#-----| getExpr(): [ConstructorCall] call to ClassWithDestructor
#-----| Type = [VoidType] void
#-----| ValueCategory = prvalue
# 2183| getStmt(3): [ReturnStmt] return ...
# 2183| getImplicitDestructorCall(0): [DestructorCall] call to ~ClassWithDestructor
# 2183| Type = [VoidType] void
# 2183| ValueCategory = prvalue
# 2183| getQualifier(): [VariableAccess] b
# 2183| Type = [Class] ClassWithDestructor
# 2183| ValueCategory = lvalue
# 2183| getImplicitDestructorCall(1): [DestructorCall] call to ~ClassWithDestructor
# 2183| Type = [VoidType] void
# 2183| ValueCategory = prvalue
# 2183| getQualifier(): [VariableAccess] a
# 2183| Type = [Class] ClassWithDestructor
# 2183| ValueCategory = lvalue
# 2185| [GlobalVariable] ClassWithDestructor global_class_with_destructor
# 2185| getInitializer(): [Initializer] initializer for global_class_with_destructor
# 2185| getExpr(): [ConstructorCall] call to ClassWithDestructor
# 2185| Type = [VoidType] void
# 2185| ValueCategory = prvalue
perf-regression.cpp:
# 4| [CopyAssignmentOperator] Big& Big::operator=(Big const&)
# 4| <params>:

View File

@@ -13030,6 +13030,149 @@ ir.cpp:
# 2137| Block 21
# 2137| v2137_13(void) = Unreached :
# 2169| void static_variable_with_destructor_1()
# 2169| Block 0
# 2169| v2169_1(void) = EnterFunction :
# 2169| m2169_2(unknown) = AliasedDefinition :
# 2169| m2169_3(unknown) = InitializeNonLocal :
# 2169| m2169_4(unknown) = Chi : total:m2169_2, partial:m2169_3
# 2170| r2170_1(glval<ClassWithDestructor>) = VariableAddress[a] :
# 2170| m2170_2(ClassWithDestructor) = Uninitialized[a] : &:r2170_1
# 2170| r2170_3(glval<unknown>) = FunctionAddress[ClassWithDestructor] :
# 2170| v2170_4(void) = Call[ClassWithDestructor] : func:r2170_3, this:r2170_1
# 2170| m2170_5(unknown) = ^CallSideEffect : ~m2169_4
# 2170| m2170_6(unknown) = Chi : total:m2169_4, partial:m2170_5
# 2170| m2170_7(ClassWithDestructor) = ^IndirectMayWriteSideEffect[-1] : &:r2170_1
# 2170| m2170_8(ClassWithDestructor) = Chi : total:m2170_2, partial:m2170_7
# 2171| r2171_1(glval<bool>) = VariableAddress[b#init] :
# 2171| r2171_2(bool) = Load[b#init] : &:r2171_1, ~m2170_6
# 2171| v2171_3(void) = ConditionalBranch : r2171_2
#-----| False -> Block 1
#-----| True -> Block 2
# 2171| Block 1
# 2171| r2171_4(glval<ClassWithDestructor>) = VariableAddress[b] :
#-----| r0_1(glval<unknown>) = FunctionAddress[ClassWithDestructor] :
#-----| v0_2(void) = Call[ClassWithDestructor] : func:r0_1, this:r2171_4
#-----| m0_3(unknown) = ^CallSideEffect : ~m2170_6
#-----| m0_4(unknown) = Chi : total:m2170_6, partial:m0_3
#-----| m0_5(ClassWithDestructor) = ^IndirectMayWriteSideEffect[-1] : &:r2171_4
#-----| m0_6(unknown) = Chi : total:m0_4, partial:m0_5
# 2171| r2171_5(bool) = Constant[1] :
# 2171| m2171_6(bool) = Store[b#init] : &:r2171_1, r2171_5
# 2171| m2171_7(unknown) = Chi : total:m0_6, partial:m2171_6
#-----| Goto -> Block 2
# 2172| Block 2
# 2172| m2172_1(unknown) = Phi : from 0:~m2170_6, from 1:~m2171_7
# 2172| v2172_2(void) = NoOp :
# 2169| v2169_5(void) = ReturnVoid :
# 2169| v2169_6(void) = AliasedUse : ~m2172_1
# 2169| v2169_7(void) = ExitFunction :
# 2174| void static_variable_with_destructor_2()
# 2174| Block 0
# 2174| v2174_1(void) = EnterFunction :
# 2174| m2174_2(unknown) = AliasedDefinition :
# 2174| m2174_3(unknown) = InitializeNonLocal :
# 2174| m2174_4(unknown) = Chi : total:m2174_2, partial:m2174_3
# 2175| r2175_1(glval<bool>) = VariableAddress[a#init] :
# 2175| r2175_2(bool) = Load[a#init] : &:r2175_1, ~m2174_3
# 2175| v2175_3(void) = ConditionalBranch : r2175_2
#-----| False -> Block 1
#-----| True -> Block 2
# 2175| Block 1
# 2175| r2175_4(glval<ClassWithDestructor>) = VariableAddress[a] :
#-----| r0_1(glval<unknown>) = FunctionAddress[ClassWithDestructor] :
#-----| v0_2(void) = Call[ClassWithDestructor] : func:r0_1, this:r2175_4
#-----| m0_3(unknown) = ^CallSideEffect : ~m2174_4
#-----| m0_4(unknown) = Chi : total:m2174_4, partial:m0_3
#-----| m0_5(ClassWithDestructor) = ^IndirectMayWriteSideEffect[-1] : &:r2175_4
#-----| m0_6(unknown) = Chi : total:m0_4, partial:m0_5
# 2175| r2175_5(bool) = Constant[1] :
# 2175| m2175_6(bool) = Store[a#init] : &:r2175_1, r2175_5
# 2175| m2175_7(unknown) = Chi : total:m0_6, partial:m2175_6
#-----| Goto -> Block 2
# 2176| Block 2
# 2176| m2176_1(unknown) = Phi : from 0:~m2174_4, from 1:~m2175_7
# 2176| r2176_2(glval<ClassWithDestructor>) = VariableAddress[b] :
# 2176| m2176_3(ClassWithDestructor) = Uninitialized[b] : &:r2176_2
# 2176| r2176_4(glval<unknown>) = FunctionAddress[ClassWithDestructor] :
# 2176| v2176_5(void) = Call[ClassWithDestructor] : func:r2176_4, this:r2176_2
# 2176| m2176_6(unknown) = ^CallSideEffect : ~m2176_1
# 2176| m2176_7(unknown) = Chi : total:m2176_1, partial:m2176_6
# 2176| m2176_8(ClassWithDestructor) = ^IndirectMayWriteSideEffect[-1] : &:r2176_2
# 2176| m2176_9(ClassWithDestructor) = Chi : total:m2176_3, partial:m2176_8
# 2177| v2177_1(void) = NoOp :
# 2174| v2174_5(void) = ReturnVoid :
# 2174| v2174_6(void) = AliasedUse : ~m2176_7
# 2174| v2174_7(void) = ExitFunction :
# 2179| void static_variable_with_destructor_3()
# 2179| Block 0
# 2179| v2179_1(void) = EnterFunction :
# 2179| m2179_2(unknown) = AliasedDefinition :
# 2179| m2179_3(unknown) = InitializeNonLocal :
# 2179| m2179_4(unknown) = Chi : total:m2179_2, partial:m2179_3
# 2180| r2180_1(glval<ClassWithDestructor>) = VariableAddress[a] :
# 2180| m2180_2(ClassWithDestructor) = Uninitialized[a] : &:r2180_1
# 2180| r2180_3(glval<unknown>) = FunctionAddress[ClassWithDestructor] :
# 2180| v2180_4(void) = Call[ClassWithDestructor] : func:r2180_3, this:r2180_1
# 2180| m2180_5(unknown) = ^CallSideEffect : ~m2179_4
# 2180| m2180_6(unknown) = Chi : total:m2179_4, partial:m2180_5
# 2180| m2180_7(ClassWithDestructor) = ^IndirectMayWriteSideEffect[-1] : &:r2180_1
# 2180| m2180_8(ClassWithDestructor) = Chi : total:m2180_2, partial:m2180_7
# 2181| r2181_1(glval<ClassWithDestructor>) = VariableAddress[b] :
# 2181| m2181_2(ClassWithDestructor) = Uninitialized[b] : &:r2181_1
# 2181| r2181_3(glval<unknown>) = FunctionAddress[ClassWithDestructor] :
# 2181| v2181_4(void) = Call[ClassWithDestructor] : func:r2181_3, this:r2181_1
# 2181| m2181_5(unknown) = ^CallSideEffect : ~m2180_6
# 2181| m2181_6(unknown) = Chi : total:m2180_6, partial:m2181_5
# 2181| m2181_7(ClassWithDestructor) = ^IndirectMayWriteSideEffect[-1] : &:r2181_1
# 2181| m2181_8(ClassWithDestructor) = Chi : total:m2181_2, partial:m2181_7
# 2182| r2182_1(glval<bool>) = VariableAddress[c#init] :
# 2182| r2182_2(bool) = Load[c#init] : &:r2182_1, ~m2181_6
# 2182| v2182_3(void) = ConditionalBranch : r2182_2
#-----| False -> Block 1
#-----| True -> Block 2
# 2182| Block 1
# 2182| r2182_4(glval<ClassWithDestructor>) = VariableAddress[c] :
#-----| r0_1(glval<unknown>) = FunctionAddress[ClassWithDestructor] :
#-----| v0_2(void) = Call[ClassWithDestructor] : func:r0_1, this:r2182_4
#-----| m0_3(unknown) = ^CallSideEffect : ~m2181_6
#-----| m0_4(unknown) = Chi : total:m2181_6, partial:m0_3
#-----| m0_5(ClassWithDestructor) = ^IndirectMayWriteSideEffect[-1] : &:r2182_4
#-----| m0_6(unknown) = Chi : total:m0_4, partial:m0_5
# 2182| r2182_5(bool) = Constant[1] :
# 2182| m2182_6(bool) = Store[c#init] : &:r2182_1, r2182_5
# 2182| m2182_7(unknown) = Chi : total:m0_6, partial:m2182_6
#-----| Goto -> Block 2
# 2183| Block 2
# 2183| m2183_1(unknown) = Phi : from 0:~m2181_6, from 1:~m2182_7
# 2183| v2183_2(void) = NoOp :
# 2179| v2179_5(void) = ReturnVoid :
# 2179| v2179_6(void) = AliasedUse : ~m2183_1
# 2179| v2179_7(void) = ExitFunction :
# 2185| ClassWithDestructor global_class_with_destructor
# 2185| Block 0
# 2185| v2185_1(void) = EnterFunction :
# 2185| m2185_2(unknown) = AliasedDefinition :
# 2185| r2185_3(glval<ClassWithDestructor>) = VariableAddress[global_class_with_destructor] :
# 2185| r2185_4(glval<unknown>) = FunctionAddress[ClassWithDestructor] :
# 2185| v2185_5(void) = Call[ClassWithDestructor] : func:r2185_4, this:r2185_3
# 2185| m2185_6(unknown) = ^CallSideEffect : ~m2185_2
# 2185| m2185_7(unknown) = Chi : total:m2185_2, partial:m2185_6
# 2185| m2185_8(ClassWithDestructor) = ^IndirectMayWriteSideEffect[-1] : &:r2185_3
# 2185| m2185_9(unknown) = Chi : total:m2185_7, partial:m2185_8
# 2185| v2185_10(void) = ReturnVoid :
# 2185| v2185_11(void) = AliasedUse : ~m2185_9
# 2185| v2185_12(void) = ExitFunction :
perf-regression.cpp:
# 6| void Big::Big()
# 6| Block 0

View File

@@ -2166,4 +2166,22 @@ void initialization_with_destructor(bool b, char c) {
}
}
void static_variable_with_destructor_1() {
ClassWithDestructor a;
static ClassWithDestructor b;
}
void static_variable_with_destructor_2() {
static ClassWithDestructor a;
ClassWithDestructor b;
}
void static_variable_with_destructor_3() {
ClassWithDestructor a;
ClassWithDestructor b;
static ClassWithDestructor c;
}
static ClassWithDestructor global_class_with_destructor;
// semmle-extractor-options: -std=c++20 --clang

View File

@@ -792,10 +792,19 @@
| file://:0:0:0:0 | Arg(0) | 0:r0_15 |
| file://:0:0:0:0 | Arg(0) | 0:r0_15 |
| file://:0:0:0:0 | CallTarget | func:r0_1 |
| file://:0:0:0:0 | CallTarget | func:r0_1 |
| file://:0:0:0:0 | CallTarget | func:r0_1 |
| file://:0:0:0:0 | CallTarget | func:r0_1 |
| file://:0:0:0:0 | ChiPartial | partial:m0_2 |
| file://:0:0:0:0 | ChiPartial | partial:m0_2 |
| file://:0:0:0:0 | ChiPartial | partial:m0_2 |
| file://:0:0:0:0 | ChiPartial | partial:m0_3 |
| file://:0:0:0:0 | ChiPartial | partial:m0_3 |
| file://:0:0:0:0 | ChiPartial | partial:m0_3 |
| file://:0:0:0:0 | ChiPartial | partial:m0_3 |
| file://:0:0:0:0 | ChiPartial | partial:m0_5 |
| file://:0:0:0:0 | ChiPartial | partial:m0_5 |
| file://:0:0:0:0 | ChiPartial | partial:m0_5 |
| file://:0:0:0:0 | ChiPartial | partial:m0_5 |
| file://:0:0:0:0 | ChiPartial | partial:m0_5 |
| file://:0:0:0:0 | ChiPartial | partial:m0_8 |
@@ -807,6 +816,9 @@
| file://:0:0:0:0 | ChiTotal | total:m0_3 |
| file://:0:0:0:0 | ChiTotal | total:m0_4 |
| file://:0:0:0:0 | ChiTotal | total:m0_4 |
| file://:0:0:0:0 | ChiTotal | total:m0_4 |
| file://:0:0:0:0 | ChiTotal | total:m0_4 |
| file://:0:0:0:0 | ChiTotal | total:m0_4 |
| file://:0:0:0:0 | ChiTotal | total:m754_8 |
| file://:0:0:0:0 | ChiTotal | total:m763_8 |
| file://:0:0:0:0 | ChiTotal | total:m1043_10 |
@@ -816,6 +828,9 @@
| file://:0:0:0:0 | ChiTotal | total:m1718_19 |
| file://:0:0:0:0 | ChiTotal | total:m1836_8 |
| file://:0:0:0:0 | ChiTotal | total:m1841_8 |
| file://:0:0:0:0 | ChiTotal | total:m2170_6 |
| file://:0:0:0:0 | ChiTotal | total:m2174_4 |
| file://:0:0:0:0 | ChiTotal | total:m2181_6 |
| file://:0:0:0:0 | Left | r0_2 |
| file://:0:0:0:0 | Left | r0_4 |
| file://:0:0:0:0 | Left | r0_7 |
@@ -910,6 +925,9 @@
| file://:0:0:0:0 | SideEffect | ~m1242_4 |
| file://:0:0:0:0 | SideEffect | ~m1449_6 |
| file://:0:0:0:0 | SideEffect | ~m1841_8 |
| file://:0:0:0:0 | SideEffect | ~m2170_6 |
| file://:0:0:0:0 | SideEffect | ~m2174_4 |
| file://:0:0:0:0 | SideEffect | ~m2181_6 |
| file://:0:0:0:0 | StoreValue | r0_1 |
| file://:0:0:0:0 | StoreValue | r0_1 |
| file://:0:0:0:0 | StoreValue | r0_1 |
@@ -10589,6 +10607,93 @@
| ir.cpp:2164:11:2164:11 | Load | m2163_56 |
| ir.cpp:2164:11:2164:16 | Condition | r2164_4 |
| ir.cpp:2164:16:2164:16 | Right | r2164_3 |
| ir.cpp:2169:6:2169:38 | ChiPartial | partial:m2169_3 |
| ir.cpp:2169:6:2169:38 | ChiTotal | total:m2169_2 |
| ir.cpp:2169:6:2169:38 | SideEffect | ~m2172_1 |
| ir.cpp:2170:25:2170:25 | Address | &:r2170_1 |
| ir.cpp:2170:25:2170:25 | Address | &:r2170_1 |
| ir.cpp:2170:25:2170:25 | Arg(this) | this:r2170_1 |
| ir.cpp:2170:25:2170:25 | CallTarget | func:r2170_3 |
| ir.cpp:2170:25:2170:25 | ChiPartial | partial:m2170_5 |
| ir.cpp:2170:25:2170:25 | ChiPartial | partial:m2170_7 |
| ir.cpp:2170:25:2170:25 | ChiTotal | total:m2169_4 |
| ir.cpp:2170:25:2170:25 | ChiTotal | total:m2170_2 |
| ir.cpp:2170:25:2170:25 | SideEffect | ~m2169_4 |
| ir.cpp:2171:32:2171:32 | Address | &:r2171_1 |
| ir.cpp:2171:32:2171:32 | Address | &:r2171_1 |
| ir.cpp:2171:32:2171:32 | Address | &:r2171_4 |
| ir.cpp:2171:32:2171:32 | Arg(this) | this:r2171_4 |
| ir.cpp:2171:32:2171:32 | ChiPartial | partial:m2171_6 |
| ir.cpp:2171:32:2171:32 | ChiTotal | total:m0_6 |
| ir.cpp:2171:32:2171:32 | Condition | r2171_2 |
| ir.cpp:2171:32:2171:32 | Load | ~m2170_6 |
| ir.cpp:2171:32:2171:32 | StoreValue | r2171_5 |
| ir.cpp:2172:1:2172:1 | Phi | from 0:~m2170_6 |
| ir.cpp:2172:1:2172:1 | Phi | from 1:~m2171_7 |
| ir.cpp:2174:6:2174:38 | ChiPartial | partial:m2174_3 |
| ir.cpp:2174:6:2174:38 | ChiTotal | total:m2174_2 |
| ir.cpp:2174:6:2174:38 | SideEffect | ~m2176_7 |
| ir.cpp:2175:32:2175:32 | Address | &:r2175_1 |
| ir.cpp:2175:32:2175:32 | Address | &:r2175_1 |
| ir.cpp:2175:32:2175:32 | Address | &:r2175_4 |
| ir.cpp:2175:32:2175:32 | Arg(this) | this:r2175_4 |
| ir.cpp:2175:32:2175:32 | ChiPartial | partial:m2175_6 |
| ir.cpp:2175:32:2175:32 | ChiTotal | total:m0_6 |
| ir.cpp:2175:32:2175:32 | Condition | r2175_2 |
| ir.cpp:2175:32:2175:32 | Load | ~m2174_3 |
| ir.cpp:2175:32:2175:32 | StoreValue | r2175_5 |
| ir.cpp:2176:25:2176:25 | Address | &:r2176_2 |
| ir.cpp:2176:25:2176:25 | Address | &:r2176_2 |
| ir.cpp:2176:25:2176:25 | Arg(this) | this:r2176_2 |
| ir.cpp:2176:25:2176:25 | CallTarget | func:r2176_4 |
| ir.cpp:2176:25:2176:25 | ChiPartial | partial:m2176_6 |
| ir.cpp:2176:25:2176:25 | ChiPartial | partial:m2176_8 |
| ir.cpp:2176:25:2176:25 | ChiTotal | total:m2176_1 |
| ir.cpp:2176:25:2176:25 | ChiTotal | total:m2176_3 |
| ir.cpp:2176:25:2176:25 | Phi | from 0:~m2174_4 |
| ir.cpp:2176:25:2176:25 | Phi | from 1:~m2175_7 |
| ir.cpp:2176:25:2176:25 | SideEffect | ~m2176_1 |
| ir.cpp:2179:6:2179:38 | ChiPartial | partial:m2179_3 |
| ir.cpp:2179:6:2179:38 | ChiTotal | total:m2179_2 |
| ir.cpp:2179:6:2179:38 | SideEffect | ~m2183_1 |
| ir.cpp:2180:25:2180:25 | Address | &:r2180_1 |
| ir.cpp:2180:25:2180:25 | Address | &:r2180_1 |
| ir.cpp:2180:25:2180:25 | Arg(this) | this:r2180_1 |
| ir.cpp:2180:25:2180:25 | CallTarget | func:r2180_3 |
| ir.cpp:2180:25:2180:25 | ChiPartial | partial:m2180_5 |
| ir.cpp:2180:25:2180:25 | ChiPartial | partial:m2180_7 |
| ir.cpp:2180:25:2180:25 | ChiTotal | total:m2179_4 |
| ir.cpp:2180:25:2180:25 | ChiTotal | total:m2180_2 |
| ir.cpp:2180:25:2180:25 | SideEffect | ~m2179_4 |
| ir.cpp:2181:25:2181:25 | Address | &:r2181_1 |
| ir.cpp:2181:25:2181:25 | Address | &:r2181_1 |
| ir.cpp:2181:25:2181:25 | Arg(this) | this:r2181_1 |
| ir.cpp:2181:25:2181:25 | CallTarget | func:r2181_3 |
| ir.cpp:2181:25:2181:25 | ChiPartial | partial:m2181_5 |
| ir.cpp:2181:25:2181:25 | ChiPartial | partial:m2181_7 |
| ir.cpp:2181:25:2181:25 | ChiTotal | total:m2180_6 |
| ir.cpp:2181:25:2181:25 | ChiTotal | total:m2181_2 |
| ir.cpp:2181:25:2181:25 | SideEffect | ~m2180_6 |
| ir.cpp:2182:32:2182:32 | Address | &:r2182_1 |
| ir.cpp:2182:32:2182:32 | Address | &:r2182_1 |
| ir.cpp:2182:32:2182:32 | Address | &:r2182_4 |
| ir.cpp:2182:32:2182:32 | Arg(this) | this:r2182_4 |
| ir.cpp:2182:32:2182:32 | ChiPartial | partial:m2182_6 |
| ir.cpp:2182:32:2182:32 | ChiTotal | total:m0_6 |
| ir.cpp:2182:32:2182:32 | Condition | r2182_2 |
| ir.cpp:2182:32:2182:32 | Load | ~m2181_6 |
| ir.cpp:2182:32:2182:32 | StoreValue | r2182_5 |
| ir.cpp:2183:1:2183:1 | Phi | from 0:~m2181_6 |
| ir.cpp:2183:1:2183:1 | Phi | from 1:~m2182_7 |
| ir.cpp:2185:28:2185:55 | Address | &:r2185_3 |
| ir.cpp:2185:28:2185:55 | Arg(this) | this:r2185_3 |
| ir.cpp:2185:28:2185:55 | CallTarget | func:r2185_4 |
| ir.cpp:2185:28:2185:55 | ChiPartial | partial:m2185_6 |
| ir.cpp:2185:28:2185:55 | ChiPartial | partial:m2185_8 |
| ir.cpp:2185:28:2185:55 | ChiTotal | total:m2185_2 |
| ir.cpp:2185:28:2185:55 | ChiTotal | total:m2185_7 |
| ir.cpp:2185:28:2185:55 | SideEffect | ~m2185_2 |
| ir.cpp:2185:28:2185:55 | SideEffect | ~m2185_9 |
| 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

@@ -12166,6 +12166,124 @@ ir.cpp:
# 2167| v2167_1(void) = NoOp :
#-----| Goto -> Block 1
# 2169| void static_variable_with_destructor_1()
# 2169| Block 0
# 2169| v2169_1(void) = EnterFunction :
# 2169| mu2169_2(unknown) = AliasedDefinition :
# 2169| mu2169_3(unknown) = InitializeNonLocal :
# 2170| r2170_1(glval<ClassWithDestructor>) = VariableAddress[a] :
# 2170| mu2170_2(ClassWithDestructor) = Uninitialized[a] : &:r2170_1
# 2170| r2170_3(glval<unknown>) = FunctionAddress[ClassWithDestructor] :
# 2170| v2170_4(void) = Call[ClassWithDestructor] : func:r2170_3, this:r2170_1
# 2170| mu2170_5(unknown) = ^CallSideEffect : ~m?
# 2170| mu2170_6(ClassWithDestructor) = ^IndirectMayWriteSideEffect[-1] : &:r2170_1
# 2171| r2171_1(glval<bool>) = VariableAddress[b#init] :
# 2171| r2171_2(bool) = Load[b#init] : &:r2171_1, ~m?
# 2171| v2171_3(void) = ConditionalBranch : r2171_2
#-----| False -> Block 1
#-----| True -> Block 2
# 2171| Block 1
# 2171| r2171_4(glval<ClassWithDestructor>) = VariableAddress[b] :
#-----| r0_1(glval<unknown>) = FunctionAddress[ClassWithDestructor] :
#-----| v0_2(void) = Call[ClassWithDestructor] : func:r0_1, this:r2171_4
#-----| mu0_3(unknown) = ^CallSideEffect : ~m?
#-----| mu0_4(ClassWithDestructor) = ^IndirectMayWriteSideEffect[-1] : &:r2171_4
# 2171| r2171_5(bool) = Constant[1] :
# 2171| mu2171_6(bool) = Store[b#init] : &:r2171_1, r2171_5
#-----| Goto -> Block 2
# 2172| Block 2
# 2172| v2172_1(void) = NoOp :
# 2169| v2169_4(void) = ReturnVoid :
# 2169| v2169_5(void) = AliasedUse : ~m?
# 2169| v2169_6(void) = ExitFunction :
# 2174| void static_variable_with_destructor_2()
# 2174| Block 0
# 2174| v2174_1(void) = EnterFunction :
# 2174| mu2174_2(unknown) = AliasedDefinition :
# 2174| mu2174_3(unknown) = InitializeNonLocal :
# 2175| r2175_1(glval<bool>) = VariableAddress[a#init] :
# 2175| r2175_2(bool) = Load[a#init] : &:r2175_1, ~m?
# 2175| v2175_3(void) = ConditionalBranch : r2175_2
#-----| False -> Block 1
#-----| True -> Block 2
# 2175| Block 1
# 2175| r2175_4(glval<ClassWithDestructor>) = VariableAddress[a] :
#-----| r0_1(glval<unknown>) = FunctionAddress[ClassWithDestructor] :
#-----| v0_2(void) = Call[ClassWithDestructor] : func:r0_1, this:r2175_4
#-----| mu0_3(unknown) = ^CallSideEffect : ~m?
#-----| mu0_4(ClassWithDestructor) = ^IndirectMayWriteSideEffect[-1] : &:r2175_4
# 2175| r2175_5(bool) = Constant[1] :
# 2175| mu2175_6(bool) = Store[a#init] : &:r2175_1, r2175_5
#-----| Goto -> Block 2
# 2176| Block 2
# 2176| r2176_1(glval<ClassWithDestructor>) = VariableAddress[b] :
# 2176| mu2176_2(ClassWithDestructor) = Uninitialized[b] : &:r2176_1
# 2176| r2176_3(glval<unknown>) = FunctionAddress[ClassWithDestructor] :
# 2176| v2176_4(void) = Call[ClassWithDestructor] : func:r2176_3, this:r2176_1
# 2176| mu2176_5(unknown) = ^CallSideEffect : ~m?
# 2176| mu2176_6(ClassWithDestructor) = ^IndirectMayWriteSideEffect[-1] : &:r2176_1
# 2177| v2177_1(void) = NoOp :
# 2174| v2174_4(void) = ReturnVoid :
# 2174| v2174_5(void) = AliasedUse : ~m?
# 2174| v2174_6(void) = ExitFunction :
# 2179| void static_variable_with_destructor_3()
# 2179| Block 0
# 2179| v2179_1(void) = EnterFunction :
# 2179| mu2179_2(unknown) = AliasedDefinition :
# 2179| mu2179_3(unknown) = InitializeNonLocal :
# 2180| r2180_1(glval<ClassWithDestructor>) = VariableAddress[a] :
# 2180| mu2180_2(ClassWithDestructor) = Uninitialized[a] : &:r2180_1
# 2180| r2180_3(glval<unknown>) = FunctionAddress[ClassWithDestructor] :
# 2180| v2180_4(void) = Call[ClassWithDestructor] : func:r2180_3, this:r2180_1
# 2180| mu2180_5(unknown) = ^CallSideEffect : ~m?
# 2180| mu2180_6(ClassWithDestructor) = ^IndirectMayWriteSideEffect[-1] : &:r2180_1
# 2181| r2181_1(glval<ClassWithDestructor>) = VariableAddress[b] :
# 2181| mu2181_2(ClassWithDestructor) = Uninitialized[b] : &:r2181_1
# 2181| r2181_3(glval<unknown>) = FunctionAddress[ClassWithDestructor] :
# 2181| v2181_4(void) = Call[ClassWithDestructor] : func:r2181_3, this:r2181_1
# 2181| mu2181_5(unknown) = ^CallSideEffect : ~m?
# 2181| mu2181_6(ClassWithDestructor) = ^IndirectMayWriteSideEffect[-1] : &:r2181_1
# 2182| r2182_1(glval<bool>) = VariableAddress[c#init] :
# 2182| r2182_2(bool) = Load[c#init] : &:r2182_1, ~m?
# 2182| v2182_3(void) = ConditionalBranch : r2182_2
#-----| False -> Block 1
#-----| True -> Block 2
# 2182| Block 1
# 2182| r2182_4(glval<ClassWithDestructor>) = VariableAddress[c] :
#-----| r0_1(glval<unknown>) = FunctionAddress[ClassWithDestructor] :
#-----| v0_2(void) = Call[ClassWithDestructor] : func:r0_1, this:r2182_4
#-----| mu0_3(unknown) = ^CallSideEffect : ~m?
#-----| mu0_4(ClassWithDestructor) = ^IndirectMayWriteSideEffect[-1] : &:r2182_4
# 2182| r2182_5(bool) = Constant[1] :
# 2182| mu2182_6(bool) = Store[c#init] : &:r2182_1, r2182_5
#-----| Goto -> Block 2
# 2183| Block 2
# 2183| v2183_1(void) = NoOp :
# 2179| v2179_4(void) = ReturnVoid :
# 2179| v2179_5(void) = AliasedUse : ~m?
# 2179| v2179_6(void) = ExitFunction :
# 2185| ClassWithDestructor global_class_with_destructor
# 2185| Block 0
# 2185| v2185_1(void) = EnterFunction :
# 2185| mu2185_2(unknown) = AliasedDefinition :
# 2185| r2185_3(glval<ClassWithDestructor>) = VariableAddress[global_class_with_destructor] :
# 2185| r2185_4(glval<unknown>) = FunctionAddress[ClassWithDestructor] :
# 2185| v2185_5(void) = Call[ClassWithDestructor] : func:r2185_4, this:r2185_3
# 2185| mu2185_6(unknown) = ^CallSideEffect : ~m?
# 2185| mu2185_7(ClassWithDestructor) = ^IndirectMayWriteSideEffect[-1] : &:r2185_3
# 2185| v2185_8(void) = ReturnVoid :
# 2185| v2185_9(void) = AliasedUse : ~m?
# 2185| v2185_10(void) = ExitFunction :
perf-regression.cpp:
# 6| void Big::Big()
# 6| Block 0

View File

@@ -2,5 +2,3 @@
| no_dynamic_init.cpp:5:12:5:35 | no_dynamic_init.cpp:5:12:5:35 | no_dynamic_init.cpp:5:12:5:35 | Goodbye cruel world.\n |
| no_dynamic_init.cpp:5:12:5:35 | no_dynamic_init.cpp:5:12:5:35 | no_dynamic_init.cpp:5:12:5:35 | array to pointer conversion |
| no_dynamic_init.cpp:11:10:11:10 | no_dynamic_init.cpp:11:10:11:10 | no_dynamic_init.cpp:11:10:11:10 | 0 |
| no_dynamic_init.cpp:12:1:12:1 | no_dynamic_init.cpp:12:1:12:1 | no_dynamic_init.cpp:12:1:12:1 | call to ~Magic |
| no_dynamic_init.cpp:12:1:12:1 | no_dynamic_init.cpp:12:1:12:1 | no_dynamic_init.cpp:12:1:12:1 | m |