Fix GCC 7 test failures.
This patch fixes the test failures and unexpected passes that occur when testing against GCC 7. Specifically: * don't mark __gcd as always inline because it's a recursive function. GCC diagnoses this. * don't XFAIL the aligned allocation tests. GCC 7 supports them but not the -faligned-allocation option. * Work around gcc.gnu.org/PR78489 in variants constructors. git-svn-id: https://llvm.org/svn/llvm-project/libcxx/trunk@302488 91177308-0d34-0410-b5e6-96231b3b80d8
This commit is contained in:
@@ -66,11 +66,11 @@ struct __abs<_Result, _Source, false> {
|
|||||||
|
|
||||||
|
|
||||||
template<class _Tp>
|
template<class _Tp>
|
||||||
_LIBCPP_CONSTEXPR _LIBCPP_INLINE_VISIBILITY
|
_LIBCPP_CONSTEXPR _LIBCPP_HIDDEN
|
||||||
_Tp __gcd(_Tp __m, _Tp __n)
|
inline _Tp __gcd(_Tp __m, _Tp __n)
|
||||||
{
|
{
|
||||||
static_assert((!is_signed<_Tp>::value), "" );
|
static_assert((!is_signed<_Tp>::value), "" );
|
||||||
return __n == 0 ? __m : __gcd<_Tp>(__n, __m % __n);
|
return __n == 0 ? __m : _VSTD_LFTS_V2::__gcd<_Tp>(__n, __m % __n);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
@@ -84,8 +84,9 @@ gcd(_Tp __m, _Up __n)
|
|||||||
static_assert((!is_same<typename remove_cv<_Up>::type, bool>::value), "Second argument to gcd cannot be bool" );
|
static_assert((!is_same<typename remove_cv<_Up>::type, bool>::value), "Second argument to gcd cannot be bool" );
|
||||||
using _Rp = common_type_t<_Tp,_Up>;
|
using _Rp = common_type_t<_Tp,_Up>;
|
||||||
using _Wp = make_unsigned_t<_Rp>;
|
using _Wp = make_unsigned_t<_Rp>;
|
||||||
return static_cast<_Rp>(__gcd(static_cast<_Wp>(__abs<_Rp, _Tp>()(__m)),
|
return static_cast<_Rp>(_VSTD_LFTS_V2::__gcd(
|
||||||
static_cast<_Wp>(__abs<_Rp, _Up>()(__n))));
|
static_cast<_Wp>(__abs<_Rp, _Tp>()(__m)),
|
||||||
|
static_cast<_Wp>(__abs<_Rp, _Up>()(__n))));
|
||||||
}
|
}
|
||||||
|
|
||||||
template<class _Tp, class _Up>
|
template<class _Tp, class _Up>
|
||||||
@@ -100,7 +101,7 @@ lcm(_Tp __m, _Up __n)
|
|||||||
return 0;
|
return 0;
|
||||||
|
|
||||||
using _Rp = common_type_t<_Tp,_Up>;
|
using _Rp = common_type_t<_Tp,_Up>;
|
||||||
_Rp __val1 = __abs<_Rp, _Tp>()(__m) / gcd(__m, __n);
|
_Rp __val1 = __abs<_Rp, _Tp>()(__m) / _VSTD_LFTS_V2::gcd(__m, __n);
|
||||||
_Rp __val2 = __abs<_Rp, _Up>()(__n);
|
_Rp __val2 = __abs<_Rp, _Up>()(__n);
|
||||||
_LIBCPP_ASSERT((numeric_limits<_Rp>::max() / __val1 > __val2), "Overflow in lcm");
|
_LIBCPP_ASSERT((numeric_limits<_Rp>::max() / __val1 > __val2), "Overflow in lcm");
|
||||||
return __val1 * __val2;
|
return __val1 * __val2;
|
||||||
|
|||||||
@@ -222,11 +222,11 @@ struct __abs<_Result, _Source, false> {
|
|||||||
|
|
||||||
|
|
||||||
template<class _Tp>
|
template<class _Tp>
|
||||||
_LIBCPP_CONSTEXPR _LIBCPP_INLINE_VISIBILITY
|
_LIBCPP_CONSTEXPR _LIBCPP_HIDDEN
|
||||||
_Tp __gcd(_Tp __m, _Tp __n)
|
_Tp __gcd(_Tp __m, _Tp __n)
|
||||||
{
|
{
|
||||||
static_assert((!is_signed<_Tp>::value), "");
|
static_assert((!is_signed<_Tp>::value), "");
|
||||||
return __n == 0 ? __m : __gcd<_Tp>(__n, __m % __n);
|
return __n == 0 ? __m : _VSTD::__gcd<_Tp>(__n, __m % __n);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
@@ -240,8 +240,9 @@ gcd(_Tp __m, _Up __n)
|
|||||||
static_assert((!is_same<typename remove_cv<_Up>::type, bool>::value), "Second argument to gcd cannot be bool" );
|
static_assert((!is_same<typename remove_cv<_Up>::type, bool>::value), "Second argument to gcd cannot be bool" );
|
||||||
using _Rp = common_type_t<_Tp,_Up>;
|
using _Rp = common_type_t<_Tp,_Up>;
|
||||||
using _Wp = make_unsigned_t<_Rp>;
|
using _Wp = make_unsigned_t<_Rp>;
|
||||||
return static_cast<_Rp>(__gcd(static_cast<_Wp>(__abs<_Rp, _Tp>()(__m)),
|
return static_cast<_Rp>(_VSTD::__gcd(
|
||||||
static_cast<_Wp>(__abs<_Rp, _Up>()(__n))));
|
static_cast<_Wp>(__abs<_Rp, _Tp>()(__m)),
|
||||||
|
static_cast<_Wp>(__abs<_Rp, _Up>()(__n))));
|
||||||
}
|
}
|
||||||
|
|
||||||
template<class _Tp, class _Up>
|
template<class _Tp, class _Up>
|
||||||
@@ -256,7 +257,7 @@ lcm(_Tp __m, _Up __n)
|
|||||||
return 0;
|
return 0;
|
||||||
|
|
||||||
using _Rp = common_type_t<_Tp,_Up>;
|
using _Rp = common_type_t<_Tp,_Up>;
|
||||||
_Rp __val1 = __abs<_Rp, _Tp>()(__m) / gcd(__m, __n);
|
_Rp __val1 = __abs<_Rp, _Tp>()(__m) / _VSTD::gcd(__m, __n);
|
||||||
_Rp __val2 = __abs<_Rp, _Up>()(__n);
|
_Rp __val2 = __abs<_Rp, _Up>()(__n);
|
||||||
_LIBCPP_ASSERT((numeric_limits<_Rp>::max() / __val1 > __val2), "Overflow in lcm");
|
_LIBCPP_ASSERT((numeric_limits<_Rp>::max() / __val1 > __val2), "Overflow in lcm");
|
||||||
return __val1 * __val2;
|
return __val1 * __val2;
|
||||||
|
|||||||
@@ -1140,7 +1140,7 @@ public:
|
|||||||
: __impl(in_place_index<_Ip>, _VSTD::forward<_Arg>(__arg)) {}
|
: __impl(in_place_index<_Ip>, _VSTD::forward<_Arg>(__arg)) {}
|
||||||
|
|
||||||
template <size_t _Ip, class... _Args,
|
template <size_t _Ip, class... _Args,
|
||||||
enable_if_t<(_Ip < sizeof...(_Types)), int> = 0,
|
class = enable_if_t<(_Ip < sizeof...(_Types)), int>,
|
||||||
class _Tp = variant_alternative_t<_Ip, variant<_Types...>>,
|
class _Tp = variant_alternative_t<_Ip, variant<_Types...>>,
|
||||||
enable_if_t<is_constructible_v<_Tp, _Args...>, int> = 0>
|
enable_if_t<is_constructible_v<_Tp, _Args...>, int> = 0>
|
||||||
inline _LIBCPP_INLINE_VISIBILITY
|
inline _LIBCPP_INLINE_VISIBILITY
|
||||||
|
|||||||
@@ -8,6 +8,11 @@
|
|||||||
//===----------------------------------------------------------------------===//
|
//===----------------------------------------------------------------------===//
|
||||||
|
|
||||||
// UNSUPPORTED: c++98, c++03, c++11
|
// UNSUPPORTED: c++98, c++03, c++11
|
||||||
|
|
||||||
|
// GCC returns true for __is_trivially_constructible(void, int)
|
||||||
|
// See gcc.gnu.org/PR80682
|
||||||
|
// XFAIL: gcc
|
||||||
|
|
||||||
// <experimental/type_traits>
|
// <experimental/type_traits>
|
||||||
|
|
||||||
#include <experimental/type_traits>
|
#include <experimental/type_traits>
|
||||||
|
|||||||
@@ -15,7 +15,7 @@
|
|||||||
// XFAIL: clang-3, apple-clang-7, apple-clang-8
|
// XFAIL: clang-3, apple-clang-7, apple-clang-8
|
||||||
|
|
||||||
// None of the current GCC compilers support this.
|
// None of the current GCC compilers support this.
|
||||||
// XFAIL: gcc
|
// XFAIL: gcc-5, gcc-6
|
||||||
|
|
||||||
// XFAIL: with_system_cxx_lib=macosx10.12
|
// XFAIL: with_system_cxx_lib=macosx10.12
|
||||||
// XFAIL: with_system_cxx_lib=macosx10.11
|
// XFAIL: with_system_cxx_lib=macosx10.11
|
||||||
|
|||||||
@@ -13,7 +13,7 @@
|
|||||||
// UNSUPPORTED: sanitizer-new-delete
|
// UNSUPPORTED: sanitizer-new-delete
|
||||||
|
|
||||||
// FIXME change this to XFAIL.
|
// FIXME change this to XFAIL.
|
||||||
// UNSUPPORTED: no-aligned-allocation
|
// UNSUPPORTED: no-aligned-allocation && !gcc
|
||||||
|
|
||||||
// XFAIL: with_system_cxx_lib=macosx10.12
|
// XFAIL: with_system_cxx_lib=macosx10.12
|
||||||
// XFAIL: with_system_cxx_lib=macosx10.11
|
// XFAIL: with_system_cxx_lib=macosx10.11
|
||||||
|
|||||||
@@ -13,7 +13,7 @@
|
|||||||
// UNSUPPORTED: sanitizer-new-delete
|
// UNSUPPORTED: sanitizer-new-delete
|
||||||
|
|
||||||
// FIXME turn this into an XFAIL
|
// FIXME turn this into an XFAIL
|
||||||
// UNSUPPORTED: no-aligned-allocation
|
// UNSUPPORTED: no-aligned-allocation && !gcc
|
||||||
|
|
||||||
// XFAIL: with_system_cxx_lib=macosx10.12
|
// XFAIL: with_system_cxx_lib=macosx10.12
|
||||||
// XFAIL: with_system_cxx_lib=macosx10.11
|
// XFAIL: with_system_cxx_lib=macosx10.11
|
||||||
|
|||||||
@@ -17,7 +17,7 @@
|
|||||||
// XFAIL: with_system_cxx_lib=macosx10.7
|
// XFAIL: with_system_cxx_lib=macosx10.7
|
||||||
// XFAIL: with_system_cxx_lib=macosx10.8
|
// XFAIL: with_system_cxx_lib=macosx10.8
|
||||||
|
|
||||||
// XFAIL: no-aligned-allocation
|
// XFAIL: no-aligned-allocation && !gcc
|
||||||
|
|
||||||
// On Windows libc++ doesn't provide its own definitions for new/delete
|
// On Windows libc++ doesn't provide its own definitions for new/delete
|
||||||
// but instead depends on the ones in VCRuntime. However VCRuntime does not
|
// but instead depends on the ones in VCRuntime. However VCRuntime does not
|
||||||
|
|||||||
@@ -10,7 +10,8 @@
|
|||||||
// UNSUPPORTED: c++98, c++03, c++11, c++14
|
// UNSUPPORTED: c++98, c++03, c++11, c++14
|
||||||
// UNSUPPORTED: sanitizer-new-delete
|
// UNSUPPORTED: sanitizer-new-delete
|
||||||
|
|
||||||
// XFAIL: no-aligned-allocation
|
// NOTE: GCC doesn't provide the -faligned-allocation flag to test for
|
||||||
|
// XFAIL: no-aligned-allocation && !gcc
|
||||||
|
|
||||||
// test operator new replacement
|
// test operator new replacement
|
||||||
|
|
||||||
|
|||||||
@@ -14,7 +14,7 @@
|
|||||||
// XFAIL: clang-3, apple-clang-7, apple-clang-8
|
// XFAIL: clang-3, apple-clang-7, apple-clang-8
|
||||||
|
|
||||||
// None of the current GCC compilers support this.
|
// None of the current GCC compilers support this.
|
||||||
// XFAIL: gcc
|
// XFAIL: gcc-5, gcc-6
|
||||||
|
|
||||||
// XFAIL: with_system_cxx_lib=macosx10.12
|
// XFAIL: with_system_cxx_lib=macosx10.12
|
||||||
// XFAIL: with_system_cxx_lib=macosx10.11
|
// XFAIL: with_system_cxx_lib=macosx10.11
|
||||||
|
|||||||
@@ -20,7 +20,7 @@
|
|||||||
// UNSUPPORTED: sanitizer-new-delete
|
// UNSUPPORTED: sanitizer-new-delete
|
||||||
|
|
||||||
// FIXME turn this into an XFAIL
|
// FIXME turn this into an XFAIL
|
||||||
// UNSUPPORTED: no-aligned-allocation
|
// UNSUPPORTED: no-aligned-allocation && !gcc
|
||||||
|
|
||||||
// On Windows libc++ doesn't provide its own definitions for new/delete
|
// On Windows libc++ doesn't provide its own definitions for new/delete
|
||||||
// but instead depends on the ones in VCRuntime. However VCRuntime does not
|
// but instead depends on the ones in VCRuntime. However VCRuntime does not
|
||||||
|
|||||||
@@ -20,7 +20,7 @@
|
|||||||
// UNSUPPORTED: sanitizer-new-delete
|
// UNSUPPORTED: sanitizer-new-delete
|
||||||
|
|
||||||
// FIXME turn this into an XFAIL
|
// FIXME turn this into an XFAIL
|
||||||
// UNSUPPORTED: no-aligned-allocation
|
// UNSUPPORTED: no-aligned-allocation && !gcc
|
||||||
|
|
||||||
// On Windows libc++ doesn't provide its own definitions for new/delete
|
// On Windows libc++ doesn't provide its own definitions for new/delete
|
||||||
// but instead depends on the ones in VCRuntime. However VCRuntime does not
|
// but instead depends on the ones in VCRuntime. However VCRuntime does not
|
||||||
|
|||||||
@@ -17,7 +17,8 @@
|
|||||||
// XFAIL: with_system_cxx_lib=macosx10.7
|
// XFAIL: with_system_cxx_lib=macosx10.7
|
||||||
// XFAIL: with_system_cxx_lib=macosx10.8
|
// XFAIL: with_system_cxx_lib=macosx10.8
|
||||||
|
|
||||||
// XFAIL: no-aligned-allocation
|
// NOTE: gcc doesn't provide -faligned-allocation flag to test for
|
||||||
|
// XFAIL: no-aligned-allocation && !gcc
|
||||||
|
|
||||||
// On Windows libc++ doesn't provide its own definitions for new/delete
|
// On Windows libc++ doesn't provide its own definitions for new/delete
|
||||||
// but instead depends on the ones in VCRuntime. However VCRuntime does not
|
// but instead depends on the ones in VCRuntime. However VCRuntime does not
|
||||||
|
|||||||
@@ -10,7 +10,8 @@
|
|||||||
// UNSUPPORTED: c++98, c++03, c++11, c++14
|
// UNSUPPORTED: c++98, c++03, c++11, c++14
|
||||||
// UNSUPPORTED: sanitizer-new-delete
|
// UNSUPPORTED: sanitizer-new-delete
|
||||||
|
|
||||||
// XFAIL: no-aligned-allocation
|
// NOTE: GCC doesn't provide a -faligned-allocation flag
|
||||||
|
// XFAIL: no-aligned-allocation && !gcc
|
||||||
|
|
||||||
// test operator new replacement
|
// test operator new replacement
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user