Skip to content

Commit 53561b7

Browse files
committed
C++: Add tests for sized allocation without a need for a synthesized conversion.
1 parent 734a91d commit 53561b7

File tree

5 files changed

+331
-0
lines changed

5 files changed

+331
-0
lines changed

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

Lines changed: 89 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -15846,6 +15846,95 @@ ir.cpp:
1584615846
# 2095| getExpr(): [VariableAccess] x
1584715847
# 2095| Type = [IntType] int
1584815848
# 2095| ValueCategory = prvalue(load)
15849+
# 2098| [TopLevelFunction] void newArrayCorrectType(size_t)
15850+
# 2098| <params>:
15851+
# 2098| getParameter(0): [Parameter] n
15852+
# 2098| Type = [CTypedefType,Size_t] size_t
15853+
# 2098| getEntryPoint(): [BlockStmt] { ... }
15854+
# 2099| getStmt(0): [ExprStmt] ExprStmt
15855+
# 2099| getExpr(): [NewArrayExpr] new[]
15856+
# 2099| Type = [IntPointerType] int *
15857+
# 2099| ValueCategory = prvalue
15858+
# 2099| getExtent(): [VariableAccess] n
15859+
# 2099| Type = [CTypedefType,Size_t] size_t
15860+
# 2099| ValueCategory = prvalue(load)
15861+
# 2100| getStmt(1): [ExprStmt] ExprStmt
15862+
# 2100| getExpr(): [NewArrayExpr] new[]
15863+
# 2100| Type = [IntPointerType] int *
15864+
# 2100| ValueCategory = prvalue
15865+
# 2100| getAllocatorCall(): [FunctionCall] call to operator new[]
15866+
# 2100| Type = [VoidPointerType] void *
15867+
# 2100| ValueCategory = prvalue
15868+
# 2100| getArgument(0): [ErrorExpr] <error expr>
15869+
# 2100| Type = [LongType] unsigned long
15870+
# 2100| ValueCategory = prvalue
15871+
# 2100| getArgument(1): [Literal] 1.0
15872+
# 2100| Type = [FloatType] float
15873+
# 2100| Value = [Literal] 1.0
15874+
# 2100| ValueCategory = prvalue
15875+
# 2100| getExtent(): [VariableAccess] n
15876+
# 2100| Type = [CTypedefType,Size_t] size_t
15877+
# 2100| ValueCategory = prvalue(load)
15878+
# 2101| getStmt(2): [ExprStmt] ExprStmt
15879+
# 2101| getExpr(): [NewArrayExpr] new[]
15880+
# 2101| Type = [PointerType] String *
15881+
# 2101| ValueCategory = prvalue
15882+
# 2101| getInitializer(): [ArrayAggregateLiteral] {...}
15883+
# 2101| Type = [ArrayType] String[]
15884+
# 2101| ValueCategory = prvalue
15885+
# 2101| getAnElementExpr(0): [ConstructorCall] call to String
15886+
# 2101| Type = [VoidType] void
15887+
# 2101| ValueCategory = prvalue
15888+
# 2101| getExtent(): [VariableAccess] n
15889+
# 2101| Type = [CTypedefType,Size_t] size_t
15890+
# 2101| ValueCategory = prvalue(load)
15891+
# 2102| getStmt(3): [ExprStmt] ExprStmt
15892+
# 2102| getExpr(): [NewArrayExpr] new[]
15893+
# 2102| Type = [PointerType] Overaligned *
15894+
# 2102| ValueCategory = prvalue
15895+
# 2102| getExtent(): [VariableAccess] n
15896+
# 2102| Type = [CTypedefType,Size_t] size_t
15897+
# 2102| ValueCategory = prvalue(load)
15898+
# 2102| getAlignmentArgument(): [Literal] 128
15899+
# 2102| Type = [ScopedEnum] align_val_t
15900+
# 2102| Value = [Literal] 128
15901+
# 2102| ValueCategory = prvalue
15902+
# 2103| getStmt(4): [ExprStmt] ExprStmt
15903+
# 2103| getExpr(): [NewArrayExpr] new[]
15904+
# 2103| Type = [PointerType] DefaultCtorWithDefaultParam *
15905+
# 2103| ValueCategory = prvalue
15906+
# 2103| getInitializer(): [ArrayAggregateLiteral] {...}
15907+
# 2103| Type = [ArrayType] DefaultCtorWithDefaultParam[]
15908+
# 2103| ValueCategory = prvalue
15909+
# 2103| getAnElementExpr(0): [ConstructorCall] call to DefaultCtorWithDefaultParam
15910+
# 2103| Type = [VoidType] void
15911+
# 2103| ValueCategory = prvalue
15912+
# 2103| getExtent(): [VariableAccess] n
15913+
# 2103| Type = [CTypedefType,Size_t] size_t
15914+
# 2103| ValueCategory = prvalue(load)
15915+
# 2104| getStmt(5): [ExprStmt] ExprStmt
15916+
# 2104| getExpr(): [NewArrayExpr] new[]
15917+
# 2104| Type = [IntPointerType] int *
15918+
# 2104| ValueCategory = prvalue
15919+
# 2104| getInitializer(): [ArrayAggregateLiteral] {...}
15920+
# 2104| Type = [ArrayType] int[3]
15921+
# 2104| ValueCategory = prvalue
15922+
# 2104| getAnElementExpr(0): [Literal] 0
15923+
# 2104| Type = [IntType] int
15924+
# 2104| Value = [Literal] 0
15925+
# 2104| ValueCategory = prvalue
15926+
# 2104| getAnElementExpr(1): [Literal] 1
15927+
# 2104| Type = [IntType] int
15928+
# 2104| Value = [Literal] 1
15929+
# 2104| ValueCategory = prvalue
15930+
# 2104| getAnElementExpr(2): [Literal] 2
15931+
# 2104| Type = [IntType] int
15932+
# 2104| Value = [Literal] 2
15933+
# 2104| ValueCategory = prvalue
15934+
# 2104| getExtent(): [VariableAccess] n
15935+
# 2104| Type = [CTypedefType,Size_t] size_t
15936+
# 2104| ValueCategory = prvalue(load)
15937+
# 2105| getStmt(6): [ReturnStmt] return ...
1584915938
perf-regression.cpp:
1585015939
# 4| [CopyAssignmentOperator] Big& Big::operator=(Big const&)
1585115940
# 4| <params>:

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

