[compiler-rt] 3c20e25 - [NFC] Size and element numbers are often swapped when calling calloc (#79081)
via llvm-commits
llvm-commits at lists.llvm.org
Tue Jan 23 11:14:01 PST 2024
Author: AtariDreams
Date: 2024-01-23T11:13:55-08:00
New Revision: 3c20e25b0c51c67e35d028ba0d1d5f1dd5e206bb
URL: https://github.com/llvm/llvm-project/commit/3c20e25b0c51c67e35d028ba0d1d5f1dd5e206bb
DIFF: https://github.com/llvm/llvm-project/commit/3c20e25b0c51c67e35d028ba0d1d5f1dd5e206bb.diff
LOG: [NFC] Size and element numbers are often swapped when calling calloc (#79081)
gcc-14 will now throw a warning if size and elements are swapped.
Added:
Modified:
clang/test/Analysis/malloc.mm
clang/test/Analysis/uninit-vals.m
clang/test/CodeGen/alloc-size.c
compiler-rt/lib/profile/InstrProfilingFile.c
compiler-rt/test/tsan/java_finalizer2.cpp
Removed:
################################################################################
diff --git a/clang/test/Analysis/malloc.mm b/clang/test/Analysis/malloc.mm
index 9c0f013c4df88a..94a46d731090b3 100644
--- a/clang/test/Analysis/malloc.mm
+++ b/clang/test/Analysis/malloc.mm
@@ -116,17 +116,17 @@ void testUseAfterFree() {
}
void testNoCopy() {
- char *p = (char *)calloc(sizeof(int), 1);
+ char *p = (char *)calloc(1, sizeof(int));
CustomData *w = [CustomData somethingNoCopy:p]; // no-warning
}
void testFreeWhenDone() {
- char *p = (char *)calloc(sizeof(int), 1);
+ char *p = (char *)calloc(1, sizeof(int));
CustomData *w = [CustomData something:p freeWhenDone:1]; // no-warning
}
void testFreeWhenDonePositive() {
- char *p = (char *)calloc(sizeof(int), 1);
+ char *p = (char *)calloc(1, sizeof(int));
CustomData *w = [CustomData something:p freeWhenDone:0]; // expected-warning{{leak}}
}
diff --git a/clang/test/Analysis/uninit-vals.m b/clang/test/Analysis/uninit-vals.m
index 9d18f0ef69b927..a6ec4fb74e128f 100644
--- a/clang/test/Analysis/uninit-vals.m
+++ b/clang/test/Analysis/uninit-vals.m
@@ -158,7 +158,7 @@ Point makePoint(float x, float y) {
}
void PR14765_test(void) {
- Circle *testObj = calloc(sizeof(Circle), 1);
+ Circle *testObj = calloc(1, sizeof(Circle));
clang_analyzer_eval(testObj->size == 0); // expected-warning{{TRUE}}
// expected-note at -1{{TRUE}}
@@ -207,7 +207,7 @@ IntPoint makeIntPoint(int x, int y) {
}
void PR14765_test_int(void) {
- IntCircle *testObj = calloc(sizeof(IntCircle), 1);
+ IntCircle *testObj = calloc(1, sizeof(IntCircle));
clang_analyzer_eval(testObj->size == 0); // expected-warning{{TRUE}}
// expected-note at -1{{TRUE}}
@@ -311,7 +311,7 @@ void testLargeStructsNotCopiedPerField(void) {
}
void testSmallStructInLargerStruct(void) {
- IntCircle2D *testObj = calloc(sizeof(IntCircle2D), 1);
+ IntCircle2D *testObj = calloc(1, sizeof(IntCircle2D));
clang_analyzer_eval(testObj->size == 0); // expected-warning{{TRUE}}
// expected-note at -1{{TRUE}}
diff --git a/clang/test/CodeGen/alloc-size.c b/clang/test/CodeGen/alloc-size.c
index 370f61058c4937..bbac7965521b6e 100644
--- a/clang/test/CodeGen/alloc-size.c
+++ b/clang/test/CodeGen/alloc-size.c
@@ -137,7 +137,7 @@ void test5(void) {
// CHECK: store i32 36
gi = OBJECT_SIZE_BUILTIN(&data->t[1], 3);
- struct Data *const arr = my_calloc(sizeof(*data), 2);
+ struct Data *const arr = my_calloc(2, sizeof(*data));
// CHECK: store i32 96
gi = OBJECT_SIZE_BUILTIN(arr, 0);
// CHECK: store i32 96
@@ -171,7 +171,7 @@ void test6(void) {
// CHECK: store i32 11
gi = OBJECT_SIZE_BUILTIN(data->end, 3);
- struct Data *const arr = my_calloc(sizeof(*arr) + 5, 3);
+ struct Data *const arr = my_calloc(3, sizeof(*arr) + 5);
// AFAICT, GCC treats malloc and calloc identically. So, we should do the
// same.
//
diff --git a/compiler-rt/lib/profile/InstrProfilingFile.c b/compiler-rt/lib/profile/InstrProfilingFile.c
index e72a2ba86f5466..867ae73f0d3b27 100644
--- a/compiler-rt/lib/profile/InstrProfilingFile.c
+++ b/compiler-rt/lib/profile/InstrProfilingFile.c
@@ -335,10 +335,10 @@ static void initFileWriter(ProfDataWriter *This, FILE *File) {
COMPILER_RT_VISIBILITY ProfBufferIO *
lprofCreateBufferIOInternal(void *File, uint32_t BufferSz) {
FreeHook = &free;
- DynamicBufferIOBuffer = (uint8_t *)calloc(BufferSz, 1);
+ DynamicBufferIOBuffer = (uint8_t *)calloc(1, BufferSz);
VPBufferSize = BufferSz;
ProfDataWriter *fileWriter =
- (ProfDataWriter *)calloc(sizeof(ProfDataWriter), 1);
+ (ProfDataWriter *)calloc(1, sizeof(ProfDataWriter));
initFileWriter(fileWriter, File);
ProfBufferIO *IO = lprofCreateBufferIO(fileWriter);
IO->OwnFileWriter = 1;
diff --git a/compiler-rt/test/tsan/java_finalizer2.cpp b/compiler-rt/test/tsan/java_finalizer2.cpp
index 87528900541a84..0d677be2ba1a0b 100644
--- a/compiler-rt/test/tsan/java_finalizer2.cpp
+++ b/compiler-rt/test/tsan/java_finalizer2.cpp
@@ -51,7 +51,7 @@ void *Ballast(void *p) {
}
int main() {
- Heap* heap = (Heap*)calloc(sizeof(Heap), 2) + 1;
+ Heap *heap = (Heap *)calloc(2, sizeof(Heap)) + 1;
__tsan_java_init((jptr)heap, sizeof(*heap));
__tsan_java_alloc((jptr)heap, sizeof(*heap));
// Ballast threads merely make the bug a bit easier to trigger.
More information about the llvm-commits
mailing list