[libc-commits] [libc] d3b3304 - [libc] Add a functioning realloc for hermetic tests.

Siva Chandra Reddy via libc-commits libc-commits at lists.llvm.org
Thu May 18 09:51:27 PDT 2023


Author: Siva Chandra Reddy
Date: 2023-05-18T16:51:18Z
New Revision: d3b33042227019a82693733627973170d9760218

URL: https://github.com/llvm/llvm-project/commit/d3b33042227019a82693733627973170d9760218
DIFF: https://github.com/llvm/llvm-project/commit/d3b33042227019a82693733627973170d9760218.diff

LOG: [libc] Add a functioning realloc for hermetic tests.

Reviewed By: jhuber6

Differential Revision: https://reviews.llvm.org/D150846

Added: 
    

Modified: 
    libc/test/UnitTest/HermeticTestUtils.cpp
    libc/test/src/__support/CMakeLists.txt
    libc/test/src/__support/CPP/CMakeLists.txt

Removed: 
    


################################################################################
diff  --git a/libc/test/UnitTest/HermeticTestUtils.cpp b/libc/test/UnitTest/HermeticTestUtils.cpp
index 7117341fee9aa..3d88b0ed64e81 100644
--- a/libc/test/UnitTest/HermeticTestUtils.cpp
+++ b/libc/test/UnitTest/HermeticTestUtils.cpp
@@ -74,9 +74,20 @@ void *malloc(size_t s) {
 
 void free(void *) {}
 
-void *realloc(void *ptr, size_t s) {
-  free(ptr);
-  return malloc(s);
+void *realloc(void *mem, size_t s) {
+  if (mem == nullptr)
+    return malloc(s);
+  uint8_t *newmem = reinterpret_cast<uint8_t *>(malloc(s));
+  if (newmem == nullptr)
+    return nullptr;
+  uint8_t *oldmem = reinterpret_cast<uint8_t *>(mem);
+  // We use a simple for loop to copy the data over.
+  // If |s| is less the previous alloc size, the copy works as expected.
+  // If |s| is greater than the previous alloc size, then garbage is copied
+  // over to the additional part in the new memory block.
+  for (size_t i = 0; i < s; ++i)
+    newmem[i] = oldmem[i];
+  return newmem;
 }
 
 // The unit test framework uses pure virtual functions. Since hermetic tests

diff  --git a/libc/test/src/__support/CMakeLists.txt b/libc/test/src/__support/CMakeLists.txt
index 154ebfe307e97..ca75e7df816e8 100644
--- a/libc/test/src/__support/CMakeLists.txt
+++ b/libc/test/src/__support/CMakeLists.txt
@@ -95,8 +95,6 @@ add_libc_test(
 
 add_libc_test(
   char_vector_test
-  # This test relies on 'realloc' which is not implemented for hermetic tests.
-  UNIT_TEST_ONLY
   SUITE
     libc-support-tests
   SRCS

diff  --git a/libc/test/src/__support/CPP/CMakeLists.txt b/libc/test/src/__support/CPP/CMakeLists.txt
index 28db8bdd5c87b..04d128c6a3c38 100644
--- a/libc/test/src/__support/CPP/CMakeLists.txt
+++ b/libc/test/src/__support/CPP/CMakeLists.txt
@@ -101,8 +101,6 @@ add_libc_test(
 
 add_libc_test(
   string_test
-  # This test relies on 'realloc' which is not implemented for hermetic tests.
-  UNIT_TEST_ONLY
   SUITE
     libc-cpp-utils-tests
   SRCS


        


More information about the libc-commits mailing list