[libcxx-commits] [libcxx] aa2b05f - [libc++] Use stack buffers for uninitialized storage in tests.

Konstantin Varlamov via libcxx-commits libcxx-commits at lists.llvm.org
Tue Nov 1 19:21:22 PDT 2022


Author: Konstantin Varlamov
Date: 2022-11-01T19:21:11-07:00
New Revision: aa2b05f0b9800225d44f64d445aaa19063e67e4a

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

LOG: [libc++] Use stack buffers for uninitialized storage in tests.

This makes the tests more minimal, and in particular it avoids relying on a complete `<cstdlib>`, which may not be available on all platforms.

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

Added: 
    

Modified: 
    libcxx/test/std/utilities/utility/mem.res/mem.poly.allocator.class/mem.poly.allocator.mem/construct_pair.pass.cpp
    libcxx/test/std/utilities/utility/mem.res/mem.poly.allocator.class/mem.poly.allocator.mem/construct_piecewise_pair_evil.pass.cpp
    libcxx/test/std/utilities/utility/mem.res/mem.poly.allocator.class/mem.poly.allocator.mem/destroy.pass.cpp

Removed: 
    


################################################################################
diff  --git a/libcxx/test/std/utilities/utility/mem.res/mem.poly.allocator.class/mem.poly.allocator.mem/construct_pair.pass.cpp b/libcxx/test/std/utilities/utility/mem.res/mem.poly.allocator.class/mem.poly.allocator.mem/construct_pair.pass.cpp
index 205fd7028d43b..4f56b7474743c 100644
--- a/libcxx/test/std/utilities/utility/mem.res/mem.poly.allocator.class/mem.poly.allocator.mem/construct_pair.pass.cpp
+++ b/libcxx/test/std/utilities/utility/mem.res/mem.poly.allocator.class/mem.poly.allocator.mem/construct_pair.pass.cpp
@@ -19,7 +19,6 @@
 
 #include <memory_resource>
 #include <cassert>
-#include <cstdlib>
 #include <tuple>
 #include <type_traits>
 #include <utility>
@@ -38,13 +37,13 @@ int main(int, char**) {
     typedef default_constructible T;
     typedef std::pair<T, T> P;
     typedef std::pmr::polymorphic_allocator<void> A;
-    P* ptr = (P*)std::malloc(sizeof(P));
+    alignas(P) char buffer[sizeof(P)];
+    P* ptr = reinterpret_cast<P*>(buffer);
     A a;
     a.construct(ptr);
     assert(constructed == 2);
     assert(ptr->first.x == 42);
     assert(ptr->second.x == 42);
-    std::free(ptr);
   }
 
   return 0;

diff  --git a/libcxx/test/std/utilities/utility/mem.res/mem.poly.allocator.class/mem.poly.allocator.mem/construct_piecewise_pair_evil.pass.cpp b/libcxx/test/std/utilities/utility/mem.res/mem.poly.allocator.class/mem.poly.allocator.mem/construct_piecewise_pair_evil.pass.cpp
index 097b174aca094..30b4374342def 100644
--- a/libcxx/test/std/utilities/utility/mem.res/mem.poly.allocator.class/mem.poly.allocator.mem/construct_piecewise_pair_evil.pass.cpp
+++ b/libcxx/test/std/utilities/utility/mem.res/mem.poly.allocator.class/mem.poly.allocator.mem/construct_piecewise_pair_evil.pass.cpp
@@ -23,7 +23,6 @@
 #include <type_traits>
 #include <utility>
 #include <cassert>
-#include <cstdlib>
 
 #include "test_macros.h"
 
@@ -105,13 +104,12 @@ void test_evil() {
   PMA pma(std::pmr::new_delete_resource());
   {
     using Pair  = std::pair<W1, W2>;
-    void* where = std::malloc(sizeof(Pair));
-    Pair* p     = (Pair*)where;
+    alignas(Pair) char buffer[sizeof(Pair)];
+    Pair* p = reinterpret_cast<Pair*>(buffer);
     pma.construct(p, std::piecewise_construct, std::make_tuple(42), std::make_tuple(42));
     assert(p->first.holds(42, pma));
     assert(p->second.holds(42, pma));
     pma.destroy(p);
-    std::free(where);
   }
 }
 

diff  --git a/libcxx/test/std/utilities/utility/mem.res/mem.poly.allocator.class/mem.poly.allocator.mem/destroy.pass.cpp b/libcxx/test/std/utilities/utility/mem.res/mem.poly.allocator.class/mem.poly.allocator.mem/destroy.pass.cpp
index 2594f5226c258..985dda229d67c 100644
--- a/libcxx/test/std/utilities/utility/mem.res/mem.poly.allocator.class/mem.poly.allocator.mem/destroy.pass.cpp
+++ b/libcxx/test/std/utilities/utility/mem.res/mem.poly.allocator.class/mem.poly.allocator.mem/destroy.pass.cpp
@@ -19,7 +19,6 @@
 
 #include <memory_resource>
 #include <cassert>
-#include <cstdlib>
 #include <new>
 #include <type_traits>
 
@@ -39,11 +38,11 @@ int main(int, char**) {
     ASSERT_SAME_TYPE(decltype(a.destroy((destroyable*)nullptr)), void);
   }
   {
-    destroyable* ptr = ::new (std::malloc(sizeof(destroyable))) destroyable();
+    alignas(destroyable) char buffer[sizeof(destroyable)];
+    destroyable* ptr = ::new (buffer) destroyable();
     assert(count == 1);
     A{}.destroy(ptr);
     assert(count == 0);
-    std::free(ptr);
   }
 
   return 0;


        


More information about the libcxx-commits mailing list