[PATCH] D24372: [libcxx] Sprinkle constexpr over compressed_pair

Richard Smith via cfe-commits cfe-commits at lists.llvm.org
Fri Sep 9 11:49:00 PDT 2016


rsmith added a subscriber: rsmith.

================
Comment at: test/std/utilities/memory/unique.ptr/unique.ptr.runtime/unique.ptr.runtime.ctor/constinit.pass.cpp:19-23
@@ +18,6 @@
+
+_LIBCPP_SAFE_STATIC static std::unique_ptr<int> a;
+
+int main() {
+    assert(a == nullptr);
+}
----------------
This is a bit painful to test without _LIBCPP_SAFE_STATIC, because the contents of `a` will be all 0 bits on program startup regardless of whether static or dynamic initialization is performed. Something like this might work though:

  extern std::unique_ptr<int> a;
  void *trample = std::memset(&a, 0xab, sizeof(a));
  _LIBCPP_SAFE_STATIC std::unique_ptr<int> a;

  int main() {
    // Check that the initialization of 'a' was performed before the initialization of 'trample'.
    for (size_t n = 0; n != sizeof(a); ++n)
      assert(reinterpret_cast<char*>(trample)[n] == 0xab);
    // Put a unique_ptr object back so that the global dtor is valid.
    new (&a) std::unique_ptr<int>;
  }


Repository:
  rL LLVM

https://reviews.llvm.org/D24372





More information about the cfe-commits mailing list