From a5378f9b60d37d9839aea8f9ef50ad9c5a0f738c Mon Sep 17 00:00:00 2001 From: Jonathan Wakely Date: Fri, 26 Jul 2019 14:30:42 +0100 Subject: [PATCH] Define __cpp_lib_endian feature test macro This macro was added as part of moving std::endian from to . * include/std/bit (__cpp_lib_endian): Define. * include/std/version (__cpp_lib_endian): Define. * testsuite/26_numerics/endian/2.cc: New. * testsuite/26_numerics/endian/3.cc: New. * testsuite/26_numerics/endian/4.cc: New. From-SVN: r273828 --- libstdc++-v3/ChangeLog | 8 ++++++ libstdc++-v3/include/std/bit | 2 ++ libstdc++-v3/include/std/version | 1 + .../testsuite/26_numerics/endian/2.cc | 27 +++++++++++++++++++ .../testsuite/26_numerics/endian/3.cc | 27 +++++++++++++++++++ .../testsuite/26_numerics/endian/4.cc | 25 +++++++++++++++++ 6 files changed, 90 insertions(+) create mode 100644 libstdc++-v3/testsuite/26_numerics/endian/2.cc create mode 100644 libstdc++-v3/testsuite/26_numerics/endian/3.cc create mode 100644 libstdc++-v3/testsuite/26_numerics/endian/4.cc diff --git a/libstdc++-v3/ChangeLog b/libstdc++-v3/ChangeLog index c9c338fd47b..98807d86c1e 100644 --- a/libstdc++-v3/ChangeLog +++ b/libstdc++-v3/ChangeLog @@ -1,3 +1,11 @@ +2019-07-26 Jonathan Wakely + + * include/std/bit (__cpp_lib_endian): Define. + * include/std/version (__cpp_lib_endian): Define. + * testsuite/26_numerics/endian/2.cc: New. + * testsuite/26_numerics/endian/3.cc: New. + * testsuite/26_numerics/endian/4.cc: New. + 2019-07-26 François Dumont * testsuite/util/testsuite_iterators.h diff --git a/libstdc++-v3/include/std/bit b/libstdc++-v3/include/std/bit index d57433c093a..f01fcd621e5 100644 --- a/libstdc++-v3/include/std/bit +++ b/libstdc++-v3/include/std/bit @@ -315,6 +315,8 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION log2p1(_Tp __x) noexcept { return std::__log2p1(__x); } +#define __cpp_lib_endian 201907L + /// Byte order enum class endian { diff --git a/libstdc++-v3/include/std/version b/libstdc++-v3/include/std/version index d134f7fde01..6940b4499e6 100644 --- a/libstdc++-v3/include/std/version +++ b/libstdc++-v3/include/std/version @@ -156,6 +156,7 @@ #if __cpp_impl_destroying_delete # define __cpp_lib_destroying_delete 201806L #endif +#define __cpp_lib_endian 201907L #define __cpp_lib_erase_if 201900L #define __cpp_lib_interpolate 201902L #ifdef _GLIBCXX_HAVE_BUILTIN_IS_CONSTANT_EVALUATED diff --git a/libstdc++-v3/testsuite/26_numerics/endian/2.cc b/libstdc++-v3/testsuite/26_numerics/endian/2.cc new file mode 100644 index 00000000000..474bae479e1 --- /dev/null +++ b/libstdc++-v3/testsuite/26_numerics/endian/2.cc @@ -0,0 +1,27 @@ +// Copyright (C) 2019 Free Software Foundation, Inc. +// +// This file is part of the GNU ISO C++ Library. This library is free +// software; you can redistribute it and/or modify it under the +// terms of the GNU General Public License as published by the +// Free Software Foundation; either version 3, or (at your option) +// any later version. + +// This library is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. + +// You should have received a copy of the GNU General Public License along +// with this library; see the file COPYING3. If not see +// . + +// { dg-options "-std=gnu++2a" } +// { dg-do compile { target c++2a } } + +#include + +#ifndef __cpp_lib_endian +# error "Feature-test macro for endian missing in " +#elif __cpp_lib_endian != 201907L +# error "Feature-test macro for endian has wrong value in " +#endif diff --git a/libstdc++-v3/testsuite/26_numerics/endian/3.cc b/libstdc++-v3/testsuite/26_numerics/endian/3.cc new file mode 100644 index 00000000000..a7af53d0525 --- /dev/null +++ b/libstdc++-v3/testsuite/26_numerics/endian/3.cc @@ -0,0 +1,27 @@ +// Copyright (C) 2019 Free Software Foundation, Inc. +// +// This file is part of the GNU ISO C++ Library. This library is free +// software; you can redistribute it and/or modify it under the +// terms of the GNU General Public License as published by the +// Free Software Foundation; either version 3, or (at your option) +// any later version. + +// This library is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. + +// You should have received a copy of the GNU General Public License along +// with this library; see the file COPYING3. If not see +// . + +// { dg-options "-std=gnu++2a" } +// { dg-do compile { target c++2a } } + +#include + +#ifndef __cpp_lib_endian +# error "Feature-test macro for endian missing in " +#elif __cpp_lib_endian != 201907L +# error "Feature-test macro for endian has wrong value in " +#endif diff --git a/libstdc++-v3/testsuite/26_numerics/endian/4.cc b/libstdc++-v3/testsuite/26_numerics/endian/4.cc new file mode 100644 index 00000000000..93bed38a631 --- /dev/null +++ b/libstdc++-v3/testsuite/26_numerics/endian/4.cc @@ -0,0 +1,25 @@ +// Copyright (C) 2019 Free Software Foundation, Inc. +// +// This file is part of the GNU ISO C++ Library. This library is free +// software; you can redistribute it and/or modify it under the +// terms of the GNU General Public License as published by the +// Free Software Foundation; either version 3, or (at your option) +// any later version. + +// This library is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. + +// You should have received a copy of the GNU General Public License along +// with this library; see the file COPYING3. If not see +// . + +// { dg-do compile { target c++17_down } } + +#include +#include + +#ifdef __cpp_lib_endian +# error "Feature-test macro for endian defined before C++20" +#endif