Skip to content

Commit d6b6c43

Browse files
committed
C++: Add test with incorrect IR due to wrong model.
1 parent b18a6d5 commit d6b6c43

File tree

5 files changed

+140
-0
lines changed

5 files changed

+140
-0
lines changed

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

Lines changed: 38 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -15938,6 +15938,44 @@ ir.cpp:
1593815938
# 2104| Type = [CTypedefType,Size_t] size_t
1593915939
# 2104| ValueCategory = prvalue(load)
1594015940
# 2105| getStmt(6): [ReturnStmt] return ...
15941+
# 2107| [TopLevelFunction] double strtod(char const*, char**)
15942+
# 2107| <params>:
15943+
# 2107| getParameter(0): [Parameter] str
15944+
# 2107| Type = [PointerType] const char *
15945+
# 2107| getParameter(1): [Parameter] endptr
15946+
# 2107| Type = [PointerType] char **
15947+
# 2109| [TopLevelFunction] char* test_strtod(char*)
15948+
# 2109| <params>:
15949+
# 2109| getParameter(0): [Parameter] s
15950+
# 2109| Type = [CharPointerType] char *
15951+
# 2109| getEntryPoint(): [BlockStmt] { ... }
15952+
# 2110| getStmt(0): [DeclStmt] declaration
15953+
# 2110| getDeclarationEntry(0): [VariableDeclarationEntry] definition of end
15954+
# 2110| Type = [CharPointerType] char *
15955+
# 2111| getStmt(1): [DeclStmt] declaration
15956+
# 2111| getDeclarationEntry(0): [VariableDeclarationEntry] definition of d
15957+
# 2111| Type = [DoubleType] double
15958+
# 2111| getVariable().getInitializer(): [Initializer] initializer for d
15959+
# 2111| getExpr(): [FunctionCall] call to strtod
15960+
# 2111| Type = [DoubleType] double
15961+
# 2111| ValueCategory = prvalue
15962+
# 2111| getArgument(0): [VariableAccess] s
15963+
# 2111| Type = [CharPointerType] char *
15964+
# 2111| ValueCategory = prvalue(load)
15965+
# 2111| getArgument(1): [AddressOfExpr] & ...
15966+
# 2111| Type = [PointerType] char **
15967+
# 2111| ValueCategory = prvalue
15968+
# 2111| getOperand(): [VariableAccess] end
15969+
# 2111| Type = [CharPointerType] char *
15970+
# 2111| ValueCategory = lvalue
15971+
# 2111| getArgument(0).getFullyConverted(): [CStyleCast] (const char *)...
15972+
# 2111| Conversion = [PointerConversion] pointer conversion
15973+
# 2111| Type = [PointerType] const char *
15974+
# 2111| ValueCategory = prvalue
15975+
# 2112| getStmt(2): [ReturnStmt] return ...
15976+
# 2112| getExpr(): [VariableAccess] end
15977+
# 2112| Type = [CharPointerType] char *
15978+
# 2112| ValueCategory = prvalue(load)
1594115979
perf-regression.cpp:
1594215980
# 4| [CopyAssignmentOperator] Big& Big::operator=(Big const&)
1594315981
# 4| <params>:

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

Lines changed: 33 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -12333,6 +12333,39 @@ ir.cpp:
1233312333
# 2098| v2098_8(void) = AliasedUse : ~m2104_8
1233412334
# 2098| v2098_9(void) = ExitFunction :
1233512335

