[compiler-rt] [scudo] Add -Wconversion for tests and clean-up warnings. (PR #66147)
Christopher Ferris via llvm-commits
llvm-commits at lists.llvm.org
Tue Sep 12 17:58:55 PDT 2023
https://github.com/cferris1000 updated https://github.com/llvm/llvm-project/pull/66147:
>From 4f1131648599028e47ee0ea7811e685ccb62a115 Mon Sep 17 00:00:00 2001
From: Christopher Ferris <cferris at google.com>
Date: Tue, 12 Sep 2023 14:33:49 -0700
Subject: [PATCH 1/2] [scudo] Add -Wconversion for tests and clean-up warnings.
Fix all the places where the tests are doing implicit conversions.
---
.../lib/scudo/standalone/tests/CMakeLists.txt | 1 +
.../scudo/standalone/tests/combined_test.cpp | 26 +++++++++----------
.../standalone/tests/wrappers_c_test.cpp | 12 ++++-----
3 files changed, 20 insertions(+), 19 deletions(-)
diff --git a/compiler-rt/lib/scudo/standalone/tests/CMakeLists.txt b/compiler-rt/lib/scudo/standalone/tests/CMakeLists.txt
index e5d32f33d8cc4a1..a4a031d54d7c3ad 100644
--- a/compiler-rt/lib/scudo/standalone/tests/CMakeLists.txt
+++ b/compiler-rt/lib/scudo/standalone/tests/CMakeLists.txt
@@ -15,6 +15,7 @@ set(SCUDO_UNITTEST_CFLAGS
-DGTEST_HAS_RTTI=0
-g
# Extra flags for the C++ tests
+ -Wconversion
# TODO(kostyak): find a way to make -fsized-deallocation work
-Wno-mismatched-new-delete)
diff --git a/compiler-rt/lib/scudo/standalone/tests/combined_test.cpp b/compiler-rt/lib/scudo/standalone/tests/combined_test.cpp
index fc118fcadc6b6c7..911ee6187bab37f 100644
--- a/compiler-rt/lib/scudo/standalone/tests/combined_test.cpp
+++ b/compiler-rt/lib/scudo/standalone/tests/combined_test.cpp
@@ -54,7 +54,7 @@ void checkMemoryTaggingMaybe(AllocatorT *Allocator, void *P, scudo::uptr Size,
EXPECT_DEATH(
{
disableDebuggerdMaybe();
- reinterpret_cast<char *>(P)[-1] = 0xaa;
+ reinterpret_cast<char *>(P)[-1] = '\xaa';
},
"");
if (isPrimaryAllocation<AllocatorT>(Size, Alignment)
@@ -63,7 +63,7 @@ void checkMemoryTaggingMaybe(AllocatorT *Allocator, void *P, scudo::uptr Size,
EXPECT_DEATH(
{
disableDebuggerdMaybe();
- reinterpret_cast<char *>(P)[Size] = 0xaa;
+ reinterpret_cast<char *>(P)[Size] = '\xaa';
},
"");
}
@@ -268,7 +268,7 @@ SCUDO_TYPED_TEST(ScudoCombinedTest, ZeroContents) {
void *P = Allocator->allocate(Size, Origin, 1U << MinAlignLog, true);
EXPECT_NE(P, nullptr);
for (scudo::uptr I = 0; I < Size; I++)
- ASSERT_EQ((reinterpret_cast<char *>(P))[I], 0);
+ ASSERT_EQ((reinterpret_cast<char *>(P))[I], '\0');
memset(P, 0xaa, Size);
Allocator->deallocate(P, Origin, Size);
}
@@ -286,7 +286,7 @@ SCUDO_TYPED_TEST(ScudoCombinedTest, ZeroFill) {
void *P = Allocator->allocate(Size, Origin, 1U << MinAlignLog, false);
EXPECT_NE(P, nullptr);
for (scudo::uptr I = 0; I < Size; I++)
- ASSERT_EQ((reinterpret_cast<char *>(P))[I], 0);
+ ASSERT_EQ((reinterpret_cast<char *>(P))[I], '\0');
memset(P, 0xaa, Size);
Allocator->deallocate(P, Origin, Size);
}
@@ -345,7 +345,7 @@ SCUDO_TYPED_TEST(ScudoCombinedTest, ReallocateLargeIncreasing) {
// we preserve the data in the process.
scudo::uptr Size = 16;
void *P = Allocator->allocate(Size, Origin);
- const char Marker = 0xab;
+ const char Marker = '\xab';
memset(P, Marker, Size);
while (Size < TypeParam::Primary::SizeClassMap::MaxSize * 4) {
void *NewP = Allocator->reallocate(P, Size * 2);
@@ -367,7 +367,7 @@ SCUDO_TYPED_TEST(ScudoCombinedTest, ReallocateLargeDecreasing) {
scudo::uptr Size = TypeParam::Primary::SizeClassMap::MaxSize * 2;
const scudo::uptr DataSize = 2048U;
void *P = Allocator->allocate(Size, Origin);
- const char Marker = 0xab;
+ const char Marker = '\xab';
memset(P, Marker, scudo::Min(Size, DataSize));
while (Size > 1U) {
Size /= 2U;
@@ -390,7 +390,7 @@ SCUDO_TYPED_TEST(ScudoCombinedDeathTest, ReallocateSame) {
constexpr scudo::uptr ReallocSize =
TypeParam::Primary::SizeClassMap::MaxSize - 64;
void *P = Allocator->allocate(ReallocSize, Origin);
- const char Marker = 0xab;
+ const char Marker = '\xab';
memset(P, Marker, ReallocSize);
for (scudo::sptr Delta = -32; Delta < 32; Delta += 8) {
const scudo::uptr NewSize =
@@ -447,7 +447,7 @@ SCUDO_TYPED_TEST(ScudoCombinedDeathTest, UseAfterFree) {
disableDebuggerdMaybe();
void *P = Allocator->allocate(Size, Origin);
Allocator->deallocate(P, Origin);
- reinterpret_cast<char *>(P)[0] = 0xaa;
+ reinterpret_cast<char *>(P)[0] = '\xaa';
},
"");
EXPECT_DEATH(
@@ -455,7 +455,7 @@ SCUDO_TYPED_TEST(ScudoCombinedDeathTest, UseAfterFree) {
disableDebuggerdMaybe();
void *P = Allocator->allocate(Size, Origin);
Allocator->deallocate(P, Origin);
- reinterpret_cast<char *>(P)[Size - 1] = 0xaa;
+ reinterpret_cast<char *>(P)[Size - 1] = '\xaa';
},
"");
}
@@ -467,15 +467,15 @@ SCUDO_TYPED_TEST(ScudoCombinedDeathTest, DisableMemoryTagging) {
if (Allocator->useMemoryTaggingTestOnly()) {
// Check that disabling memory tagging works correctly.
void *P = Allocator->allocate(2048, Origin);
- EXPECT_DEATH(reinterpret_cast<char *>(P)[2048] = 0xaa, "");
+ EXPECT_DEATH(reinterpret_cast<char *>(P)[2048] = '\xaa', "");
scudo::ScopedDisableMemoryTagChecks NoTagChecks;
Allocator->disableMemoryTagging();
- reinterpret_cast<char *>(P)[2048] = 0xaa;
+ reinterpret_cast<char *>(P)[2048] = '\xaa';
Allocator->deallocate(P, Origin);
P = Allocator->allocate(2048, Origin);
EXPECT_EQ(scudo::untagPointer(P), P);
- reinterpret_cast<char *>(P)[2048] = 0xaa;
+ reinterpret_cast<char *>(P)[2048] = '\xaa';
Allocator->deallocate(P, Origin);
Allocator->releaseToOS(scudo::ReleaseToOS::Force);
@@ -782,7 +782,7 @@ SCUDO_TYPED_TEST(ScudoCombinedTest, DisableMemInit) {
for (unsigned I = 0; I != Ptrs.size(); ++I) {
Ptrs[I] = Allocator->allocate(Size, Origin, 1U << MinAlignLog, true);
for (scudo::uptr J = 0; J < Size; ++J)
- ASSERT_EQ((reinterpret_cast<char *>(Ptrs[I]))[J], 0);
+ ASSERT_EQ((reinterpret_cast<char *>(Ptrs[I]))[J], '\0');
}
}
diff --git a/compiler-rt/lib/scudo/standalone/tests/wrappers_c_test.cpp b/compiler-rt/lib/scudo/standalone/tests/wrappers_c_test.cpp
index 0e82813df8c0d5f..de1024d01fe8251 100644
--- a/compiler-rt/lib/scudo/standalone/tests/wrappers_c_test.cpp
+++ b/compiler-rt/lib/scudo/standalone/tests/wrappers_c_test.cpp
@@ -391,18 +391,18 @@ TEST_F(ScudoWrappersCTest, MallInfo) {
// mallinfo is deprecated.
#pragma clang diagnostic push
#pragma clang diagnostic ignored "-Wdeprecated-declarations"
- const size_t BypassQuarantineSize = 1024U;
+ const int BypassQuarantineSize = 1024;
struct mallinfo MI = mallinfo();
- size_t Allocated = MI.uordblks;
+ int Allocated = MI.uordblks;
void *P = malloc(BypassQuarantineSize);
EXPECT_NE(P, nullptr);
MI = mallinfo();
- EXPECT_GE(static_cast<size_t>(MI.uordblks), Allocated + BypassQuarantineSize);
- EXPECT_GT(static_cast<size_t>(MI.hblkhd), 0U);
- size_t Free = MI.fordblks;
+ EXPECT_GE(MI.uordblks, Allocated + BypassQuarantineSize);
+ EXPECT_GT(MI.hblkhd, 0);
+ int Free = MI.fordblks;
free(P);
MI = mallinfo();
- EXPECT_GE(static_cast<size_t>(MI.fordblks), Free + BypassQuarantineSize);
+ EXPECT_GE(MI.fordblks, Free + BypassQuarantineSize);
#pragma clang diagnostic pop
}
#endif
>From 5b44d95556c67c2f3a9fb0f1342956ca79bd3898 Mon Sep 17 00:00:00 2001
From: Christopher Ferris <cferris at google.com>
Date: Tue, 12 Sep 2023 17:57:51 -0700
Subject: [PATCH 2/2] Update for review comments.
In addition, update the mallinfo tests for Android.
---
.../scudo/standalone/tests/combined_test.cpp | 20 ++++++++--------
.../standalone/tests/wrappers_c_test.cpp | 24 +++++++++++++------
2 files changed, 27 insertions(+), 17 deletions(-)
diff --git a/compiler-rt/lib/scudo/standalone/tests/combined_test.cpp b/compiler-rt/lib/scudo/standalone/tests/combined_test.cpp
index 911ee6187bab37f..6ca9a7c7002ce3c 100644
--- a/compiler-rt/lib/scudo/standalone/tests/combined_test.cpp
+++ b/compiler-rt/lib/scudo/standalone/tests/combined_test.cpp
@@ -54,7 +54,7 @@ void checkMemoryTaggingMaybe(AllocatorT *Allocator, void *P, scudo::uptr Size,
EXPECT_DEATH(
{
disableDebuggerdMaybe();
- reinterpret_cast<char *>(P)[-1] = '\xaa';
+ reinterpret_cast<char *>(P)[-1] = 'A';
},
"");
if (isPrimaryAllocation<AllocatorT>(Size, Alignment)
@@ -63,7 +63,7 @@ void checkMemoryTaggingMaybe(AllocatorT *Allocator, void *P, scudo::uptr Size,
EXPECT_DEATH(
{
disableDebuggerdMaybe();
- reinterpret_cast<char *>(P)[Size] = '\xaa';
+ reinterpret_cast<char *>(P)[Size] = 'A';
},
"");
}
@@ -345,7 +345,7 @@ SCUDO_TYPED_TEST(ScudoCombinedTest, ReallocateLargeIncreasing) {
// we preserve the data in the process.
scudo::uptr Size = 16;
void *P = Allocator->allocate(Size, Origin);
- const char Marker = '\xab';
+ const char Marker = 'A';
memset(P, Marker, Size);
while (Size < TypeParam::Primary::SizeClassMap::MaxSize * 4) {
void *NewP = Allocator->reallocate(P, Size * 2);
@@ -367,7 +367,7 @@ SCUDO_TYPED_TEST(ScudoCombinedTest, ReallocateLargeDecreasing) {
scudo::uptr Size = TypeParam::Primary::SizeClassMap::MaxSize * 2;
const scudo::uptr DataSize = 2048U;
void *P = Allocator->allocate(Size, Origin);
- const char Marker = '\xab';
+ const char Marker = 'A';
memset(P, Marker, scudo::Min(Size, DataSize));
while (Size > 1U) {
Size /= 2U;
@@ -390,7 +390,7 @@ SCUDO_TYPED_TEST(ScudoCombinedDeathTest, ReallocateSame) {
constexpr scudo::uptr ReallocSize =
TypeParam::Primary::SizeClassMap::MaxSize - 64;
void *P = Allocator->allocate(ReallocSize, Origin);
- const char Marker = '\xab';
+ const char Marker = 'A';
memset(P, Marker, ReallocSize);
for (scudo::sptr Delta = -32; Delta < 32; Delta += 8) {
const scudo::uptr NewSize =
@@ -447,7 +447,7 @@ SCUDO_TYPED_TEST(ScudoCombinedDeathTest, UseAfterFree) {
disableDebuggerdMaybe();
void *P = Allocator->allocate(Size, Origin);
Allocator->deallocate(P, Origin);
- reinterpret_cast<char *>(P)[0] = '\xaa';
+ reinterpret_cast<char *>(P)[0] = 'A';
},
"");
EXPECT_DEATH(
@@ -455,7 +455,7 @@ SCUDO_TYPED_TEST(ScudoCombinedDeathTest, UseAfterFree) {
disableDebuggerdMaybe();
void *P = Allocator->allocate(Size, Origin);
Allocator->deallocate(P, Origin);
- reinterpret_cast<char *>(P)[Size - 1] = '\xaa';
+ reinterpret_cast<char *>(P)[Size - 1] = 'A';
},
"");
}
@@ -467,15 +467,15 @@ SCUDO_TYPED_TEST(ScudoCombinedDeathTest, DisableMemoryTagging) {
if (Allocator->useMemoryTaggingTestOnly()) {
// Check that disabling memory tagging works correctly.
void *P = Allocator->allocate(2048, Origin);
- EXPECT_DEATH(reinterpret_cast<char *>(P)[2048] = '\xaa', "");
+ EXPECT_DEATH(reinterpret_cast<char *>(P)[2048] = 'A', "");
scudo::ScopedDisableMemoryTagChecks NoTagChecks;
Allocator->disableMemoryTagging();
- reinterpret_cast<char *>(P)[2048] = '\xaa';
+ reinterpret_cast<char *>(P)[2048] = 'A';
Allocator->deallocate(P, Origin);
P = Allocator->allocate(2048, Origin);
EXPECT_EQ(scudo::untagPointer(P), P);
- reinterpret_cast<char *>(P)[2048] = '\xaa';
+ reinterpret_cast<char *>(P)[2048] = 'A';
Allocator->deallocate(P, Origin);
Allocator->releaseToOS(scudo::ReleaseToOS::Force);
diff --git a/compiler-rt/lib/scudo/standalone/tests/wrappers_c_test.cpp b/compiler-rt/lib/scudo/standalone/tests/wrappers_c_test.cpp
index de1024d01fe8251..05e8e527381e37f 100644
--- a/compiler-rt/lib/scudo/standalone/tests/wrappers_c_test.cpp
+++ b/compiler-rt/lib/scudo/standalone/tests/wrappers_c_test.cpp
@@ -386,28 +386,38 @@ TEST_F(ScudoWrappersCTest, OtherAlloc) {
#endif
}
-#if !SCUDO_FUCHSIA
-TEST_F(ScudoWrappersCTest, MallInfo) {
+template<typename FieldType>
+void MallInfoTest() {
// mallinfo is deprecated.
#pragma clang diagnostic push
#pragma clang diagnostic ignored "-Wdeprecated-declarations"
- const int BypassQuarantineSize = 1024;
+ const FieldType BypassQuarantineSize = 1024U;
struct mallinfo MI = mallinfo();
- int Allocated = MI.uordblks;
+ FieldType Allocated = MI.uordblks;
void *P = malloc(BypassQuarantineSize);
EXPECT_NE(P, nullptr);
MI = mallinfo();
EXPECT_GE(MI.uordblks, Allocated + BypassQuarantineSize);
- EXPECT_GT(MI.hblkhd, 0);
- int Free = MI.fordblks;
+ EXPECT_GT(MI.hblkhd, 0U);
+ FieldType Free = MI.fordblks;
free(P);
MI = mallinfo();
EXPECT_GE(MI.fordblks, Free + BypassQuarantineSize);
#pragma clang diagnostic pop
}
+
+#if !SCUDO_FUCHSIA
+TEST_F(ScudoWrappersCTest, MallInfo) {
+#if SCUDO_ANDROID
+ // Android accidentally set the fields to size_t instead of int.
+ MallInfoTest<size_t>();
+#else
+ MallInfoTest<int>();
+#endif
+}
#endif
-#if __GLIBC_PREREQ(2, 33)
+#if __GLIBC_PREREQ(2, 33) || SCUDO_ANDROID
TEST_F(ScudoWrappersCTest, MallInfo2) {
const size_t BypassQuarantineSize = 1024U;
struct mallinfo2 MI = mallinfo2();
More information about the llvm-commits
mailing list