diff --git a/cpp/ql/test/library-tests/ir/ir/PrintAST.expected b/cpp/ql/test/library-tests/ir/ir/PrintAST.expected index a7cd4689ff9..8866fa40dd4 100644 --- a/cpp/ql/test/library-tests/ir/ir/PrintAST.expected +++ b/cpp/ql/test/library-tests/ir/ir/PrintAST.expected @@ -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| : # 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| : +# 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| : +# 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| : +# 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| : diff --git a/cpp/ql/test/library-tests/ir/ir/aliased_ir.expected b/cpp/ql/test/library-tests/ir/ir/aliased_ir.expected index 4022128e2bb..1d8e4213ea4 100644 --- a/cpp/ql/test/library-tests/ir/ir/aliased_ir.expected +++ b/cpp/ql/test/library-tests/ir/ir/aliased_ir.expected @@ -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) = VariableAddress[a] : +# 2170| m2170_2(ClassWithDestructor) = Uninitialized[a] : &:r2170_1 +# 2170| r2170_3(glval) = 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) = 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) = VariableAddress[b] : +#-----| r0_1(glval) = 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) = 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) = VariableAddress[a] : +#-----| r0_1(glval) = 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) = VariableAddress[b] : +# 2176| m2176_3(ClassWithDestructor) = Uninitialized[b] : &:r2176_2 +# 2176| r2176_4(glval) = 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) = VariableAddress[a] : +# 2180| m2180_2(ClassWithDestructor) = Uninitialized[a] : &:r2180_1 +# 2180| r2180_3(glval) = 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) = VariableAddress[b] : +# 2181| m2181_2(ClassWithDestructor) = Uninitialized[b] : &:r2181_1 +# 2181| r2181_3(glval) = 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) = 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) = VariableAddress[c] : +#-----| r0_1(glval) = 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) = VariableAddress[global_class_with_destructor] : +# 2185| r2185_4(glval) = 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 diff --git a/cpp/ql/test/library-tests/ir/ir/ir.cpp b/cpp/ql/test/library-tests/ir/ir/ir.cpp index 4d44f118c86..f754002a2c9 100644 --- a/cpp/ql/test/library-tests/ir/ir/ir.cpp +++ b/cpp/ql/test/library-tests/ir/ir/ir.cpp @@ -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 diff --git a/cpp/ql/test/library-tests/ir/ir/operand_locations.expected b/cpp/ql/test/library-tests/ir/ir/operand_locations.expected index c42cb501cde..e1d9b382f45 100644 --- a/cpp/ql/test/library-tests/ir/ir/operand_locations.expected +++ b/cpp/ql/test/library-tests/ir/ir/operand_locations.expected @@ -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 | diff --git a/cpp/ql/test/library-tests/ir/ir/raw_ir.expected b/cpp/ql/test/library-tests/ir/ir/raw_ir.expected index 313f09530cd..53986a0a74d 100644 --- a/cpp/ql/test/library-tests/ir/ir/raw_ir.expected +++ b/cpp/ql/test/library-tests/ir/ir/raw_ir.expected @@ -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) = VariableAddress[a] : +# 2170| mu2170_2(ClassWithDestructor) = Uninitialized[a] : &:r2170_1 +# 2170| r2170_3(glval) = 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) = 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) = VariableAddress[b] : +#-----| r0_1(glval) = 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) = 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) = VariableAddress[a] : +#-----| r0_1(glval) = 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) = VariableAddress[b] : +# 2176| mu2176_2(ClassWithDestructor) = Uninitialized[b] : &:r2176_1 +# 2176| r2176_3(glval) = 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) = VariableAddress[a] : +# 2180| mu2180_2(ClassWithDestructor) = Uninitialized[a] : &:r2180_1 +# 2180| r2180_3(glval) = 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) = VariableAddress[b] : +# 2181| mu2181_2(ClassWithDestructor) = Uninitialized[b] : &:r2181_1 +# 2181| r2181_3(glval) = 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) = 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) = VariableAddress[c] : +#-----| r0_1(glval) = 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) = VariableAddress[global_class_with_destructor] : +# 2185| r2185_4(glval) = 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 diff --git a/cpp/ql/test/successor-tests/staticlocals/no_dynamic_init/exprs.expected b/cpp/ql/test/successor-tests/staticlocals/no_dynamic_init/exprs.expected index 3f13846909a..3798bed6f32 100644 --- a/cpp/ql/test/successor-tests/staticlocals/no_dynamic_init/exprs.expected +++ b/cpp/ql/test/successor-tests/staticlocals/no_dynamic_init/exprs.expected @@ -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 | diff --git a/java/ql/test-kotlin2/library-tests/interface-delegate/test.expected b/java/ql/test-kotlin2/library-tests/interface-delegate/test.expected index 8fef9ecf8ff..a5576a6c083 100644 --- a/java/ql/test-kotlin2/library-tests/interface-delegate/test.expected +++ b/java/ql/test-kotlin2/library-tests/interface-delegate/test.expected @@ -1,8 +1,8 @@ fields | intfDelegate.kt:7:18:9:1 | $$delegate_0 | intfDelegate.kt:7:26:9:1 | | #select +| intfDelegate.kt:0:0:0:0 | f | intfDelegate.kt:7:1:10:1 | Concrete | | intfDelegate.kt:3:3:3:15 | f | intfDelegate.kt:1:1:5:1 | Intf | | intfDelegate.kt:7:1:10:1 | Concrete | intfDelegate.kt:7:1:10:1 | Concrete | -| intfDelegate.kt:7:1:10:1 | f | intfDelegate.kt:7:1:10:1 | Concrete | | intfDelegate.kt:7:26:9:1 | | intfDelegate.kt:7:26:9:1 | new Intf(...) { ... } | | intfDelegate.kt:8:3:8:28 | f | intfDelegate.kt:7:26:9:1 | new Intf(...) { ... } | diff --git a/java/ql/test-kotlin2/library-tests/operator-overloads/PrintAst.expected b/java/ql/test-kotlin2/library-tests/operator-overloads/PrintAst.expected index b43d88b4531..d22a81210ba 100644 --- a/java/ql/test-kotlin2/library-tests/operator-overloads/PrintAst.expected +++ b/java/ql/test-kotlin2/library-tests/operator-overloads/PrintAst.expected @@ -12,9 +12,9 @@ test.kt: # 2| 0: [ExprStmt] ; # 2| 0: [ImplicitCoercionToUnitExpr] # 2| 0: [TypeAccess] Unit -# 2| 1: [MethodCall] get(...) -# 2| -1: [VarAccess] arr -# 2| 0: [IntegerLiteral] 1 +# 2| 1: [ArrayAccess] ...[...] +# 2| 0: [VarAccess] arr +# 2| 1: [IntegerLiteral] 1 # 3| 1: [ExprStmt] ; # 3| 0: [ImplicitCoercionToUnitExpr] # 3| 0: [TypeAccess] Unit