12336+
# 2109| char* test_strtod(char*)
12337+
# 2109| Block 0
12338+
# 2109| v2109_1(void) = EnterFunction :
12339+
# 2109| m2109_2(unknown) = AliasedDefinition :
12340+
# 2109| m2109_3(unknown) = InitializeNonLocal :
12341+
# 2109| m2109_4(unknown) = Chi : total:m2109_2, partial:m2109_3
12342+
# 2109| r2109_5(glval<char *>) = VariableAddress[s] :
12343+
# 2109| m2109_6(char *) = InitializeParameter[s] : &:r2109_5
12344+
# 2109| r2109_7(char *) = Load[s] : &:r2109_5, m2109_6
12345+
# 2109| m2109_8(unknown) = InitializeIndirection[s] : &:r2109_7
12346+
# 2110| r2110_1(glval<char *>) = VariableAddress[end] :
12347+
# 2110| m2110_2(char *) = Uninitialized[end] : &:r2110_1
12348+
# 2111| r2111_1(glval<double>) = VariableAddress[d] :
12349+
# 2111| r2111_2(glval<unknown>) = FunctionAddress[strtod] :
12350+
# 2111| r2111_3(glval<char *>) = VariableAddress[s] :
12351+
# 2111| r2111_4(char *) = Load[s] : &:r2111_3, m2109_6
12352+
# 2111| r2111_5(char *) = Convert : r2111_4
12353+
# 2111| r2111_6(glval<char *>) = VariableAddress[end] :
12354+
# 2111| r2111_7(char **) = CopyValue : r2111_6
12355+
# 2111| r2111_8(double) = Call[strtod] : func:r2111_2, 0:r2111_5, 1:r2111_7
12356+
# 2111| v2111_9(void) = ^BufferReadSideEffect[0] : &:r2111_5, ~m2109_8
12357+
# 2111| v2111_10(void) = ^BufferReadSideEffect[1] : &:r2111_7, ~m2110_2
12358+
# 2111| m2111_11(double) = Store[d] : &:r2111_1, r2111_8
12359+
# 2112| r2112_1(glval<char *>) = VariableAddress[#return] :
12360+
# 2112| r2112_2(glval<char *>) = VariableAddress[end] :
12361+
# 2112| r2112_3(char *) = Load[end] : &:r2112_2, m2110_2
12362+
# 2112| m2112_4(char *) = Store[#return] : &:r2112_1, r2112_3
12363+
# 2109| v2109_9(void) = ReturnIndirection[s] : &:r2109_7, m2109_8
12364+
# 2109| r2109_10(glval<char *>) = VariableAddress[#return] :
12365+
# 2109| v2109_11(void) = ReturnValue : &:r2109_10, m2112_4
12366+
# 2109| v2109_12(void) = AliasedUse : m2109_3
12367+
# 2109| v2109_13(void) = ExitFunction :
12368+
1233612369
perf-regression.cpp:
1233712370
# 6| void Big::Big()
1233812371
# 6| Block 0

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

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2104,4 +2104,12 @@ void newArrayCorrectType(size_t n) {
21042104
new int[n] { 0, 1, 2 };
21052105
}
21062106

2107+
double strtod (const char* str, char** endptr);
2108+
2109+
char* test_strtod(char *s) {
2110+
char *end;
2111+
double d = strtod(s, &end);
2112+
return end;
2113+
}
2114+
21072115
// semmle-extractor-options: -std=c++17 --clang

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

Lines changed: 29 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -10004,6 +10004,35 @@
1000410004
| ir.cpp:2104:11:2104:11 | Address | &:r2104_2 |
1000510005
| ir.cpp:2104:11:2104:11 | Left | r2104_3 |
1000610006
| ir.cpp:2104:11:2104:11 | Load | m2098_6 |
10007+
| ir.cpp:2109:7:2109:17 | Address | &:r2109_10 |
10008+
| ir.cpp:2109:7:2109:17 | ChiPartial | partial:m2109_3 |
10009+
| ir.cpp:2109:7:2109:17 | ChiTotal | total:m2109_2 |
10010+
| ir.cpp:2109:7:2109:17 | Load | m2112_4 |
10011+
| ir.cpp:2109:7:2109:17 | SideEffect | m2109_3 |
10012+
| ir.cpp:2109:25:2109:25 | Address | &:r2109_5 |
10013+
| ir.cpp:2109:25:2109:25 | Address | &:r2109_5 |
10014+
| ir.cpp:2109:25:2109:25 | Address | &:r2109_7 |
10015+
| ir.cpp:2109:25:2109:25 | Address | &:r2109_7 |
10016+
| ir.cpp:2109:25:2109:25 | Load | m2109_6 |
10017+
| ir.cpp:2109:25:2109:25 | SideEffect | m2109_8 |
10018+
| ir.cpp:2110:9:2110:11 | Address | &:r2110_1 |
10019+
| ir.cpp:2111:10:2111:10 | Address | &:r2111_1 |
10020+
| ir.cpp:2111:14:2111:19 | CallTarget | func:r2111_2 |
10021+
| ir.cpp:2111:14:2111:19 | StoreValue | r2111_8 |
10022+
| ir.cpp:2111:21:2111:21 | Address | &:r2111_3 |
10023+
| ir.cpp:2111:21:2111:21 | Address | &:r2111_5 |
10024+
| ir.cpp:2111:21:2111:21 | Arg(0) | 0:r2111_5 |
10025+
| ir.cpp:2111:21:2111:21 | Load | m2109_6 |
10026+
| ir.cpp:2111:21:2111:21 | SideEffect | ~m2109_8 |
10027+
| ir.cpp:2111:21:2111:21 | Unary | r2111_4 |
10028+
| ir.cpp:2111:24:2111:27 | Address | &:r2111_7 |
10029+
| ir.cpp:2111:24:2111:27 | Arg(1) | 1:r2111_7 |
10030+
| ir.cpp:2111:24:2111:27 | SideEffect | ~m2110_2 |
10031+
| ir.cpp:2111:25:2111:27 | Unary | r2111_6 |
10032+
| ir.cpp:2112:3:2112:13 | Address | &:r2112_1 |
10033+
| ir.cpp:2112:10:2112:12 | Address | &:r2112_2 |
10034+
| ir.cpp:2112:10:2112:12 | Load | m2110_2 |
10035+
| ir.cpp:2112:10:2112:12 | StoreValue | r2112_3 |
1000710036
| perf-regression.cpp:6:3:6:5 | Address | &:r6_5 |
1000810037
| perf-regression.cpp:6:3:6:5 | Address | &:r6_5 |
1000910038
| perf-regression.cpp:6:3:6:5 | Address | &:r6_7 |

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

