diff --git a/libcxx/include/__memory/compressed_pair.h b/libcxx/include/__memory/compressed_pair.h index 629e3ad8848ffa8..afa78f99612693f 100644 --- a/libcxx/include/__memory/compressed_pair.h +++ b/libcxx/include/__memory/compressed_pair.h @@ -56,7 +56,7 @@ template class __compressed_pair_padding { char __padding_[((is_empty<_ToPad>::value && !__libcpp_is_final<_ToPad>::value) || is_reference<_ToPad>::value) ? 0 - : sizeof(_ToPad) - __datasizeof_v<_ToPad>]; + : sizeof(_ToPad) - __datasizeof_v<_ToPad>] = {}; }; # define _LIBCPP_COMPRESSED_PAIR(T1, Initializer1, T2, Initializer2) \ diff --git a/libcxx/test/std/utilities/smartptr/unique.ptr/constinit.compile.pass.cpp b/libcxx/test/std/utilities/smartptr/unique.ptr/constinit.compile.pass.cpp new file mode 100644 index 000000000000000..a52089385211fb5 --- /dev/null +++ b/libcxx/test/std/utilities/smartptr/unique.ptr/constinit.compile.pass.cpp @@ -0,0 +1,19 @@ +//===----------------------------------------------------------------------===// +// +// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions. +// See https://llvm.org/LICENSE.txt for license information. +// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception +// +//===----------------------------------------------------------------------===// + +// UNSUPPORTED: c++03 + +// + +// Check that uniuqe_ptr is constant initialized + +#include + +#include "test_macros.h" + +TEST_CONSTINIT std::unique_ptr ptr; diff --git a/libcxx/test/support/test_macros.h b/libcxx/test/support/test_macros.h index 3aa818af1d26959..ae171b3f223ab3d 100644 --- a/libcxx/test/support/test_macros.h +++ b/libcxx/test/support/test_macros.h @@ -221,9 +221,11 @@ #endif #if TEST_STD_VER > 17 -#define TEST_CONSTINIT constinit +# define TEST_CONSTINIT constinit +#elif __has_cpp_attribute(clang::require_constant_initialization) +# define TEST_CONSTINIT [[clang::require_constant_initialization]] #else -#define TEST_CONSTINIT +# define TEST_CONSTINIT #endif #if TEST_STD_VER < 11