Lines changed: 81 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -12215,6 +12215,87 @@ ir.cpp:
1221512215
# 2090| v2090_8(void) = AliasedUse : ~m2094_4
1221612216
# 2090| v2090_9(void) = ExitFunction :
1221712217

12218+
# 2098| void newArrayCorrectType(size_t)
12219+
# 2098| Block 0
12220+
# 2098| v2098_1(void) = EnterFunction :
12221+
# 2098| m2098_2(unknown) = AliasedDefinition :
12222+
# 2098| m2098_3(unknown) = InitializeNonLocal :
12223+
# 2098| m2098_4(unknown) = Chi : total:m2098_2, partial:m2098_3
12224+
# 2098| r2098_5(glval<unsigned long>) = VariableAddress[n] :
12225+
# 2098| m2098_6(unsigned long) = InitializeParameter[n] : &:r2098_5
12226+
# 2099| r2099_1(glval<unknown>) = FunctionAddress[operator new[]] :
12227+
# 2099| r2099_2(glval<unsigned long>) = VariableAddress[n] :
12228+
# 2099| r2099_3(unsigned long) = Load[n] : &:r2099_2, m2098_6
12229+
# 2099| r2099_4(unsigned long) = Convert : r2099_3
12230+
# 2099| r2099_5(unsigned long) = Constant[4] :
12231+
# 2099| r2099_6(unsigned long) = Mul : r2099_4, r2099_5
12232+
# 2099| r2099_7(void *) = Call[operator new[]] : func:r2099_1, 0:r2099_6
12233+
# 2099| m2099_8(unknown) = ^CallSideEffect : ~m2098_4
12234+
# 2099| m2099_9(unknown) = Chi : total:m2098_4, partial:m2099_8
12235+
# 2099| m2099_10(unknown) = ^InitializeDynamicAllocation : &:r2099_7
12236+
# 2099| r2099_11(int *) = Convert : r2099_7
12237+
# 2100| r2100_1(glval<unknown>) = FunctionAddress[operator new[]] :
12238+
# 2100| r2100_2(glval<unsigned long>) = VariableAddress[n] :
12239+
# 2100| r2100_3(unsigned long) = Load[n] : &:r2100_2, m2098_6
12240+
# 2100| r2100_4(unsigned long) = Convert : r2100_3
12241+
# 2100| r2100_5(unsigned long) = Constant[4] :
12242+
# 2100| r2100_6(unsigned long) = Mul : r2100_4, r2100_5
12243+
# 2100| r2100_7(float) = Constant[1.0] :
12244+
# 2100| r2100_8(void *) = Call[operator new[]] : func:r2100_1, 0:r2100_6, 1:r2100_7
12245+
# 2100| m2100_9(unknown) = ^CallSideEffect : ~m2099_9
12246+
# 2100| m2100_10(unknown) = Chi : total:m2099_9, partial:m2100_9
12247+
# 2100| m2100_11(unknown) = ^InitializeDynamicAllocation : &:r2100_8
12248+
# 2100| r2100_12(int *) = Convert : r2100_8
12249+
# 2101| r2101_1(glval<unknown>) = FunctionAddress[operator new[]] :
12250+
# 2101| r2101_2(glval<unsigned long>) = VariableAddress[n] :
12251+
# 2101| r2101_3(unsigned long) = Load[n] : &:r2101_2, m2098_6
12252+
# 2101| r2101_4(unsigned long) = Convert : r2101_3
12253+
# 2101| r2101_5(unsigned long) = Constant[8] :
12254+
# 2101| r2101_6(unsigned long) = Mul : r2101_4, r2101_5
12255+
# 2101| r2101_7(void *) = Call[operator new[]] : func:r2101_1, 0:r2101_6
12256+
# 2101| m2101_8(unknown) = ^CallSideEffect : ~m2100_10
12257+
# 2101| m2101_9(unknown) = Chi : total:m2100_10, partial:m2101_8
12258+
# 2101| m2101_10(unknown) = ^InitializeDynamicAllocation : &:r2101_7
12259+
# 2101| r2101_11(String *) = Convert : r2101_7
12260+
# 2102| r2102_1(glval<unknown>) = FunctionAddress[operator new[]] :
12261+
# 2102| r2102_2(glval<unsigned long>) = VariableAddress[n] :
12262+
# 2102| r2102_3(unsigned long) = Load[n] : &:r2102_2, m2098_6
12263+
# 2102| r2102_4(unsigned long) = Convert : r2102_3
12264+
# 2102| r2102_5(unsigned long) = Constant[256] :
12265+
# 2102| r2102_6(unsigned long) = Mul : r2102_4, r2102_5
12266+
# 2102| r2102_7(align_val_t) = Constant[128] :
12267+
# 2102| r2102_8(void *) = Call[operator new[]] : func:r2102_1, 0:r2102_6, 1:r2102_7
12268+
# 2102| m2102_9(unknown) = ^CallSideEffect : ~m2101_9
12269+
# 2102| m2102_10(unknown) = Chi : total:m2101_9, partial:m2102_9
12270+
# 2102| m2102_11(unknown) = ^InitializeDynamicAllocation : &:r2102_8
12271+
# 2102| r2102_12(Overaligned *) = Convert : r2102_8
12272+
# 2103| r2103_1(glval<unknown>) = FunctionAddress[operator new[]] :
12273+
# 2103| r2103_2(glval<unsigned long>) = VariableAddress[n] :
12274+
# 2103| r2103_3(unsigned long) = Load[n] : &:r2103_2, m2098_6
12275+
# 2103| r2103_4(unsigned long) = Convert : r2103_3
12276+
# 2103| r2103_5(unsigned long) = Constant[1] :
12277+
# 2103| r2103_6(unsigned long) = Mul : r2103_4, r2103_5
12278+
# 2103| r2103_7(void *) = Call[operator new[]] : func:r2103_1, 0:r2103_6
12279+
# 2103| m2103_8(unknown) = ^CallSideEffect : ~m2102_10
12280+
# 2103| m2103_9(unknown) = Chi : total:m2102_10, partial:m2103_8
12281+
# 2103| m2103_10(unknown) = ^InitializeDynamicAllocation : &:r2103_7
12282+
# 2103| r2103_11(DefaultCtorWithDefaultParam *) = Convert : r2103_7
12283+
# 2104| r2104_1(glval<unknown>) = FunctionAddress[operator new[]] :
12284+
# 2104| r2104_2(glval<unsigned long>) = VariableAddress[n] :
12285+
# 2104| r2104_3(unsigned long) = Load[n] : &:r2104_2, m2098_6
12286+
# 2104| r2104_4(unsigned long) = Convert : r2104_3
12287+
# 2104| r2104_5(unsigned long) = Constant[4] :
12288+
# 2104| r2104_6(unsigned long) = Mul : r2104_4, r2104_5
12289+
# 2104| r2104_7(void *) = Call[operator new[]] : func:r2104_1, 0:r2104_6
12290+
# 2104| m2104_8(unknown) = ^CallSideEffect : ~m2103_9
12291+
# 2104| m2104_9(unknown) = Chi : total:m2103_9, partial:m2104_8
12292+
# 2104| m2104_10(unknown) = ^InitializeDynamicAllocation : &:r2104_7
12293+
# 2104| r2104_11(int *) = Convert : r2104_7
12294+
# 2105| v2105_1(void) = NoOp :
12295+
# 2098| v2098_7(void) = ReturnVoid :
12296+
# 2098| v2098_8(void) = AliasedUse : ~m2104_9
12297+
# 2098| v2098_9(void) = ExitFunction :
12298+
1221812299
perf-regression.cpp:
1221912300
# 6| void Big::Big()
1222012301
# 6| Block 0

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

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2095,4 +2095,13 @@ int TransNonExit() {
20952095
return x;
20962096
}
20972097