Lines changed: 32 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -11538,6 +11538,38 @@ ir.cpp:
1153811538
# 2098| v2098_7(void) = AliasedUse : ~m?
1153911539
# 2098| v2098_8(void) = ExitFunction :
1154011540

11541+
# 2109| char* test_strtod(char*)
11542+
# 2109| Block 0
11543+
# 2109| v2109_1(void) = EnterFunction :
11544+
# 2109| mu2109_2(unknown) = AliasedDefinition :
11545+
# 2109| mu2109_3(unknown) = InitializeNonLocal :
11546+
# 2109| r2109_4(glval<char *>) = VariableAddress[s] :
11547+
# 2109| mu2109_5(char *) = InitializeParameter[s] : &:r2109_4
11548+
# 2109| r2109_6(char *) = Load[s] : &:r2109_4, ~m?
11549+
# 2109| mu2109_7(unknown) = InitializeIndirection[s] : &:r2109_6
11550+
# 2110| r2110_1(glval<char *>) = VariableAddress[end] :
11551+
# 2110| mu2110_2(char *) = Uninitialized[end] : &:r2110_1
11552+
# 2111| r2111_1(glval<double>) = VariableAddress[d] :
11553+
# 2111| r2111_2(glval<unknown>) = FunctionAddress[strtod] :
11554+
# 2111| r2111_3(glval<char *>) = VariableAddress[s] :
11555+
# 2111| r2111_4(char *) = Load[s] : &:r2111_3, ~m?
11556+
# 2111| r2111_5(char *) = Convert : r2111_4
11557+
# 2111| r2111_6(glval<char *>) = VariableAddress[end] :
11558+
# 2111| r2111_7(char **) = CopyValue : r2111_6
11559+
# 2111| r2111_8(double) = Call[strtod] : func:r2111_2, 0:r2111_5, 1:r2111_7
11560+
# 2111| v2111_9(void) = ^BufferReadSideEffect[0] : &:r2111_5, ~m?
11561+
# 2111| v2111_10(void) = ^BufferReadSideEffect[1] : &:r2111_7, ~m?
11562+
# 2111| mu2111_11(double) = Store[d] : &:r2111_1, r2111_8
11563+
# 2112| r2112_1(glval<char *>) = VariableAddress[#return] :
11564+
# 2112| r2112_2(glval<char *>) = VariableAddress[end] :
11565+
# 2112| r2112_3(char *) = Load[end] : &:r2112_2, ~m?
11566+
# 2112| mu2112_4(char *) = Store[#return] : &:r2112_1, r2112_3
11567+
# 2109| v2109_8(void) = ReturnIndirection[s] : &:r2109_6, ~m?
11568+
# 2109| r2109_9(glval<char *>) = VariableAddress[#return] :
11569+
# 2109| v2109_10(void) = ReturnValue : &:r2109_9, ~m?
11570+
# 2109| v2109_11(void) = AliasedUse : ~m?
11571+
# 2109| v2109_12(void) = ExitFunction :
11572+
1154111573
perf-regression.cpp:
1154211574
# 6| void Big::Big()
1154311575
# 6| Block 0

0 commit comments

Comments
 (0)