Author: ericwf Date: Mon Dec 14 18:32:21 2015 New Revision: 255585 URL: http://llvm.org/viewvc/llvm-project?rev=255585&view=rev Log: Fix various GCC mis-configurations for newer versions.
This patch goes through and enables C++11 and C++14 features for newer GCC's. The main changes are: 1. Turn on variable templates. (Uses __cpp_variable_templates) 2. Assert atomic<Tp> is trivially copyable (Uses _GNUC_VER >= 501). 3. Turn on trailing return support for GCC. (Uses _GNUC_VER >= 404) 4. XFAIL void_t test for GCC 5.1 and 5.2. Fixed in GCC 6. Modified: libcxx/trunk/include/__config libcxx/trunk/include/atomic libcxx/trunk/test/std/atomics/atomics.types.generic/trivially_copyable.fail.cpp libcxx/trunk/test/std/utilities/meta/meta.unary.prop.query/void_t.pass.cpp Modified: libcxx/trunk/include/__config URL: http://llvm.org/viewvc/llvm-project/libcxx/trunk/include/__config?rev=255585&r1=255584&r2=255585&view=diff ============================================================================== --- libcxx/trunk/include/__config (original) +++ libcxx/trunk/include/__config Mon Dec 14 18:32:21 2015 @@ -472,7 +472,9 @@ namespace std { #endif // GCC 5 will support variable templates +#if !defined(__cpp_variable_templates) || __cpp_variable_templates < 201304L #define _LIBCPP_HAS_NO_VARIABLE_TEMPLATES +#endif #define _NOEXCEPT throw() #define _NOEXCEPT_(x) @@ -494,7 +496,6 @@ namespace std { #else // __GXX_EXPERIMENTAL_CXX0X__ -#define _LIBCPP_HAS_NO_TRAILING_RETURN #define _LIBCPP_HAS_NO_ALWAYS_INLINE_VARIADICS #if _GNUC_VER < 403 @@ -508,6 +509,7 @@ namespace std { #if _GNUC_VER < 404 #define _LIBCPP_HAS_NO_DECLTYPE #define _LIBCPP_HAS_NO_DELETED_FUNCTIONS +#define _LIBCPP_HAS_NO_TRAILING_RETURN #define _LIBCPP_HAS_NO_UNICODE_CHARS #define _LIBCPP_HAS_NO_VARIADICS #define _LIBCPP_HAS_NO_GENERALIZED_INITIALIZERS Modified: libcxx/trunk/include/atomic URL: http://llvm.org/viewvc/llvm-project/libcxx/trunk/include/atomic?rev=255585&r1=255584&r2=255585&view=diff ============================================================================== --- libcxx/trunk/include/atomic (original) +++ libcxx/trunk/include/atomic Mon Dec 14 18:32:21 2015 @@ -552,6 +552,12 @@ typedef enum memory_order namespace __gcc_atomic { template <typename _Tp> struct __gcc_atomic_t { + +#if _GNUC_VER >= 501 + static_assert(is_trivially_copyable<_Tp>::value, + "std::atomic<Tp> requires that 'Tp' be a trivially copyable type"); +#endif + _LIBCPP_INLINE_VISIBILITY #ifndef _LIBCPP_HAS_NO_DEFAULTED_FUNCTIONS __gcc_atomic_t() _NOEXCEPT = default; Modified: libcxx/trunk/test/std/atomics/atomics.types.generic/trivially_copyable.fail.cpp URL: http://llvm.org/viewvc/llvm-project/libcxx/trunk/test/std/atomics/atomics.types.generic/trivially_copyable.fail.cpp?rev=255585&r1=255584&r2=255585&view=diff ============================================================================== --- libcxx/trunk/test/std/atomics/atomics.types.generic/trivially_copyable.fail.cpp (original) +++ libcxx/trunk/test/std/atomics/atomics.types.generic/trivially_copyable.fail.cpp Mon Dec 14 18:32:21 2015 @@ -57,12 +57,12 @@ struct NotTriviallyCopyable { NotTriviallyCopyable ( int i ) : i_(i) {} NotTriviallyCopyable ( const NotTriviallyCopyable &rhs) : i_(rhs.i_) {} int i_; - }; +}; -template <class T> +template <class T, class > void test ( T t ) { std::atomic<T> t0(t); - } +} int main() { Modified: libcxx/trunk/test/std/utilities/meta/meta.unary.prop.query/void_t.pass.cpp URL: http://llvm.org/viewvc/llvm-project/libcxx/trunk/test/std/utilities/meta/meta.unary.prop.query/void_t.pass.cpp?rev=255585&r1=255584&r2=255585&view=diff ============================================================================== --- libcxx/trunk/test/std/utilities/meta/meta.unary.prop.query/void_t.pass.cpp (original) +++ libcxx/trunk/test/std/utilities/meta/meta.unary.prop.query/void_t.pass.cpp Mon Dec 14 18:32:21 2015 @@ -11,11 +11,11 @@ // void_t -#include <type_traits> +// UNSUPPORTED: c++98, c++03, c++11, c++14 + +// XFAIL: gcc-5.1 gcc-5.2 -#if _LIBCPP_STD_VER <= 14 -int main () {} -#else +#include <type_traits> template <class T> void test1() @@ -66,4 +66,3 @@ int main() static_assert( std::is_same<void, std::void_t<int, double const &, Class, volatile int[], void>>::value, ""); } -#endif _______________________________________________ cfe-commits mailing list cfe-commits@lists.llvm.org http://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits