[libc++abi] Use std::nullptr_t instead of declaring it manually

Sometimes libc++'s stddef.h wrapper gets included, which defines
::nullptr_t. This test is compiled with -Wshadow -Werror, so shadowing
::nullptr_t with a nullptr_t in main is an error. Include cstddef,
which is guaranteed to define std::nullptr_t in C++11 and forward.

Reviewed By: ldionne, #libc_abi

Differential Revision: https://reviews.llvm.org/D137127
This commit is contained in:
Ryan Prichard 2022-11-04 15:51:44 -07:00
parent ada6aa3f5c
commit 292533324c

View File

@ -6,11 +6,13 @@
//
//===----------------------------------------------------------------------===//
// UNSUPPORTED: c++03,
// UNSUPPORTED: c++03
// UNSUPPORTED: no-exceptions
#include <cassert>
#include <cstddef>
#include <cstdlib>
#include <type_traits>
struct A {};
@ -27,13 +29,13 @@ static void catch_nullptr_test() {
int main(int, char**)
{
using nullptr_t = decltype(nullptr);
static_assert(std::is_same<std::nullptr_t, decltype(nullptr)>::value, "");
// A reference to nullptr_t can catch nullptr.
catch_nullptr_test<nullptr_t, true>();
catch_nullptr_test<const nullptr_t, true>();
catch_nullptr_test<volatile nullptr_t, true>();
catch_nullptr_test<const volatile nullptr_t, true>();
catch_nullptr_test<std::nullptr_t, true>();
catch_nullptr_test<const std::nullptr_t, true>();
catch_nullptr_test<volatile std::nullptr_t, true>();
catch_nullptr_test<const volatile std::nullptr_t, true>();
// No other reference type can.
#if 0