From patchwork Mon Sep 19 11:53:19 2011 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Paolo Carlini X-Patchwork-Id: 115326 Return-Path: X-Original-To: incoming@patchwork.ozlabs.org Delivered-To: patchwork-incoming@bilbo.ozlabs.org Received: from sourceware.org (server1.sourceware.org [209.132.180.131]) by ozlabs.org (Postfix) with SMTP id CC209B6FA2 for ; Mon, 19 Sep 2011 21:54:40 +1000 (EST) Received: (qmail 23473 invoked by alias); 19 Sep 2011 11:54:31 -0000 Received: (qmail 23452 invoked by uid 22791); 19 Sep 2011 11:54:23 -0000 X-SWARE-Spam-Status: No, hits=-1.6 required=5.0 tests=AWL, BAYES_00, RCVD_IN_DNSWL_NONE, TW_CX X-Spam-Check-By: sourceware.org Received: from smtp207.alice.it (HELO smtp207.alice.it) (82.57.200.103) by sourceware.org (qpsmtpd/0.43rc1) with ESMTP; Mon, 19 Sep 2011 11:54:05 +0000 Received: from [192.168.1.4] (79.17.189.176) by smtp207.alice.it (8.5.124.08) id 4DFA189A08482AB4; Mon, 19 Sep 2011 13:54:03 +0200 Message-ID: <4E772D2F.2010804@oracle.com> Date: Mon, 19 Sep 2011 13:53:19 +0200 From: Paolo Carlini User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:6.0.2) Gecko/20110907 Thunderbird/6.0.2 MIME-Version: 1.0 To: "gcc-patches@gcc.gnu.org" CC: libstdc++ Subject: [v3] libstdc++/40856 X-IsSubscribed: yes Mailing-List: contact gcc-patches-help@gcc.gnu.org; run by ezmlm Precedence: bulk List-Id: List-Unsubscribe: List-Archive: List-Post: List-Help: Sender: gcc-patches-owner@gcc.gnu.org Delivered-To: mailing list gcc-patches@gcc.gnu.org Hi, tested x86_64-linux multilib, committed to mainline. Paolo. //////////////////////// 2011-09-19 Paolo Carlini PR libstdc++/40856 * include/std/limits (numeric_limits<__int128_t>, numeric_limits<__uint128_t>): Add. * src/limits.cc:Define. * config/abi/pre/gnu.ver: Export. * include/ext/typelist.h (_GLIBCXX_TYPELIST_CHAIN16, 20): Add. * testsuite/util/testsuite_common_types.h (integral_types_gnu): Add (limits_tl): Use it. * testsuite/18_support/numeric_limits/requirements/ constexpr_functions.cc: Likewise. * testsuite/18_support/numeric_limits/40856.cc: New. * testsuite/18_support/numeric_limits/dr559.cc: Extend. * testsuite/18_support/numeric_limits/lowest.cc: Likewise. * testsuite/18_support/numeric_limits/max_digits10.cc: Likewise. * testsuite/29_atomics/atomic/cons/assign_neg.cc: Adjust dg-error line numbers. * testsuite/29_atomics/atomic/cons/copy_neg.cc: Likewise. * testsuite/29_atomics/atomic_integral/cons/assign_neg.cc: Likewise. * testsuite/29_atomics/atomic_integral/cons/copy_neg.cc: Likewise. * testsuite/29_atomics/atomic_integral/operators/bitwise_neg.cc: Likewise. * testsuite/29_atomics/atomic_integral/operators/decrement_neg.cc: Likewise. * testsuite/29_atomics/atomic_integral/operators/increment_neg.cc: Likewise. Index: src/limits.cc =================================================================== --- src/limits.cc (revision 178968) +++ src/limits.cc (working copy) @@ -1,6 +1,6 @@ // Static data members of -*- C++ -*- numeric_limits classes -// Copyright (C) 1999, 2001, 2002, 2005, 2006, 2009, 2010 +// Copyright (C) 1999, 2001, 2002, 2005, 2006, 2009, 2010, 2011 // Free Software Foundation, Inc. // // This file is part of the GNU ISO C++ Library. This library is free @@ -389,6 +389,56 @@ const bool numeric_limits::tinyness_before; const float_round_style numeric_limits::round_style; +#if !defined(__STRICT_ANSI__) && defined(_GLIBCXX_USE_INT128) + const bool numeric_limits<__int128_t>::is_specialized; + const int numeric_limits<__int128_t>::digits; + const int numeric_limits<__int128_t>::digits10; + const int numeric_limits<__int128_t>::max_digits10; + const bool numeric_limits<__int128_t>::is_signed; + const bool numeric_limits<__int128_t>::is_integer; + const bool numeric_limits<__int128_t>::is_exact; + const int numeric_limits<__int128_t>::radix; + const int numeric_limits<__int128_t>::min_exponent; + const int numeric_limits<__int128_t>::min_exponent10; + const int numeric_limits<__int128_t>::max_exponent; + const int numeric_limits<__int128_t>::max_exponent10; + const bool numeric_limits<__int128_t>::has_infinity; + const bool numeric_limits<__int128_t>::has_quiet_NaN; + const bool numeric_limits<__int128_t>::has_signaling_NaN; + const float_denorm_style numeric_limits<__int128_t>::has_denorm; + const bool numeric_limits<__int128_t>::has_denorm_loss; + const bool numeric_limits<__int128_t>::is_iec559; + const bool numeric_limits<__int128_t>::is_bounded; + const bool numeric_limits<__int128_t>::is_modulo; + const bool numeric_limits<__int128_t>::traps; + const bool numeric_limits<__int128_t>::tinyness_before; + const float_round_style numeric_limits<__int128_t>::round_style; + + const bool numeric_limits<__uint128_t>::is_specialized; + const int numeric_limits<__uint128_t>::digits; + const int numeric_limits<__uint128_t>::digits10; + const int numeric_limits<__uint128_t>::max_digits10; + const bool numeric_limits<__uint128_t>::is_signed; + const bool numeric_limits<__uint128_t>::is_integer; + const bool numeric_limits<__uint128_t>::is_exact; + const int numeric_limits<__uint128_t>::radix; + const int numeric_limits<__uint128_t>::min_exponent; + const int numeric_limits<__uint128_t>::min_exponent10; + const int numeric_limits<__uint128_t>::max_exponent; + const int numeric_limits<__uint128_t>::max_exponent10; + const bool numeric_limits<__uint128_t>::has_infinity; + const bool numeric_limits<__uint128_t>::has_quiet_NaN; + const bool numeric_limits<__uint128_t>::has_signaling_NaN; + const float_denorm_style numeric_limits<__uint128_t>::has_denorm; + const bool numeric_limits<__uint128_t>::has_denorm_loss; + const bool numeric_limits<__uint128_t>::is_iec559; + const bool numeric_limits<__uint128_t>::is_bounded; + const bool numeric_limits<__uint128_t>::is_modulo; + const bool numeric_limits<__uint128_t>::traps; + const bool numeric_limits<__uint128_t>::tinyness_before; + const float_round_style numeric_limits<__uint128_t>::round_style; +#endif + // float const bool numeric_limits::is_specialized; const int numeric_limits::digits; Index: include/std/limits =================================================================== --- include/std/limits (revision 178968) +++ include/std/limits (working copy) @@ -1399,6 +1399,155 @@ = round_toward_zero; }; +#if !defined(__STRICT_ANSI__) && defined(_GLIBCXX_USE_INT128) + /// numeric_limits<__int128_t> specialization. + template<> + struct numeric_limits<__int128_t> + { + static _GLIBCXX_USE_CONSTEXPR bool is_specialized = true; + + static _GLIBCXX_CONSTEXPR __int128_t + min() _GLIBCXX_USE_NOEXCEPT { return __glibcxx_min (__int128_t); } + + static _GLIBCXX_CONSTEXPR __int128_t + max() _GLIBCXX_USE_NOEXCEPT { return __glibcxx_max (__int128_t); } + +#ifdef __GXX_EXPERIMENTAL_CXX0X__ + static constexpr __int128_t + lowest() noexcept { return min(); } +#endif + + static _GLIBCXX_USE_CONSTEXPR int digits + = __glibcxx_digits (__int128_t); + static _GLIBCXX_USE_CONSTEXPR int digits10 + = __glibcxx_digits10 (__int128_t); +#ifdef __GXX_EXPERIMENTAL_CXX0X__ + static constexpr int max_digits10 = 0; +#endif + static _GLIBCXX_USE_CONSTEXPR bool is_signed = true; + static _GLIBCXX_USE_CONSTEXPR bool is_integer = true; + static _GLIBCXX_USE_CONSTEXPR bool is_exact = true; + static _GLIBCXX_USE_CONSTEXPR int radix = 2; + + static _GLIBCXX_CONSTEXPR __int128_t + epsilon() _GLIBCXX_USE_NOEXCEPT { return 0; } + + static _GLIBCXX_CONSTEXPR __int128_t + round_error() _GLIBCXX_USE_NOEXCEPT { return 0; } + + static _GLIBCXX_USE_CONSTEXPR int min_exponent = 0; + static _GLIBCXX_USE_CONSTEXPR int min_exponent10 = 0; + static _GLIBCXX_USE_CONSTEXPR int max_exponent = 0; + static _GLIBCXX_USE_CONSTEXPR int max_exponent10 = 0; + + static _GLIBCXX_USE_CONSTEXPR bool has_infinity = false; + static _GLIBCXX_USE_CONSTEXPR bool has_quiet_NaN = false; + static _GLIBCXX_USE_CONSTEXPR bool has_signaling_NaN = false; + static _GLIBCXX_USE_CONSTEXPR float_denorm_style has_denorm + = denorm_absent; + static _GLIBCXX_USE_CONSTEXPR bool has_denorm_loss = false; + + static _GLIBCXX_CONSTEXPR __int128_t + infinity() _GLIBCXX_USE_NOEXCEPT + { return static_cast<__int128_t>(0); } + + static _GLIBCXX_CONSTEXPR __int128_t + quiet_NaN() _GLIBCXX_USE_NOEXCEPT + { return static_cast<__int128_t>(0); } + + static _GLIBCXX_CONSTEXPR __int128_t + signaling_NaN() _GLIBCXX_USE_NOEXCEPT + { return static_cast<__int128_t>(0); } + + static _GLIBCXX_CONSTEXPR __int128_t + denorm_min() _GLIBCXX_USE_NOEXCEPT + { return static_cast<__int128_t>(0); } + + static _GLIBCXX_USE_CONSTEXPR bool is_iec559 = false; + static _GLIBCXX_USE_CONSTEXPR bool is_bounded = true; + static _GLIBCXX_USE_CONSTEXPR bool is_modulo = true; + + static _GLIBCXX_USE_CONSTEXPR bool traps + = __glibcxx_integral_traps; + static _GLIBCXX_USE_CONSTEXPR bool tinyness_before = false; + static _GLIBCXX_USE_CONSTEXPR float_round_style round_style + = round_toward_zero; + }; + + /// numeric_limits<__uint128_t> specialization. + template<> + struct numeric_limits<__uint128_t> + { + static _GLIBCXX_USE_CONSTEXPR bool is_specialized = true; + + static _GLIBCXX_CONSTEXPR __uint128_t + min() _GLIBCXX_USE_NOEXCEPT { return 0; } + + static _GLIBCXX_CONSTEXPR __uint128_t + max() _GLIBCXX_USE_NOEXCEPT { return __glibcxx_max (__uint128_t); } + +#ifdef __GXX_EXPERIMENTAL_CXX0X__ + static constexpr __uint128_t + lowest() noexcept { return min(); } +#endif + + static _GLIBCXX_USE_CONSTEXPR int digits + = __glibcxx_digits (__uint128_t); + static _GLIBCXX_USE_CONSTEXPR int digits10 + = __glibcxx_digits10 (__uint128_t); +#ifdef __GXX_EXPERIMENTAL_CXX0X__ + static constexpr int max_digits10 = 0; +#endif + static _GLIBCXX_USE_CONSTEXPR bool is_signed = false; + static _GLIBCXX_USE_CONSTEXPR bool is_integer = true; + static _GLIBCXX_USE_CONSTEXPR bool is_exact = true; + static _GLIBCXX_USE_CONSTEXPR int radix = 2; + + static _GLIBCXX_CONSTEXPR __uint128_t + epsilon() _GLIBCXX_USE_NOEXCEPT { return 0; } + + static _GLIBCXX_CONSTEXPR __uint128_t + round_error() _GLIBCXX_USE_NOEXCEPT { return 0; } + + static _GLIBCXX_USE_CONSTEXPR int min_exponent = 0; + static _GLIBCXX_USE_CONSTEXPR int min_exponent10 = 0; + static _GLIBCXX_USE_CONSTEXPR int max_exponent = 0; + static _GLIBCXX_USE_CONSTEXPR int max_exponent10 = 0; + + static _GLIBCXX_USE_CONSTEXPR bool has_infinity = false; + static _GLIBCXX_USE_CONSTEXPR bool has_quiet_NaN = false; + static _GLIBCXX_USE_CONSTEXPR bool has_signaling_NaN = false; + static _GLIBCXX_USE_CONSTEXPR float_denorm_style has_denorm + = denorm_absent; + static _GLIBCXX_USE_CONSTEXPR bool has_denorm_loss = false; + + static _GLIBCXX_CONSTEXPR __uint128_t + infinity() _GLIBCXX_USE_NOEXCEPT + { return static_cast<__uint128_t>(0); } + + static _GLIBCXX_CONSTEXPR __uint128_t + quiet_NaN() _GLIBCXX_USE_NOEXCEPT + { return static_cast<__uint128_t>(0); } + + static _GLIBCXX_CONSTEXPR __uint128_t + signaling_NaN() _GLIBCXX_USE_NOEXCEPT + { return static_cast<__uint128_t>(0); } + + static _GLIBCXX_CONSTEXPR __uint128_t + denorm_min() _GLIBCXX_USE_NOEXCEPT + { return static_cast<__uint128_t>(0); } + + static _GLIBCXX_USE_CONSTEXPR bool is_iec559 = false; + static _GLIBCXX_USE_CONSTEXPR bool is_bounded = true; + static _GLIBCXX_USE_CONSTEXPR bool is_modulo = true; + + static _GLIBCXX_USE_CONSTEXPR bool traps = __glibcxx_integral_traps; + static _GLIBCXX_USE_CONSTEXPR bool tinyness_before = false; + static _GLIBCXX_USE_CONSTEXPR float_round_style round_style + = round_toward_zero; + }; +#endif + /// numeric_limits specialization. template<> struct numeric_limits Index: include/ext/typelist.h =================================================================== --- include/ext/typelist.h (revision 178968) +++ include/ext/typelist.h (working copy) @@ -1,6 +1,7 @@ // -*- C++ -*- -// Copyright (C) 2005, 2006, 2008, 2009, 2010 Free Software Foundation, Inc. +// Copyright (C) 2005, 2006, 2008, 2009, 2010, 2011 +// 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 @@ -386,6 +387,11 @@ #define _GLIBCXX_TYPELIST_CHAIN13(X0, X1, X2, X3, X4, X5, X6, X7, X8, X9, X10, X11, X12) __gnu_cxx::typelist::chain #define _GLIBCXX_TYPELIST_CHAIN14(X0, X1, X2, X3, X4, X5, X6, X7, X8, X9, X10, X11, X12, X13) __gnu_cxx::typelist::chain #define _GLIBCXX_TYPELIST_CHAIN15(X0, X1, X2, X3, X4, X5, X6, X7, X8, X9, X10, X11, X12, X13, X14) __gnu_cxx::typelist::chain +#define _GLIBCXX_TYPELIST_CHAIN16(X0, X1, X2, X3, X4, X5, X6, X7, X8, X9, X10, X11, X12, X13, X14, X15) __gnu_cxx::typelist::chain +#define _GLIBCXX_TYPELIST_CHAIN17(X0, X1, X2, X3, X4, X5, X6, X7, X8, X9, X10, X11, X12, X13, X14, X15, X16) __gnu_cxx::typelist::chain +#define _GLIBCXX_TYPELIST_CHAIN18(X0, X1, X2, X3, X4, X5, X6, X7, X8, X9, X10, X11, X12, X13, X14, X15, X16, X17) __gnu_cxx::typelist::chain +#define _GLIBCXX_TYPELIST_CHAIN19(X0, X1, X2, X3, X4, X5, X6, X7, X8, X9, X10, X11, X12, X13, X14, X15, X16, X17, X18) __gnu_cxx::typelist::chain +#define _GLIBCXX_TYPELIST_CHAIN20(X0, X1, X2, X3, X4, X5, X6, X7, X8, X9, X10, X11, X12, X13, X14, X15, X16, X17, X18, X19) __gnu_cxx::typelist::chain namespace __gnu_cxx _GLIBCXX_VISIBILITY(default) { Index: testsuite/18_support/numeric_limits/requirements/constexpr_functions.cc =================================================================== --- testsuite/18_support/numeric_limits/requirements/constexpr_functions.cc (revision 178968) +++ testsuite/18_support/numeric_limits/requirements/constexpr_functions.cc (working copy) @@ -1,7 +1,7 @@ // { dg-do compile } // { dg-options "-std=gnu++0x" } -// Copyright (C) 2010 Free Software Foundation, Inc. +// Copyright (C) 2010, 2011 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 @@ -65,6 +65,6 @@ __gnu_test::constexpr_member_functions test; __gnu_cxx::typelist::apply_generator(test, __gnu_test::limits_tl(), - __gnu_test::integral_types::type()); + __gnu_test::integral_types_gnu::type()); return 0; } Index: testsuite/18_support/numeric_limits/dr559.cc =================================================================== --- testsuite/18_support/numeric_limits/dr559.cc (revision 178968) +++ testsuite/18_support/numeric_limits/dr559.cc (working copy) @@ -2,7 +2,7 @@ // 2010-02-17 Paolo Carlini // -// Copyright (C) 2010 Free Software Foundation +// Copyright (C) 2010, 2011 Free Software Foundation // // 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 @@ -95,6 +95,11 @@ do_test(); do_test(); do_test(); + // GNU Extensions. +#ifdef _GLIBCXX_USE_INT128 + do_test<__int128_t>(); + do_test<__uint128_t>(); +#endif do_test(); do_test(); do_test(); Index: testsuite/18_support/numeric_limits/lowest.cc =================================================================== --- testsuite/18_support/numeric_limits/lowest.cc (revision 178968) +++ testsuite/18_support/numeric_limits/lowest.cc (working copy) @@ -72,6 +72,12 @@ do_test(); do_test(); + // GNU Extensions. +#ifdef _GLIBCXX_USE_INT128 + do_test<__int128_t>(); + do_test<__uint128_t>(); +#endif + do_test(); do_test(); do_test(); Index: testsuite/18_support/numeric_limits/40856.cc =================================================================== --- testsuite/18_support/numeric_limits/40856.cc (revision 0) +++ testsuite/18_support/numeric_limits/40856.cc (revision 0) @@ -0,0 +1,27 @@ +// { dg-options "-std=gnu++0x" } +// { dg-do compile } + +// Copyright (C) 2011 Free Software Foundation +// +// 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 +// . + +#include + +// libstdc++/40856 +#ifdef _GLIBCXX_USE_INT128 +static_assert(std::numeric_limits<__int128_t>::is_specialized == true, ""); +static_assert(std::numeric_limits<__uint128_t>::is_specialized == true, ""); +#endif Index: testsuite/18_support/numeric_limits/max_digits10.cc =================================================================== --- testsuite/18_support/numeric_limits/max_digits10.cc (revision 178968) +++ testsuite/18_support/numeric_limits/max_digits10.cc (working copy) @@ -3,7 +3,7 @@ // 2010-02-25 Ed Smith-Rowland -// Copyright (C) 2010 Free Software Foundation +// Copyright (C) 2010, 2011 Free Software Foundation // // 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 @@ -47,6 +47,12 @@ VERIFY( std::numeric_limits::max_digits10 == 0 ); VERIFY( std::numeric_limits::max_digits10 == 0 ); + // GNU Extensions. +#ifdef _GLIBCXX_USE_INT128 + VERIFY( std::numeric_limits<__int128_t>::max_digits10 == 0 ); + VERIFY( std::numeric_limits<__uint128_t>::max_digits10 == 0 ); +#endif + const int f_max_digits10 = (2 + std::numeric_limits::digits * 643 / 2136); VERIFY( std::numeric_limits::max_digits10 == f_max_digits10 ); Index: testsuite/29_atomics/atomic_integral/cons/assign_neg.cc =================================================================== --- testsuite/29_atomics/atomic_integral/cons/assign_neg.cc (revision 178968) +++ testsuite/29_atomics/atomic_integral/cons/assign_neg.cc (working copy) @@ -29,5 +29,5 @@ return 0; } -// { dg-error "deleted" "" { target *-*-* } 572 } +// { dg-error "deleted" "" { target *-*-* } 616 } // { dg-prune-output "include" } Index: testsuite/29_atomics/atomic_integral/cons/copy_neg.cc =================================================================== --- testsuite/29_atomics/atomic_integral/cons/copy_neg.cc (revision 178968) +++ testsuite/29_atomics/atomic_integral/cons/copy_neg.cc (working copy) @@ -29,5 +29,5 @@ return 0; } -// { dg-error "deleted" "" { target *-*-* } 611 } +// { dg-error "deleted" "" { target *-*-* } 655 } // { dg-prune-output "include" } Index: testsuite/29_atomics/atomic_integral/operators/increment_neg.cc =================================================================== --- testsuite/29_atomics/atomic_integral/operators/increment_neg.cc (revision 178968) +++ testsuite/29_atomics/atomic_integral/operators/increment_neg.cc (working copy) @@ -28,6 +28,6 @@ return 0; } -// { dg-error "operator" "" { target *-*-* } 363 } -// { dg-error "operator" "" { target *-*-* } 364 } -// { dg-error "operator" "" { target *-*-* } 365 } +// { dg-error "operator" "" { target *-*-* } 407 } +// { dg-error "operator" "" { target *-*-* } 408 } +// { dg-error "operator" "" { target *-*-* } 409 } Index: testsuite/29_atomics/atomic_integral/operators/bitwise_neg.cc =================================================================== --- testsuite/29_atomics/atomic_integral/operators/bitwise_neg.cc (revision 178968) +++ testsuite/29_atomics/atomic_integral/operators/bitwise_neg.cc (working copy) @@ -27,10 +27,10 @@ return 0; } -// { dg-error "deleted" "" { target *-*-* } 426 } -// { dg-error "deleted" "" { target *-*-* } 427 } -// { dg-error "operator" "" { target *-*-* } 428 } -// { dg-error "operator" "" { target *-*-* } 429 } -// { dg-error "operator" "" { target *-*-* } 430 } +// { dg-error "deleted" "" { target *-*-* } 470 } +// { dg-error "deleted" "" { target *-*-* } 471 } +// { dg-error "operator" "" { target *-*-* } 472 } +// { dg-error "operator" "" { target *-*-* } 473 } +// { dg-error "operator" "" { target *-*-* } 474 } // { dg-prune-output "declared here" } Index: testsuite/29_atomics/atomic_integral/operators/decrement_neg.cc =================================================================== --- testsuite/29_atomics/atomic_integral/operators/decrement_neg.cc (revision 178968) +++ testsuite/29_atomics/atomic_integral/operators/decrement_neg.cc (working copy) @@ -28,6 +28,6 @@ return 0; } -// { dg-error "operator" "" { target *-*-* } 385 } -// { dg-error "operator" "" { target *-*-* } 386 } -// { dg-error "operator" "" { target *-*-* } 387 } +// { dg-error "operator" "" { target *-*-* } 429 } +// { dg-error "operator" "" { target *-*-* } 430 } +// { dg-error "operator" "" { target *-*-* } 431 } Index: testsuite/29_atomics/atomic/cons/assign_neg.cc =================================================================== --- testsuite/29_atomics/atomic/cons/assign_neg.cc (revision 178968) +++ testsuite/29_atomics/atomic/cons/assign_neg.cc (working copy) @@ -28,5 +28,5 @@ return 0; } -// { dg-error "deleted" "" { target *-*-* } 572 } +// { dg-error "deleted" "" { target *-*-* } 616 } // { dg-prune-output "include" } Index: testsuite/29_atomics/atomic/cons/copy_neg.cc =================================================================== --- testsuite/29_atomics/atomic/cons/copy_neg.cc (revision 178968) +++ testsuite/29_atomics/atomic/cons/copy_neg.cc (working copy) @@ -28,5 +28,5 @@ return 0; } -// { dg-error "deleted" "" { target *-*-* } 611 } +// { dg-error "deleted" "" { target *-*-* } 655 } // { dg-prune-output "include" } Index: testsuite/util/testsuite_common_types.h =================================================================== --- testsuite/util/testsuite_common_types.h (revision 178968) +++ testsuite/util/testsuite_common_types.h (working copy) @@ -257,7 +257,7 @@ typedef typename append::type type; }; - // A typelist of all integral types. + // A typelist of all standard integral types. struct integral_types { typedef bool a1; @@ -285,7 +285,51 @@ #endif }; + // A typelist of all standard integral types + the GNU 128-bit types. + struct integral_types_gnu + { + typedef bool a1; + typedef char a2; + typedef signed char a3; + typedef unsigned char a4; + typedef short a5; + typedef unsigned short a6; + typedef int a7; + typedef unsigned int a8; + typedef long a9; + typedef unsigned long a10; + typedef long long a11; + typedef unsigned long long a12; + typedef wchar_t a13; #ifdef __GXX_EXPERIMENTAL_CXX0X__ + typedef char16_t a14; + typedef char32_t a15; +# if !defined(__STRICT_ANSI__) && defined(_GLIBCXX_USE_INT128) + typedef __int128_t a16; + typedef __uint128_t a17; + + typedef node<_GLIBCXX_TYPELIST_CHAIN17(a1, a2, a3, a4, a5, a6, a7, a8, a9, + a10, a11, a12, a13, a14, a15, + a16, a17)> type; +# else + typedef node<_GLIBCXX_TYPELIST_CHAIN15(a1, a2, a3, a4, a5, a6, a7, a8, a9, + a10, a11, a12, a13, a14, a15)> type; +# endif +#else +# if !defined(__STRICT_ANSI__) && defined(_GLIBCXX_USE_INT128) + typedef __int128_t a14; + typedef __uint128_t a15; + + typedef node<_GLIBCXX_TYPELIST_CHAIN15(a1, a2, a3, a4, a5, a6, a7, a8, a9, + a10, a11, a12, a13, a14, a15)> type; +# else + typedef node<_GLIBCXX_TYPELIST_CHAIN13(a1, a2, a3, a4, a5, a6, a7, a8, a9, + a10, a11, a12, a13)> type; +# endif +#endif + }; + +#ifdef __GXX_EXPERIMENTAL_CXX0X__ struct atomic_integrals_no_bool { typedef std::atomic_char a2; @@ -347,7 +391,7 @@ typedef std::numeric_limits type; }; - typedef transform::type limits_tl; + typedef transform::type limits_tl; struct has_increment_operators { Index: config/abi/pre/gnu.ver =================================================================== --- config/abi/pre/gnu.ver (revision 178968) +++ config/abi/pre/gnu.ver (working copy) @@ -500,10 +500,14 @@ _ZNSt21__numeric_limits_base1[0-7]mi*; _ZNSt21__numeric_limits_base1[0-7]max_e*; - _ZNSt14numeric_limitsI[^g]E[5-9]*; - _ZNSt14numeric_limitsI[^g]E1[0-7][hirt]*; - _ZNSt14numeric_limitsI[^g]E1[0-7]mi*; - _ZNSt14numeric_limitsI[^g]E1[0-7]max_e*; + _ZNSt14numeric_limitsI[a-m]E[5-9]*; + _ZNSt14numeric_limitsI[p-z]E[5-9]*; + _ZNSt14numeric_limitsI[a-m]E1[0-7][hirt]*; + _ZNSt14numeric_limitsI[p-z]E1[0-7][hirt]*; + _ZNSt14numeric_limitsI[a-m]E1[0-7]mi*; + _ZNSt14numeric_limitsI[p-z]E1[0-7]mi*; + _ZNSt14numeric_limitsI[a-m]E1[0-7]max_e*; + _ZNSt14numeric_limitsI[p-z]E1[0-7]max_e*; # std::_Rb_tree _ZSt18_Rb_tree_decrementPKSt18_Rb_tree_node_base; @@ -1185,7 +1189,8 @@ # std::numeric_limits::max_digits10 _ZNSt21__numeric_limits_base12max_digits10E; - _ZNSt14numeric_limitsI[^g]E12max_digits10E; + _ZNSt14numeric_limitsI[a-m]E12max_digits10E; + _ZNSt14numeric_limitsI[p-z]E12max_digits10E; _ZNSt14numeric_limitsID[is]E12max_digits10E; } GLIBCXX_3.4.13; @@ -1292,6 +1297,11 @@ # std::chrono::steady_clock::now() _ZNSt6chrono12steady_clock3nowEv; + + # std::numeric_limits<__int128_t> and <__uint128_t> + _ZNSt14numeric_limitsInE*; + _ZNSt14numeric_limitsIoE*; + } GLIBCXX_3.4.16; # Symbols in the support library (libsupc++) have their own tag.