2098+
void newArrayCorrectType(size_t n) {
2099+
new int[n]; // No constructor
2100+
new(1.0f) int[n]; // Placement new, no constructor
2101+
new String[n]; // Constructor
2102+
new Overaligned[n]; // Aligned new
2103+
new DefaultCtorWithDefaultParam[n];
2104+
new int[n] { 0, 1, 2 };
2105+
}
2106+
20982107
// semmle-extractor-options: -std=c++17 --clang

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

Lines changed: 78 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -9896,6 +9896,84 @@
98969896
| ir.cpp:2095:12:2095:12 | Address | &:r2095_2 |
98979897
| ir.cpp:2095:12:2095:12 | Load | m2091_8 |
98989898
| ir.cpp:2095:12:2095:12 | StoreValue | r2095_3 |
9899+
| ir.cpp:2098:6:2098:24 | ChiPartial | partial:m2098_3 |
9900+
| ir.cpp:2098:6:2098:24 | ChiTotal | total:m2098_2 |
9901+
| ir.cpp:2098:6:2098:24 | SideEffect | ~m2104_9 |
9902+
| ir.cpp:2098:33:2098:33 | Address | &:r2098_5 |
9903+
| ir.cpp:2099:3:2099:12 | Address | &:r2099_7 |
9904+
| ir.cpp:2099:3:2099:12 | Arg(0) | 0:r2099_6 |
9905+
| ir.cpp:2099:3:2099:12 | CallTarget | func:r2099_1 |
9906+
| ir.cpp:2099:3:2099:12 | ChiPartial | partial:m2099_8 |
9907+
| ir.cpp:2099:3:2099:12 | ChiTotal | total:m2098_4 |
9908+
| ir.cpp:2099:3:2099:12 | Left | r2099_4 |
9909+
| ir.cpp:2099:3:2099:12 | Right | r2099_5 |
9910+
| ir.cpp:2099:3:2099:12 | SideEffect | ~m2098_4 |
9911+
| ir.cpp:2099:3:2099:12 | Unary | r2099_7 |
9912+
| ir.cpp:2099:11:2099:11 | Address | &:r2099_2 |
9913+
| ir.cpp:2099:11:2099:11 | Load | m2098_6 |
9914+
| ir.cpp:2099:11:2099:11 | Unary | r2099_3 |
9915+
| ir.cpp:2100:3:2100:18 | Address | &:r2100_8 |
9916+
| ir.cpp:2100:3:2100:18 | Arg(0) | 0:r2100_6 |
9917+
| ir.cpp:2100:3:2100:18 | CallTarget | func:r2100_1 |
9918+
| ir.cpp:2100:3:2100:18 | ChiPartial | partial:m2100_9 |
9919+
| ir.cpp:2100:3:2100:18 | ChiTotal | total:m2099_9 |
9920+
| ir.cpp:2100:3:2100:18 | Left | r2100_4 |
9921+
| ir.cpp:2100:3:2100:18 | Right | r2100_5 |
9922+
| ir.cpp:2100:3:2100:18 | SideEffect | ~m2099_9 |
9923+
| ir.cpp:2100:3:2100:18 | Unary | r2100_8 |
9924+
| ir.cpp:2100:7:2100:10 | Arg(1) | 1:r2100_7 |
9925+
| ir.cpp:2100:17:2100:17 | Address | &:r2100_2 |
9926+
| ir.cpp:2100:17:2100:17 | Load | m2098_6 |
9927+
| ir.cpp:2100:17:2100:17 | Unary | r2100_3 |
9928+
| ir.cpp:2101:3:2101:15 | Address | &:r2101_7 |
9929+
| ir.cpp:2101:3:2101:15 | Arg(0) | 0:r2101_6 |
9930+
| ir.cpp:2101:3:2101:15 | CallTarget | func:r2101_1 |
9931+
| ir.cpp:2101:3:2101:15 | ChiPartial | partial:m2101_8 |
9932+
| ir.cpp:2101:3:2101:15 | ChiTotal | total:m2100_10 |
9933+
| ir.cpp:2101:3:2101:15 | Left | r2101_4 |
9934+
| ir.cpp:2101:3:2101:15 | Right | r2101_5 |
9935+
| ir.cpp:2101:3:2101:15 | SideEffect | ~m2100_10 |
9936+
| ir.cpp:2101:3:2101:15 | Unary | r2101_7 |
9937+
| ir.cpp:2101:14:2101:14 | Address | &:r2101_2 |
9938+
| ir.cpp:2101:14:2101:14 | Load | m2098_6 |
9939+
| ir.cpp:2101:14:2101:14 | Unary | r2101_3 |
9940+
| ir.cpp:2102:3:2102:20 | Address | &:r2102_8 |
9941+
| ir.cpp:2102:3:2102:20 | Arg(0) | 0:r2102_6 |
9942+
| ir.cpp:2102:3:2102:20 | CallTarget | func:r2102_1 |
9943+
| ir.cpp:2102:3:2102:20 | ChiPartial | partial:m2102_9 |
9944+
| ir.cpp:2102:3:2102:20 | ChiTotal | total:m2101_9 |
9945+
| ir.cpp:2102:3:2102:20 | Left | r2102_4 |
9946+
| ir.cpp:2102:3:2102:20 | Right | r2102_5 |
9947+
| ir.cpp:2102:3:2102:20 | SideEffect | ~m2101_9 |
9948+
| ir.cpp:2102:3:2102:20 | Unary | r2102_8 |
9949+
| ir.cpp:2102:19:2102:19 | Address | &:r2102_2 |
9950+
| ir.cpp:2102:19:2102:19 | Load | m2098_6 |
9951+
| ir.cpp:2102:19:2102:19 | Unary | r2102_3 |
9952+
| ir.cpp:2102:21:2102:21 | Arg(1) | 1:r2102_7 |
9953+
| ir.cpp:2103:3:2103:36 | Address | &:r2103_7 |
9954+
| ir.cpp:2103:3:2103:36 | Arg(0) | 0:r2103_6 |
9955+
| ir.cpp:2103:3:2103:36 | CallTarget | func:r2103_1 |
9956+
| ir.cpp:2103:3:2103:36 | ChiPartial | partial:m2103_8 |
9957+
| ir.cpp:2103:3:2103:36 | ChiTotal | total:m2102_10 |
9958+
| ir.cpp:2103:3:2103:36 | Left | r2103_4 |
9959+
| ir.cpp:2103:3:2103:36 | Right | r2103_5 |
9960+
| ir.cpp:2103:3:2103:36 | SideEffect | ~m2102_10 |
9961+
| ir.cpp:2103:3:2103:36 | Unary | r2103_7 |
9962+
| ir.cpp:2103:35:2103:35 | Address | &:r2103_2 |
9963+
| ir.cpp:2103:35:2103:35 | Load | m2098_6 |
9964+
| ir.cpp:2103:35:2103:35 | Unary | r2103_3 |
9965+
| ir.cpp:2104:3:2104:24 | Address | &:r2104_7 |
9966+
| ir.cpp:2104:3:2104:24 | Arg(0) | 0:r2104_6 |
9967+
| ir.cpp:2104:3:2104:24 | CallTarget | func:r2104_1 |
9968+
| ir.cpp:2104:3:2104:24 | ChiPartial | partial:m2104_8 |
9969+
| ir.cpp:2104:3:2104:24 | ChiTotal | total:m2103_9 |
9970+
| ir.cpp:2104:3:2104:24 | Left | r2104_4 |
9971+
| ir.cpp:2104:3:2104:24 | Right | r2104_5 |
9972+
| ir.cpp:2104:3:2104:24 | SideEffect | ~m2103_9 |
9973+
| ir.cpp:2104:3:2104:24 | Unary | r2104_7 |
9974+
| ir.cpp:2104:11:2104:11 | Address | &:r2104_2 |
9975+
| ir.cpp:2104:11:2104:11 | Load | m2098_6 |
9976+
| ir.cpp:2104:11:2104:11 | Unary | r2104_3 |
98999977
| perf-regression.cpp:6:3:6:5 | Address | &:r6_5 |
99009978
| perf-regression.cpp:6:3:6:5 | Address | &:r6_5 |
99019979
| perf-regression.cpp:6:3:6:5 | Address | &:r6_7 |

0 commit comments

Comments
 (0)