Skip to content

Commit 254c877

Browse files
committed
C++: Deduplicate AllocationExprs.
1 parent 259f714 commit 254c877

File tree

2 files changed

+3
-8
lines changed

2 files changed

+3
-8
lines changed

cpp/ql/src/semmle/code/cpp/models/implementations/Allocation.qll

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -261,6 +261,9 @@ class CallAllocationExpr extends AllocationExpr, FunctionCall {
261261
exists(target.getReallocPtrArg()) and
262262
getArgument(target.getSizeArg()).getValue().toInt() = 0
263263
)
264+
and
265+
// these are modelled directly (and more accurately), avoid duplication
266+
not exists(NewOrNewArrayExpr new | new.getAllocatorCall() = this)
264267
}
265268

266269
override Expr getSizeExpr() { result = getArgument(target.getSizeArg()) }

cpp/ql/test/library-tests/allocators/allocators.expected

Lines changed: 0 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -61,17 +61,13 @@ allocationFunctions
6161
| file://:0:0:0:0 | operator new[] | getSizeArg = 0, requiresDealloc |
6262
allocationExprs
6363
| allocators.cpp:49:3:49:9 | new | getSizeBytes = 4, requiresDealloc |
64-
| allocators.cpp:50:3:50:15 | call to operator new | getSizeExpr = <error expr>, getSizeMult = 1, requiresDealloc |
6564
| allocators.cpp:50:3:50:15 | new | getSizeBytes = 4, requiresDealloc |
6665
| allocators.cpp:51:3:51:11 | new | getSizeBytes = 4, requiresDealloc |
6766
| allocators.cpp:52:3:52:14 | new | getSizeBytes = 8, requiresDealloc |
68-
| allocators.cpp:53:3:53:27 | call to operator new | getSizeExpr = <error expr>, getSizeMult = 1, requiresDealloc |
6967
| allocators.cpp:53:3:53:27 | new | getSizeBytes = 8, requiresDealloc |
7068
| allocators.cpp:54:3:54:17 | new | getSizeBytes = 256, requiresDealloc |
71-
| allocators.cpp:55:3:55:25 | call to operator new | getSizeExpr = <error expr>, getSizeMult = 1, requiresDealloc |
7269
| allocators.cpp:55:3:55:25 | new | getSizeBytes = 256, requiresDealloc |
7370
| allocators.cpp:68:3:68:12 | new[] | getSizeExpr = n, getSizeMult = 4, requiresDealloc |
74-
| allocators.cpp:69:3:69:18 | call to operator new[] | getSizeExpr = <error expr>, getSizeMult = 1, requiresDealloc |
7571
| allocators.cpp:69:3:69:18 | new[] | getSizeExpr = n, getSizeMult = 4, requiresDealloc |
7672
| allocators.cpp:70:3:70:15 | new[] | getSizeExpr = n, getSizeMult = 8, requiresDealloc |
7773
| allocators.cpp:71:3:71:20 | new[] | getSizeExpr = n, getSizeMult = 256, requiresDealloc |
@@ -80,13 +76,9 @@ allocationExprs
8076
| allocators.cpp:108:3:108:19 | new[] | getSizeExpr = n, getSizeMult = 1, requiresDealloc |
8177
| allocators.cpp:109:3:109:35 | new | getSizeBytes = 128, requiresDealloc |
8278
| allocators.cpp:110:3:110:37 | new[] | getSizeBytes = 1280, requiresDealloc |
83-
| allocators.cpp:129:3:129:21 | call to operator new | getSizeExpr = <error expr>, getSizeMult = 1 |
8479
| allocators.cpp:129:3:129:21 | new | getSizeBytes = 4 |
85-
| allocators.cpp:132:3:132:17 | call to operator new[] | getSizeExpr = <error expr>, getSizeMult = 1 |
8680
| allocators.cpp:132:3:132:17 | new[] | getSizeBytes = 4 |
87-
| allocators.cpp:135:3:135:26 | call to operator new | getSizeExpr = <error expr>, getSizeMult = 1, requiresDealloc |
8881
| allocators.cpp:135:3:135:26 | new | getSizeBytes = 4, requiresDealloc |
89-
| allocators.cpp:136:3:136:26 | call to operator new[] | getSizeExpr = <error expr>, getSizeMult = 1, requiresDealloc |
9082
| allocators.cpp:136:3:136:26 | new[] | getSizeBytes = 8, requiresDealloc |
9183
| allocators.cpp:142:13:142:27 | new[] | getSizeExpr = x, getSizeMult = 10, requiresDealloc |
9284
| allocators.cpp:143:13:143:28 | new[] | getSizeBytes = 400, requiresDealloc |

0 commit comments

Comments
 (0)