Some small cleanups. These won't interfere with any testing of
backports to gcc-6-branch before the release, so I'm committing them
now.
The first two remove some noise when using -Wsystem-headers:
Avoid -Wsign-compare warnings in std::to_string()
* include/ext/string_conversions.h (__stoa): Avoid -Wsign-compare
warnings.
Add attribute((unused)) in libstdc++ headers
* include/bits/locale_facets.h (ctype::do_narrow): Add attribute to
unused parameter.
* include/bits/regex_automaton.h (_NFA::_M_insert_alt): Likewise.
The other two remove some noise when running the testsuite with
-Wpedantic, and tidy up some tests.
Tested x86_64-linux, committed to trunk.
commit ea1ef677b26ad2cb1f811f11b089778782e7da5e
Author: Jonathan Wakely <jwak...@redhat.com>
Date: Sat Apr 16 16:58:47 2016 +0100
Make use of extensions more explicit in libstdc++ tests
* testsuite/18_support/bad_exception/23591_thread-1.c: Add
-Wno-pedantic to dg-options.
* testsuite/20_util/align/2.cc: Use type as operand of alignof.
* testsuite/20_util/is_floating_point/value.cc: Add -Wno-pedantic
to dg-options.
* testsuite/20_util/specialized_algorithms/uninitialized_fill/32158.cc:
Remove extra semi-colon.
* testsuite/23_containers/array/tuple_interface/tuple_element.cc:
Always supply second argument to static_assert.
* testsuite/25_algorithms/lower_bound/no_operator_ne.cc: Remove extra
semi-colon.
* testsuite/26_numerics/complex/c99.cc: Add -Wno-pedantic to
dg-options.
* testsuite/26_numerics/complex/literals/values.cc: Likewise.
* testsuite/29_atomics/atomic/60695.cc: Likewise.
* testsuite/29_atomics/atomic/62259.cc: use __alignof__ instead of
alignof when operand is an object not a type.
* testsuite/decimal/ctor.cc: Add -Wno-pedantic to dg-options.
* testsuite/decimal/make-decimal.cc: Likewise.
* testsuite/experimental/type_traits/value.cc: Always supply second
argument to static_assert.
* testsuite/util/testsuite_common_types.h: Use __extension__ for
__int128 types.
diff --git a/libstdc++-v3/testsuite/18_support/bad_exception/23591_thread-1.c b/libstdc++-v3/testsuite/18_support/bad_exception/23591_thread-1.c
index a0fe0d7..fd1a76c 100644
--- a/libstdc++-v3/testsuite/18_support/bad_exception/23591_thread-1.c
+++ b/libstdc++-v3/testsuite/18_support/bad_exception/23591_thread-1.c
@@ -1,5 +1,5 @@
// { dg-require-sharedlib "" }
-// { dg-options "-g -O2 -pthread -ldl -x c -fvtable-verify=none" { target *-*-linux* *-*-gnu* *-*-solaris2.1[2-9]* } }
+// { dg-options "-g -O2 -pthread -ldl -x c -fvtable-verify=none -Wno-pedantic" { target *-*-linux* *-*-gnu* *-*-solaris2.1[2-9]* } }
// Copyright (C) 2005-2016 Free Software Foundation, Inc.
//
diff --git a/libstdc++-v3/testsuite/20_util/align/2.cc b/libstdc++-v3/testsuite/20_util/align/2.cc
index 243debb..e2d1907 100644
--- a/libstdc++-v3/testsuite/20_util/align/2.cc
+++ b/libstdc++-v3/testsuite/20_util/align/2.cc
@@ -32,7 +32,7 @@ test01()
int i = 0;
void* ptr = &i;
auto space = sizeof(i);
- auto p2 = std::align(alignof(i), space, ptr, space);
+ auto p2 = std::align(alignof(int), space, ptr, space);
VERIFY( ptr == &i );
VERIFY( p2 == &i );
VERIFY(space == sizeof(i));
diff --git a/libstdc++-v3/testsuite/20_util/is_floating_point/value.cc b/libstdc++-v3/testsuite/20_util/is_floating_point/value.cc
index d476383..8ed73fc 100644
--- a/libstdc++-v3/testsuite/20_util/is_floating_point/value.cc
+++ b/libstdc++-v3/testsuite/20_util/is_floating_point/value.cc
@@ -1,4 +1,4 @@
-// { dg-options "-std=gnu++11" }
+// { dg-options "-std=gnu++11 -Wno-pedantic" }
// { dg-do compile }
//
// Copyright (C) 2011-2016 Free Software Foundation, Inc.
diff --git a/libstdc++-v3/testsuite/20_util/specialized_algorithms/uninitialized_fill/32158.cc b/libstdc++-v3/testsuite/20_util/specialized_algorithms/uninitialized_fill/32158.cc
index 821d012..fc05426 100644
--- a/libstdc++-v3/testsuite/20_util/specialized_algorithms/uninitialized_fill/32158.cc
+++ b/libstdc++-v3/testsuite/20_util/specialized_algorithms/uninitialized_fill/32158.cc
@@ -31,4 +31,4 @@ Alpha(MyPair* start, MyPair* end)
{
MyPair my_pair(1, 2);
std::uninitialized_fill(start, end, my_pair);
-};
+}
diff --git a/libstdc++-v3/testsuite/23_containers/array/tuple_interface/tuple_element.cc b/libstdc++-v3/testsuite/23_containers/array/tuple_interface/tuple_element.cc
index 6abe049..96e0bfb 100644
--- a/libstdc++-v3/testsuite/23_containers/array/tuple_interface/tuple_element.cc
+++ b/libstdc++-v3/testsuite/23_containers/array/tuple_interface/tuple_element.cc
@@ -47,7 +47,7 @@ test01()
static_assert(is_same<tuple_element<1, volatile array_type>::type,
volatile int>::value, "");
static_assert( (is_same<tuple_element<2, volatile array_type>::type,
- volatile int>::value == true) );
+ volatile int>::value == true), "" );
static_assert(is_same<tuple_element<0, const volatile array_type>::type,
const volatile int>::value, "");
diff --git a/libstdc++-v3/testsuite/25_algorithms/lower_bound/no_operator_ne.cc b/libstdc++-v3/testsuite/25_algorithms/lower_bound/no_operator_ne.cc
index d787ff0..219e093 100644
--- a/libstdc++-v3/testsuite/25_algorithms/lower_bound/no_operator_ne.cc
+++ b/libstdc++-v3/testsuite/25_algorithms/lower_bound/no_operator_ne.cc
@@ -22,8 +22,8 @@
// http://gcc.gnu.org/ml/libstdc++/2000-06/msg00316.html
struct foo { };
-bool operator== (const foo&, const foo&) { return true; };
-bool operator< (const foo&, const foo&) { return true; };
+bool operator== (const foo&, const foo&) { return true; }
+bool operator< (const foo&, const foo&) { return true; }
void bar(foo* a, foo* b, foo& x)
{
diff --git a/libstdc++-v3/testsuite/26_numerics/complex/c99.cc b/libstdc++-v3/testsuite/26_numerics/complex/c99.cc
index 4dfaad6..c550520 100644
--- a/libstdc++-v3/testsuite/26_numerics/complex/c99.cc
+++ b/libstdc++-v3/testsuite/26_numerics/complex/c99.cc
@@ -1,5 +1,5 @@
// { dg-do compile }
-// { dg-options "-std=gnu++11" }
+// { dg-options "-std=gnu++11 -Wno-pedantic" }
// Copyright (C) 2012-2016 Free Software Foundation, Inc.
//
diff --git a/libstdc++-v3/testsuite/26_numerics/complex/literals/values.cc b/libstdc++-v3/testsuite/26_numerics/complex/literals/values.cc
index b50aad9..1353112 100644
--- a/libstdc++-v3/testsuite/26_numerics/complex/literals/values.cc
+++ b/libstdc++-v3/testsuite/26_numerics/complex/literals/values.cc
@@ -1,4 +1,4 @@
-// { dg-options "-std=gnu++14" }
+// { dg-options "-std=gnu++14 -Wno-pedantic" }
// { dg-do run }
// Copyright (C) 2013-2016 Free Software Foundation, Inc.
diff --git a/libstdc++-v3/testsuite/29_atomics/atomic/60695.cc b/libstdc++-v3/testsuite/29_atomics/atomic/60695.cc
index e9b8b20..ddd1b2c 100644
--- a/libstdc++-v3/testsuite/29_atomics/atomic/60695.cc
+++ b/libstdc++-v3/testsuite/29_atomics/atomic/60695.cc
@@ -1,5 +1,5 @@
// { dg-require-atomic-builtins "" }
-// { dg-options "-std=gnu++11" }
+// { dg-options "-std=gnu++11 -Wno-pedantic" }
// { dg-do compile }
// Copyright (C) 2014-2016 Free Software Foundation, Inc.
diff --git a/libstdc++-v3/testsuite/29_atomics/atomic/62259.cc b/libstdc++-v3/testsuite/29_atomics/atomic/62259.cc
index 5429ca9..458194a 100644
--- a/libstdc++-v3/testsuite/29_atomics/atomic/62259.cc
+++ b/libstdc++-v3/testsuite/29_atomics/atomic/62259.cc
@@ -44,7 +44,7 @@ struct power_of_two_obj {
std::atomic<power_of_two_obj> obj1;
-static_assert( alignof(obj1) >= alignof(int64_t),
+static_assert( __alignof__(obj1) >= alignof(int64_t),
"std::atomic not suitably aligned" );
struct container_struct {
@@ -54,5 +54,5 @@ struct container_struct {
container_struct obj2;
-static_assert( alignof(obj2.ao) >= alignof(int64_t),
+static_assert( __alignof__(obj2.ao) >= alignof(int64_t),
"std::atomic not suitably aligned" );
diff --git a/libstdc++-v3/testsuite/decimal/ctor.cc b/libstdc++-v3/testsuite/decimal/ctor.cc
index f322e7f..b289ed0 100644
--- a/libstdc++-v3/testsuite/decimal/ctor.cc
+++ b/libstdc++-v3/testsuite/decimal/ctor.cc
@@ -16,6 +16,7 @@
// <http://www.gnu.org/licenses/>.
// { dg-require-effective-target dfp }
+// { dg-options "-Wno-pedantic" }
// ISO/IEC TR 24733 3.2.2.1 Construct/copy/destroy (decimal32).
// ISO/IEC TR 24733 3.2.3.1 Construct/copy/destroy (decimal64).
diff --git a/libstdc++-v3/testsuite/decimal/make-decimal.cc b/libstdc++-v3/testsuite/decimal/make-decimal.cc
index 42a608a..b5aafa2 100644
--- a/libstdc++-v3/testsuite/decimal/make-decimal.cc
+++ b/libstdc++-v3/testsuite/decimal/make-decimal.cc
@@ -16,6 +16,7 @@
// <http://www.gnu.org/licenses/>.
// { dg-require-effective-target dfp }
+// { dg-options "-Wno-pedantic" }
// ISO/IEC TR 24733 3.2.5 Initialization from coefficient and exponent.
diff --git a/libstdc++-v3/testsuite/experimental/type_traits/value.cc b/libstdc++-v3/testsuite/experimental/type_traits/value.cc
index 5bbdab4..16b63cb 100644
--- a/libstdc++-v3/testsuite/experimental/type_traits/value.cc
+++ b/libstdc++-v3/testsuite/experimental/type_traits/value.cc
@@ -323,23 +323,23 @@ static_assert(is_convertible_v<int&, const int&>
static_assert(!is_convertible_v<const int&, int&>
&& !is_convertible<const int&, int&>::value, "");
-static_assert(negation_v<false_type>);
-static_assert(!negation_v<true_type>);
-static_assert(conjunction_v<>);
-static_assert(!disjunction_v<>);
-static_assert(conjunction_v<true_type>);
-static_assert(!conjunction_v<false_type>);
-static_assert(disjunction_v<true_type>);
-static_assert(!disjunction_v<false_type>);
-static_assert(conjunction_v<true_type, true_type>);
-static_assert(!conjunction_v<true_type, false_type>);
-static_assert(disjunction_v<false_type, true_type>);
-static_assert(!disjunction_v<false_type, false_type>);
+static_assert(negation_v<false_type>, "");
+static_assert(!negation_v<true_type>, "");
+static_assert(conjunction_v<>, "");
+static_assert(!disjunction_v<>, "");
+static_assert(conjunction_v<true_type>, "");
+static_assert(!conjunction_v<false_type>, "");
+static_assert(disjunction_v<true_type>, "");
+static_assert(!disjunction_v<false_type>, "");
+static_assert(conjunction_v<true_type, true_type>, "");
+static_assert(!conjunction_v<true_type, false_type>, "");
+static_assert(disjunction_v<false_type, true_type>, "");
+static_assert(!disjunction_v<false_type, false_type>, "");
static_assert(conjunction_v<true_type, true_type,
- true_type>);
+ true_type>, "");
static_assert(!conjunction_v<true_type, true_type,
- false_type>);
+ false_type>, "");
static_assert(disjunction_v<false_type, false_type,
- true_type>);
+ true_type>, "");
static_assert(!disjunction_v<false_type, false_type,
- false_type>);
+ false_type>, "");
diff --git a/libstdc++-v3/testsuite/util/testsuite_common_types.h b/libstdc++-v3/testsuite/util/testsuite_common_types.h
index bf1035e..d6a766d 100644
--- a/libstdc++-v3/testsuite/util/testsuite_common_types.h
+++ b/libstdc++-v3/testsuite/util/testsuite_common_types.h
@@ -304,8 +304,8 @@ namespace __gnu_test
typedef char16_t a14;
typedef char32_t a15;
# if !defined(__STRICT_ANSI__) && defined(_GLIBCXX_USE_INT128)
- typedef __int128 a16;
- typedef unsigned __int128 a17;
+ __extension__ typedef __int128 a16;
+ __extension__ typedef unsigned __int128 a17;
typedef node<_GLIBCXX_TYPELIST_CHAIN17(a1, a2, a3, a4, a5, a6, a7, a8, a9,
a10, a11, a12, a13, a14, a15,
@@ -316,8 +316,8 @@ namespace __gnu_test
# endif
#else
# if !defined(__STRICT_ANSI__) && defined(_GLIBCXX_USE_INT128)
- typedef __int128 a14;
- typedef unsigned __int128 a15;
+ __extension__ typedef __int128 a14;
+ __extension__ typedef unsigned __int128 a15;
typedef node<_GLIBCXX_TYPELIST_CHAIN15(a1, a2, a3, a4, a5, a6, a7, a8, a9,
a10, a11, a12, a13, a14, a15)> type;
commit 23c9709fc8bdc2fcc1c29bbf5df927b2da1e608a
Author: Jonathan Wakely <jwak...@redhat.com>
Date: Sat Apr 16 16:59:23 2016 +0100
Don't include internal header in libstdc++ tests
* testsuite/experimental/type_erased_allocator/1.cc: Don't include
internal header.
* testsuite/experimental/type_erased_allocator/1_neg.cc: Likewise.
* testsuite/experimental/type_erased_allocator/2.cc: Likewise.
* testsuite/experimental/type_erased_allocator/uses_allocator.cc:
Likewise. Add licence and change to compile-only test.
diff --git a/libstdc++-v3/testsuite/experimental/type_erased_allocator/1.cc b/libstdc++-v3/testsuite/experimental/type_erased_allocator/1.cc
index c000e696..924d728 100644
--- a/libstdc++-v3/testsuite/experimental/type_erased_allocator/1.cc
+++ b/libstdc++-v3/testsuite/experimental/type_erased_allocator/1.cc
@@ -20,7 +20,6 @@
#include <memory>
#include <experimental/memory_resource>
#include <vector>
-#include <bits/uses_allocator.h>
#include <testsuite_hooks.h>
#include <testsuite_allocator.h>
diff --git a/libstdc++-v3/testsuite/experimental/type_erased_allocator/1_neg.cc b/libstdc++-v3/testsuite/experimental/type_erased_allocator/1_neg.cc
index 55c446e..ce45dbf 100644
--- a/libstdc++-v3/testsuite/experimental/type_erased_allocator/1_neg.cc
+++ b/libstdc++-v3/testsuite/experimental/type_erased_allocator/1_neg.cc
@@ -19,7 +19,6 @@
// <http://www.gnu.org/licenses/>.
#include <experimental/memory_resource>
-#include <bits/uses_allocator.h>
#include <testsuite_hooks.h>
#include <testsuite_allocator.h>
diff --git a/libstdc++-v3/testsuite/experimental/type_erased_allocator/2.cc b/libstdc++-v3/testsuite/experimental/type_erased_allocator/2.cc
index fb927dc..8f7d0b5 100644
--- a/libstdc++-v3/testsuite/experimental/type_erased_allocator/2.cc
+++ b/libstdc++-v3/testsuite/experimental/type_erased_allocator/2.cc
@@ -20,7 +20,6 @@
#include <memory>
#include <experimental/memory_resource>
#include <experimental/utility>
-#include <bits/uses_allocator.h>
#include <testsuite_hooks.h>
#include <testsuite_allocator.h>
diff --git a/libstdc++-v3/testsuite/experimental/type_erased_allocator/uses_allocator.cc b/libstdc++-v3/testsuite/experimental/type_erased_allocator/uses_allocator.cc
index fc8acf1..1d4ba1e 100644
--- a/libstdc++-v3/testsuite/experimental/type_erased_allocator/uses_allocator.cc
+++ b/libstdc++-v3/testsuite/experimental/type_erased_allocator/uses_allocator.cc
@@ -1,7 +1,26 @@
-#include <bits/uses_allocator.h>
+// Copyright (C) 2015-2016 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
+// <http://www.gnu.org/licenses/>.
+
+// { dg-options "-std=gnu++14" }
+// { dg-do compile }
+
#include <vector>
-#include <experimental/utility>
#include <memory>
+#include <experimental/utility>
using std::vector;
using std::allocator;
@@ -11,12 +30,5 @@ struct A {
using allocator_type = std::experimental::erased_type;
};
-void test01() {
- static_assert(uses_allocator<vector<int>, allocator<int>>());
- static_assert(uses_allocator<A, allocator<A>>());
-}
-
-int main() {
- test01();
- return 0;
-}
+static_assert(uses_allocator<vector<int>, allocator<int>>(), "");
+static_assert(uses_allocator<A, allocator<A>>(), "");
commit b678ae09bd9e1592c23b0439fa5b0bd7a32afb4d
Author: Jonathan Wakely <jwak...@redhat.com>
Date: Mon Apr 18 15:10:42 2016 +0100
Add attribute((unused)) in libstdc++ headers
* include/bits/locale_facets.h (ctype::do_narrow): Add attribute to
unused parameter.
* include/bits/regex_automaton.h (_NFA::_M_insert_alt): Likewise.
diff --git a/libstdc++-v3/include/bits/locale_facets.h b/libstdc++-v3/include/bits/locale_facets.h
index e3e206b..eda07b6 100644
--- a/libstdc++-v3/include/bits/locale_facets.h
+++ b/libstdc++-v3/include/bits/locale_facets.h
@@ -1128,7 +1128,7 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
* @return The converted char.
*/
virtual char
- do_narrow(char_type __c, char __dfault) const
+ do_narrow(char_type __c, char __dfault __attribute__((__unused__))) const
{ return __c; }
/**
@@ -1155,7 +1155,7 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
*/
virtual const char_type*
do_narrow(const char_type* __lo, const char_type* __hi,
- char __dfault, char* __to) const
+ char __dfault __attribute__((__unused__)), char* __to) const
{
__builtin_memcpy(__to, __lo, __hi - __lo);
return __hi;
diff --git a/libstdc++-v3/include/bits/regex_automaton.h b/libstdc++-v3/include/bits/regex_automaton.h
index 07158c4..c29fbd9 100644
--- a/libstdc++-v3/include/bits/regex_automaton.h
+++ b/libstdc++-v3/include/bits/regex_automaton.h
@@ -241,7 +241,8 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
}
_StateIdT
- _M_insert_alt(_StateIdT __next, _StateIdT __alt, bool __neg)
+ _M_insert_alt(_StateIdT __next, _StateIdT __alt,
+ bool __neg __attribute__((__unused__)))
{
_StateT __tmp(_S_opcode_alternative);
// It labels every quantifier to make greedy comparison easier in BFS
commit 7f25e8313217c20946601319b39b0a2e52fe5a4d
Author: Jonathan Wakely <jwak...@redhat.com>
Date: Sat Apr 16 14:49:54 2016 +0100
Avoid -Wsign-compare warnings in std::to_string()
* include/ext/string_conversions.h (__stoa): Avoid -Wsign-compare
warnings.
diff --git a/libstdc++-v3/include/ext/string_conversions.h b/libstdc++-v3/include/ext/string_conversions.h
index 8a8fec1..0a0036d 100644
--- a/libstdc++-v3/include/ext/string_conversions.h
+++ b/libstdc++-v3/include/ext/string_conversions.h
@@ -65,14 +65,24 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
int _M_errno;
} const __save_errno;
+ struct _Range_chk {
+ static bool
+ _S_chk(_TRet, std::false_type) { return false; }
+
+ static bool
+ _S_chk(_TRet __val, std::true_type) // only called when _Ret is int
+ {
+ return __val < _TRet(__numeric_traits<int>::__min)
+ || __val > _TRet(__numeric_traits<int>::__max);
+ }
+ };
+
const _TRet __tmp = __convf(__str, &__endptr, __base...);
if (__endptr == __str)
std::__throw_invalid_argument(__name);
else if (errno == ERANGE
- || (std::__are_same<_Ret, int>::__value
- && (__tmp < __numeric_traits<int>::__min
- || __tmp > __numeric_traits<int>::__max)))
+ || _Range_chk::_S_chk(__tmp, std::is_same<_Ret, int>{}))
std::__throw_out_of_range(__name);
else
__ret = __tmp;