This is the mail archive of the gcc-patches@gcc.gnu.org mailing list for the GCC project.


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]
Other format: [Raw text]

[PATCH 8/9]: C++ P0482R5 char8_t: Updates to existing standard library tests


This patch augments existing tests to validate behavior for char8_t. In all cases, added test cases are cloned from existing tests for wchar_t or char16_t.

A few tests required updates to line numbers for diagnostic messages.

libstdc++-v3/ChangeLog:

2018-11-04  Tom Honermann  <tom@honermann.net>

     * testsuite/18_support/byte/ops.cc: Validate
     std::to_integer<char8_t>, std::to_integer<char16_t>, and
     std::to_integer<char32_t>.
     * testsuite/18_support/numeric_limits/dr559.cc: Validate
     std::numeric_limits<char8_t>.
     * testsuite/18_support/numeric_limits/lowest.cc: Validate
     std::numeric_limits<char8_t>::lowest().
     * testsuite/18_support/numeric_limits/max_digits10.cc: Validate
     std::numeric_limits<char8_t>::max_digits10.
     * testsuite/18_support/type_info/fundamental.cc: Validate
     typeinfo for char8_t.
     * testsuite/20_util/from_chars/1_neg.cc: Validate std::from_chars
     with char8_t.
     * testsuite/20_util/hash/requirements/explicit_instantiation.cc:
     Validate explicit instantiation of std::hash<char8_t>.
     * testsuite/20_util/is_integral/value.cc: Validate
     std::is_integral<char8_t>.
     * testsuite/20_util/make_signed/requirements/typedefs-4.cc:
     Validate std::make_signed<char8_t>.
     * testsuite/21_strings/basic_string/cons/char/deduction.cc:
     Validate u8string construction from char8_t sources.
     * testsuite/21_strings/basic_string_view/operations/compare/
     char/70483.cc: Validate substr operations on u8string_view.
     * testsuite/21_strings/basic_string_view/typedefs.cc: Validate that
     the u8string_view typedef is defined.
     * testsuite/21_strings/char_traits/requirements/
     constexpr_functions.cc: Validate char_traits<char8_t> constexpr
     member functions.
     * testsuite/21_strings/char_traits/requirements/
     constexpr_functions_c++17.cc: Validate char_traits<char8_t> C++17
     constexpr member functions.
     * testsuite/21_strings/headers/string/types_std_c++0x.cc: Validate
     that the u8string typedef is defined.
     * testsuite/22_locale/locale/cons/unicode.cc: Validate the presence
     of the std::codecvt<char16_t, char8_t, std::mbstate_t> and
     std::codecvt<char32_t, char8_t, std::mbstate_t> facets.
     * testsuite/29_atomics/atomic/cons/assign_neg.cc: Update 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/is_always_lock_free.cc:
     Validate std::atomic<char8_t>::is_always_lock_free
     * testsuite/29_atomics/atomic_integral/operators/bitwise_neg.cc:
     Update line numbers.
     * testsuite/29_atomics/atomic_integral/operators/decrement_neg.cc:
     Likewise.
     * testsuite/29_atomics/atomic_integral/operators/increment_neg.cc:
     Likewise.
     * testsuite/29_atomics/headers/atomic/macros.cc: Validate
     ATOMIC_CHAR8_T_LOCK_FREE and added a missing error message for
     ATOMIC_CHAR16_T_LOCK_FREE.
     * testsuite/29_atomics/headers/atomic/types_std_c++0x.cc: Validate
     std::atomic_char8_t.
     * testsuite/29_atomics/headers/atomic/types_std_c++0x_neg.cc:
     Validate atomic_char8_t.
     * testsuite/experimental/string_view/typedefs.cc: Validate that
     the u8string_view typedef is defined.
     * testsuite/util/testsuite_common_types.h (integral_types,
     integral_types_gnu, atomic_integrals_no_bool, atomic_integrals):
     Add char8_t to the typelist chains of integral types.

Tom.
diff --git a/libstdc++-v3/testsuite/18_support/byte/ops.cc b/libstdc++-v3/testsuite/18_support/byte/ops.cc
index 6f2755eb0a5..dfbaa8b2efa 100644
--- a/libstdc++-v3/testsuite/18_support/byte/ops.cc
+++ b/libstdc++-v3/testsuite/18_support/byte/ops.cc
@@ -15,7 +15,7 @@
 // with this library; see the file COPYING3.  If not see
 // <http://www.gnu.org/licenses/>.
 
-// { dg-options "-std=gnu++17" }
+// { dg-options "-std=gnu++17 -fchar8_t" }
 // { dg-do compile { target c++17 } }
 
 #include <cstddef>
@@ -218,7 +218,13 @@ constexpr bool test_to_integer(unsigned char c)
 
 static_assert( test_to_integer<int>(0) );
 static_assert( test_to_integer<int>(255) );
+static_assert( test_to_integer<signed char>(0) );
 static_assert( test_to_integer<signed char>(255) );
 static_assert( test_to_integer<unsigned>(0) );
 static_assert( test_to_integer<unsigned>(255) );
-
+static_assert( test_to_integer<char8_t>(0) );
+static_assert( test_to_integer<char8_t>(255) );
+static_assert( test_to_integer<char16_t>(0) );
+static_assert( test_to_integer<char16_t>(255) );
+static_assert( test_to_integer<char32_t>(0) );
+static_assert( test_to_integer<char32_t>(255) );
diff --git a/libstdc++-v3/testsuite/18_support/numeric_limits/dr559.cc b/libstdc++-v3/testsuite/18_support/numeric_limits/dr559.cc
index 150db958807..f72b265dc77 100644
--- a/libstdc++-v3/testsuite/18_support/numeric_limits/dr559.cc
+++ b/libstdc++-v3/testsuite/18_support/numeric_limits/dr559.cc
@@ -1,4 +1,5 @@
 // { dg-do run { target c++11 } }
+// { dg-options "-fchar8_t" }
 
 // 2010-02-17  Paolo Carlini  <paolo.carlini@oracle.com>
 //
@@ -84,6 +85,9 @@ int main()
   do_test<signed char>();
   do_test<unsigned char>();
   do_test<wchar_t>();
+#ifdef _GLIBCXX_USE_CHAR8_T
+  do_test<char8_t>();
+#endif
   do_test<char16_t>();
   do_test<char32_t>();
   do_test<short>();
diff --git a/libstdc++-v3/testsuite/18_support/numeric_limits/lowest.cc b/libstdc++-v3/testsuite/18_support/numeric_limits/lowest.cc
index 25d1b4bcbbd..6083c04afe6 100644
--- a/libstdc++-v3/testsuite/18_support/numeric_limits/lowest.cc
+++ b/libstdc++-v3/testsuite/18_support/numeric_limits/lowest.cc
@@ -1,5 +1,6 @@
 // { dg-do run { target c++11 } }
 // { dg-add-options ieee }
+// { dg-options "-fchar8_t" }
 
 // 2010-02-25  Ed Smith-Rowland
 
@@ -54,6 +55,9 @@ void test01()
   do_test<unsigned char>();
 #ifdef _GLIBCXX_USE_WCHAR_T
   do_test<wchar_t>();
+#endif
+#ifdef _GLIBCXX_USE_CHAR8_T
+  do_test<char8_t>();
 #endif
   do_test<char16_t>();
   do_test<char32_t>();
diff --git a/libstdc++-v3/testsuite/18_support/numeric_limits/max_digits10.cc b/libstdc++-v3/testsuite/18_support/numeric_limits/max_digits10.cc
index 63d3acf6d51..ed0aa31b18c 100644
--- a/libstdc++-v3/testsuite/18_support/numeric_limits/max_digits10.cc
+++ b/libstdc++-v3/testsuite/18_support/numeric_limits/max_digits10.cc
@@ -1,5 +1,6 @@
 // { dg-do run { target c++11 } }
 // { dg-add-options ieee }
+// { dg-options "-fchar8_t" }
 
 // 2010-02-25  Ed Smith-Rowland
 
@@ -42,6 +43,7 @@ test01()
   VERIFY( std::numeric_limits<unsigned long>::max_digits10 == 0 );
   VERIFY( std::numeric_limits<long long>::max_digits10 == 0 );
   VERIFY( std::numeric_limits<unsigned long long>::max_digits10 == 0 );
+  VERIFY( std::numeric_limits<char8_t>::max_digits10 == 0 );
   VERIFY( std::numeric_limits<char16_t>::max_digits10 == 0 );
   VERIFY( std::numeric_limits<char32_t>::max_digits10 == 0 );
 
diff --git a/libstdc++-v3/testsuite/18_support/type_info/fundamental.cc b/libstdc++-v3/testsuite/18_support/type_info/fundamental.cc
index 09fe24cc8c4..da3ebd8265d 100644
--- a/libstdc++-v3/testsuite/18_support/type_info/fundamental.cc
+++ b/libstdc++-v3/testsuite/18_support/type_info/fundamental.cc
@@ -1,5 +1,6 @@
 // { dg-do run { target c++11 } }
 // { dg-require-effective-target dfp }
+// { dg-options "-fchar8_t" }
 
 // 2011-02-23  Benjamin Kosnik  <bkoz@redhat.com>
 //
@@ -50,6 +51,9 @@ int main()
   gen_type_info<long long>();
   gen_type_info<unsigned long long>();
   gen_type_info<wchar_t>();
+#ifdef _GLIBCXX_USE_CHAR8_T
+  gen_type_info<char8_t>();
+#endif
   gen_type_info<char16_t>();
   gen_type_info<char32_t>();
 
diff --git a/libstdc++-v3/testsuite/20_util/from_chars/1_neg.cc b/libstdc++-v3/testsuite/20_util/from_chars/1_neg.cc
index 4c11fb5e1c9..9df4a572474 100644
--- a/libstdc++-v3/testsuite/20_util/from_chars/1_neg.cc
+++ b/libstdc++-v3/testsuite/20_util/from_chars/1_neg.cc
@@ -15,7 +15,7 @@
 // with this library; see the file COPYING3.  If not see
 // <http://www.gnu.org/licenses/>.
 
-// { dg-options "-std=gnu++17" }
+// { dg-options "-std=gnu++17 -fchar8_t" }
 // { dg-do compile { target c++17 } }
 
 #include <charconv>
@@ -29,6 +29,12 @@ test01(const char* first, const char* last)
   std::from_chars(first, last, wc, 10); // { dg-error "no matching" }
 #endif
 
+#ifdef _GLIBCXX_USE_CHAR8_T
+  char8_t c8;
+  std::from_chars(first, last, c8); // { dg-error "no matching" }
+  std::from_chars(first, last, c8, 10); // { dg-error "no matching" }
+#endif
+
   char16_t c16;
   std::from_chars(first, last, c16); // { dg-error "no matching" }
   std::from_chars(first, last, c16, 10); // { dg-error "no matching" }
diff --git a/libstdc++-v3/testsuite/20_util/hash/requirements/explicit_instantiation.cc b/libstdc++-v3/testsuite/20_util/hash/requirements/explicit_instantiation.cc
index 893286e5c24..659ff123911 100644
--- a/libstdc++-v3/testsuite/20_util/hash/requirements/explicit_instantiation.cc
+++ b/libstdc++-v3/testsuite/20_util/hash/requirements/explicit_instantiation.cc
@@ -1,4 +1,5 @@
 // { dg-do compile { target c++11 } }
+// { dg-options "-fchar8_t" }
 
 // Copyright (C) 2007-2018 Free Software Foundation, Inc.
 //
@@ -26,6 +27,9 @@ template class std::hash<bool>;
 template class std::hash<char>;
 template class std::hash<signed char>;
 template class std::hash<unsigned char>;
+#ifdef _GLIBCXX_USE_CHAR8_T
+template class std::hash<char8_t>;
+#endif
 template class std::hash<char16_t>;
 template class std::hash<char32_t>;
 template class std::hash<short>;
diff --git a/libstdc++-v3/testsuite/20_util/is_integral/value.cc b/libstdc++-v3/testsuite/20_util/is_integral/value.cc
index a7af6186bcf..20b2cd4f669 100644
--- a/libstdc++-v3/testsuite/20_util/is_integral/value.cc
+++ b/libstdc++-v3/testsuite/20_util/is_integral/value.cc
@@ -1,4 +1,5 @@
 // { dg-do compile { target c++11 } }
+// { dg-options "-fchar8_t" }
 
 // 2008-05-20  Paolo Carlini  <paolo.carlini@oracle.com>
 //
@@ -34,6 +35,9 @@ void test01()
   static_assert(test_category<is_integral, unsigned char>(true), "");
 #ifdef _GLIBCXX_USE_WCHAR_T
   static_assert(test_category<is_integral, wchar_t>(true), "");
+#endif
+#ifdef _GLIBCXX_USE_CHAR8_T
+  static_assert(test_category<is_integral, char8_t>(true), "");
 #endif
   static_assert(test_category<is_integral, char16_t>(true), "");
   static_assert(test_category<is_integral, char32_t>(true), "");
diff --git a/libstdc++-v3/testsuite/20_util/make_signed/requirements/typedefs-4.cc b/libstdc++-v3/testsuite/20_util/make_signed/requirements/typedefs-4.cc
index d62589b39a4..184a30f3846 100644
--- a/libstdc++-v3/testsuite/20_util/make_signed/requirements/typedefs-4.cc
+++ b/libstdc++-v3/testsuite/20_util/make_signed/requirements/typedefs-4.cc
@@ -1,4 +1,6 @@
 // { dg-do compile { target c++11 } }
+// { dg-require-cstdint "" }
+// { dg-options "-fchar8_t" }
 
 // Copyright (C) 2014-2018 Free Software Foundation, Inc.
 //
@@ -27,5 +29,8 @@ using wchar_signed = make_signed<wchar_t>::type;
 using wchar_unsigned = make_unsigned<wchar_t>::type;
 static_assert( !is_same<wchar_signed, wchar_unsigned>::value, "wchar_t" );
 #endif
+#ifdef _GLIBCXX_USE_CHAR8_T
+static_assert( is_signed<make_signed<char8_t>::type>::value, "char8_t");
+#endif
 static_assert( is_signed<make_signed<char16_t>::type>::value, "char16_t");
 static_assert( is_signed<make_signed<char32_t>::type>::value, "char32_t");
diff --git a/libstdc++-v3/testsuite/21_strings/basic_string/cons/char/deduction.cc b/libstdc++-v3/testsuite/21_strings/basic_string/cons/char/deduction.cc
index 4662fbd4b4d..80041b7f7f5 100644
--- a/libstdc++-v3/testsuite/21_strings/basic_string/cons/char/deduction.cc
+++ b/libstdc++-v3/testsuite/21_strings/basic_string/cons/char/deduction.cc
@@ -15,7 +15,7 @@
 // with this library; see the file COPYING3.  If not see
 // <http://www.gnu.org/licenses/>.
 
-// { dg-options "-std=gnu++17" }
+// { dg-options "-std=gnu++17 -fchar8_t" }
 // { dg-do compile { target c++17 } }
 // { dg-xfail-if "COW string missing deduction guides" { ! cxx11-abi } }
 
@@ -122,6 +122,25 @@ test04()
 
 void
 test05()
+{
+  char8_t a[1] = {};
+  input_iterator_seq<char8_t> seq(a);
+
+  std::basic_string s1(seq.begin(), seq.end());
+  check_type<std::u8string>(s1);
+
+  std::basic_string s2(seq.begin(), seq.end(), std::allocator<char8_t>());
+  check_type<std::u8string>(s2);
+
+  std::basic_string s3((char8_t)1, u8'a');
+  check_type<std::u8string>(s3);
+
+  std::basic_string s4((char8_t)1, u8'a', std::allocator<char8_t>());
+  check_type<std::u8string>(s4);
+}
+
+void
+test06()
 {
   // LWG 3075 basic_string needs deduction guides from basic_string_view
   std::string_view sv{"A View to a Kill"};
@@ -141,7 +160,7 @@ test05()
 }
 
 void
-test06()
+test07()
 {
   // LWG 3076 basic_string CTAD ambiguity
   using namespace std;
diff --git a/libstdc++-v3/testsuite/21_strings/basic_string/types/pmr_typedefs.cc b/libstdc++-v3/testsuite/21_strings/basic_string/types/pmr_typedefs.cc
index 23956673792..dbd4fbd7b7b 100644
--- a/libstdc++-v3/testsuite/21_strings/basic_string/types/pmr_typedefs.cc
+++ b/libstdc++-v3/testsuite/21_strings/basic_string/types/pmr_typedefs.cc
@@ -15,7 +15,7 @@
 // with this library; see the file COPYING3.  If not see
 // <http://www.gnu.org/licenses/>.
 
-// { dg-options "-std=gnu++17" }
+// { dg-options "-std=gnu++17 -fchar8_t" }
 // { dg-do compile { target c++17 } }
 // { dg-require-effective-target cxx11-abi }
 
@@ -33,6 +33,11 @@ static_assert(std::is_same_v<std::pmr::basic_string<char, T>,
 static_assert(std::is_same_v<std::pmr::string,
     std::basic_string<char, std::char_traits<char>,
 		      std::pmr::polymorphic_allocator<char>>>);
+#ifdef _GLIBCXX_USE_CHAR8_T
+static_assert(std::is_same_v<std::pmr::u8string,
+    std::basic_string<char8_t, std::char_traits<char8_t>,
+		      std::pmr::polymorphic_allocator<char8_t>>>);
+#endif
 static_assert(std::is_same_v<std::pmr::u16string,
     std::basic_string<char16_t, std::char_traits<char16_t>,
 		      std::pmr::polymorphic_allocator<char16_t>>>);
diff --git a/libstdc++-v3/testsuite/21_strings/basic_string_view/operations/compare/char/70483.cc b/libstdc++-v3/testsuite/21_strings/basic_string_view/operations/compare/char/70483.cc
index 5954d570fdc..d5069d825c3 100644
--- a/libstdc++-v3/testsuite/21_strings/basic_string_view/operations/compare/char/70483.cc
+++ b/libstdc++-v3/testsuite/21_strings/basic_string_view/operations/compare/char/70483.cc
@@ -15,7 +15,7 @@
 // with this library; see the file COPYING3.  If not see
 // <http://www.gnu.org/licenses/>.
 
-// { dg-options "-std=gnu++17" }
+// { dg-options "-std=gnu++17 -fchar8_t" }
 // { dg-do compile { target c++17 } }
 
 #include <string_view>
@@ -58,6 +58,23 @@ string_view get()
 
 static_assert( get() == get() );
 
+#ifdef _GLIBCXX_USE_CHAR8_T
+using std::u8string_view;
+
+constexpr
+u8string_view get8()
+{
+    u8string_view res = u8"x::";
+    u8string_view start_pattern = u8"x";
+    res = res.substr(res.find(start_pattern) + start_pattern.size());
+    res = res.substr(0, res.find_first_of(u8";]"));
+    res = res.substr(res.rfind(u8"::"));
+    return res;
+}
+
+static_assert( get8() == get8() );
+#endif
+
 using std::u16string_view;
 
 constexpr
diff --git a/libstdc++-v3/testsuite/21_strings/basic_string_view/typedefs.cc b/libstdc++-v3/testsuite/21_strings/basic_string_view/typedefs.cc
index d1269db2b76..0c31df3372e 100644
--- a/libstdc++-v3/testsuite/21_strings/basic_string_view/typedefs.cc
+++ b/libstdc++-v3/testsuite/21_strings/basic_string_view/typedefs.cc
@@ -1,4 +1,4 @@
-// { dg-options "-std=gnu++17" }
+// { dg-options "-std=gnu++17 -fchar8_t" }
 // { dg-do compile }
 
 // Copyright (C) 2014-2018 Free Software Foundation, Inc.
@@ -25,12 +25,15 @@ template<typename C, typename T>
 
 using check2_t = std::string_view;
 
+#ifdef _GLIBCXX_USE_CHAR8_T
+using check3_t = std::u8string_view;
+#endif
+
 #ifdef _GLIBCXX_USE_C99_STDINT_TR1
-using check3_t = std::u16string_view;
-using check4_t = std::u32string_view;
+using check4_t = std::u16string_view;
+using check5_t = std::u32string_view;
 #endif
 
 #ifdef _GLIBCXX_USE_WCHAR_T
-using check5_t = std::wstring_view;
+using check6_t = std::wstring_view;
 #endif
-
diff --git a/libstdc++-v3/testsuite/21_strings/char_traits/requirements/constexpr_functions.cc b/libstdc++-v3/testsuite/21_strings/char_traits/requirements/constexpr_functions.cc
index 2ec87cfc0cd..63fda29289f 100644
--- a/libstdc++-v3/testsuite/21_strings/char_traits/requirements/constexpr_functions.cc
+++ b/libstdc++-v3/testsuite/21_strings/char_traits/requirements/constexpr_functions.cc
@@ -1,4 +1,5 @@
 // { dg-do compile { target c++11 } }
+// { dg-options "-fchar8_t" }
 
 // Copyright (C) 2010-2018 Free Software Foundation, Inc.
 //
@@ -66,6 +67,9 @@ int main()
   test.operator()<std::char_traits<char>>();
 #ifdef _GLIBCXX_USE_WCHAR_T
   test.operator()<std::char_traits<wchar_t>>();
+#endif
+#ifdef _GLIBCXX_USE_CHAR8_T
+  test.operator()<std::char_traits<char8_t>>();
 #endif
   test.operator()<std::char_traits<char16_t>>();
   test.operator()<std::char_traits<char32_t>>();
diff --git a/libstdc++-v3/testsuite/21_strings/char_traits/requirements/constexpr_functions_c++17.cc b/libstdc++-v3/testsuite/21_strings/char_traits/requirements/constexpr_functions_c++17.cc
index 87ea4d89a62..9aa3fcb270e 100644
--- a/libstdc++-v3/testsuite/21_strings/char_traits/requirements/constexpr_functions_c++17.cc
+++ b/libstdc++-v3/testsuite/21_strings/char_traits/requirements/constexpr_functions_c++17.cc
@@ -1,4 +1,4 @@
-// { dg-options "-std=gnu++17" }
+// { dg-options "-std=gnu++17 -fchar8_t" }
 // { dg-do compile { target c++17 } }
 
 // Copyright (C) 2017-2018 Free Software Foundation, Inc.
@@ -89,6 +89,12 @@ static_assert( test_compare<std::char_traits<wchar_t>>() );
 static_assert( test_length<std::char_traits<wchar_t>>() );
 static_assert( test_find<std::char_traits<wchar_t>>() );
 #endif
+#ifdef _GLIBCXX_USE_CHAR8_T
+static_assert( test_assign<std::char_traits<char8_t>>() );
+static_assert( test_compare<std::char_traits<char8_t>>() );
+static_assert( test_length<std::char_traits<char8_t>>() );
+static_assert( test_find<std::char_traits<char8_t>>() );
+#endif
 static_assert( test_assign<std::char_traits<char16_t>>() );
 static_assert( test_compare<std::char_traits<char16_t>>() );
 static_assert( test_length<std::char_traits<char16_t>>() );
diff --git a/libstdc++-v3/testsuite/21_strings/headers/string/types_std_c++0x.cc b/libstdc++-v3/testsuite/21_strings/headers/string/types_std_c++0x.cc
index 038c3681788..569af23ac7f 100644
--- a/libstdc++-v3/testsuite/21_strings/headers/string/types_std_c++0x.cc
+++ b/libstdc++-v3/testsuite/21_strings/headers/string/types_std_c++0x.cc
@@ -1,4 +1,6 @@
 // { dg-do compile { target c++11 } }
+// { dg-options "-fchar8_t" }
+// { dg-require-cstdint "" }
 
 // Copyright (C) 2008-2018 Free Software Foundation, Inc.
 //
@@ -21,6 +23,9 @@
 
 namespace gnu
 {
+#ifdef _GLIBCXX_USE_CHAR8_T
+  typedef std::u8string t2;
+#endif
   typedef std::u16string t3;
   typedef std::u32string t4;
 }
diff --git a/libstdc++-v3/testsuite/22_locale/locale/cons/unicode.cc b/libstdc++-v3/testsuite/22_locale/locale/cons/unicode.cc
index 16fdb9b8244..5e8602af023 100644
--- a/libstdc++-v3/testsuite/22_locale/locale/cons/unicode.cc
+++ b/libstdc++-v3/testsuite/22_locale/locale/cons/unicode.cc
@@ -1,5 +1,6 @@
 // { dg-do run { target c++11 } }
 // { dg-require-iconv "ISO-8859-1" }
+// { dg-options "-fchar8_t" }
 
 // Copyright (C) 2006-2018 Free Software Foundation, Inc.
 //
@@ -36,6 +37,10 @@ typedef std::codecvt<wchar_t, char, std::mbstate_t>	      w_codecvt;
 #ifdef _GLIBCXX_USE_C99_STDINT_TR1
 typedef std::codecvt<char16_t, char, std::mbstate_t>	      u16_codecvt;
 typedef std::codecvt<char32_t, char, std::mbstate_t>	      u32_codecvt;
+#ifdef _GLIBCXX_USE_CHAR8_T
+typedef std::codecvt<char16_t, char8_t, std::mbstate_t>	      u16u8_codecvt;
+typedef std::codecvt<char32_t, char8_t, std::mbstate_t>	      u32u8_codecvt;
+#endif
 #endif
 
 class gnu_facet: public std::locale::facet
@@ -68,6 +73,10 @@ void test01()
 #ifdef _GLIBCXX_USE_C99_STDINT_TR1
       VERIFY( has_facet<u16_codecvt>(loc13) );
       VERIFY( has_facet<u32_codecvt>(loc13) );
+#ifdef _GLIBCXX_USE_CHAR8_T
+      VERIFY( has_facet<u16u8_codecvt>(loc13) );
+      VERIFY( has_facet<u32u8_codecvt>(loc13) );
+#endif
 #endif
       VERIFY( has_facet<unicode_codecvt>(loc13) );
     }
diff --git a/libstdc++-v3/testsuite/29_atomics/atomic/cons/assign_neg.cc b/libstdc++-v3/testsuite/29_atomics/atomic/cons/assign_neg.cc
index 65c5ea0470b..8926d544312 100644
--- a/libstdc++-v3/testsuite/29_atomics/atomic/cons/assign_neg.cc
+++ b/libstdc++-v3/testsuite/29_atomics/atomic/cons/assign_neg.cc
@@ -27,5 +27,5 @@ int main()
   return 0;
 }
 
-// { dg-error "deleted" "" { target *-*-* } 620 }
+// { dg-error "deleted" "" { target *-*-* } 639 }
 // { dg-prune-output "include" }
diff --git a/libstdc++-v3/testsuite/29_atomics/atomic/cons/copy_neg.cc b/libstdc++-v3/testsuite/29_atomics/atomic/cons/copy_neg.cc
index a42f6263548..7652f3f9239 100644
--- a/libstdc++-v3/testsuite/29_atomics/atomic/cons/copy_neg.cc
+++ b/libstdc++-v3/testsuite/29_atomics/atomic/cons/copy_neg.cc
@@ -27,5 +27,5 @@ int main()
   return 0;
 }
 
-// { dg-error "deleted" "" { target *-*-* } 659 }
+// { dg-error "deleted" "" { target *-*-* } 678 }
 // { dg-prune-output "include" }
diff --git a/libstdc++-v3/testsuite/29_atomics/atomic_integral/cons/assign_neg.cc b/libstdc++-v3/testsuite/29_atomics/atomic_integral/cons/assign_neg.cc
index 6e0787dabdb..f242f3ec54a 100644
--- a/libstdc++-v3/testsuite/29_atomics/atomic_integral/cons/assign_neg.cc
+++ b/libstdc++-v3/testsuite/29_atomics/atomic_integral/cons/assign_neg.cc
@@ -28,5 +28,5 @@ int main()
   return 0;
 }
 
-// { dg-error "deleted" "" { target *-*-* } 620 }
+// { dg-error "deleted" "" { target *-*-* } 639 }
 // { dg-prune-output "include" }
diff --git a/libstdc++-v3/testsuite/29_atomics/atomic_integral/cons/copy_neg.cc b/libstdc++-v3/testsuite/29_atomics/atomic_integral/cons/copy_neg.cc
index 23344319c87..d6f6d12ca9f 100644
--- a/libstdc++-v3/testsuite/29_atomics/atomic_integral/cons/copy_neg.cc
+++ b/libstdc++-v3/testsuite/29_atomics/atomic_integral/cons/copy_neg.cc
@@ -28,5 +28,5 @@ int main()
   return 0;
 }
 
-// { dg-error "deleted" "" { target *-*-* } 659 }
+// { dg-error "deleted" "" { target *-*-* } 678 }
 // { dg-prune-output "include" }
diff --git a/libstdc++-v3/testsuite/29_atomics/atomic_integral/is_always_lock_free.cc b/libstdc++-v3/testsuite/29_atomics/atomic_integral/is_always_lock_free.cc
index a0d9c8394ce..7f7f46a0b53 100644
--- a/libstdc++-v3/testsuite/29_atomics/atomic_integral/is_always_lock_free.cc
+++ b/libstdc++-v3/testsuite/29_atomics/atomic_integral/is_always_lock_free.cc
@@ -15,7 +15,7 @@
 // with this library; see the file COPYING3.  If not see
 // <http://www.gnu.org/licenses/>.
 
-// { dg-options "-std=gnu++17" }
+// { dg-options "-std=gnu++17 -fchar8_t" }
 // { dg-do compile }
 
 #include <atomic>
@@ -39,5 +39,6 @@ static_assert( check<unsigned long>(ATOMIC_LONG_LOCK_FREE) );
 static_assert( check<long long>(ATOMIC_LLONG_LOCK_FREE) );
 static_assert( check<unsigned long long>(ATOMIC_LLONG_LOCK_FREE) );
 static_assert( check<wchar_t>(ATOMIC_WCHAR_T_LOCK_FREE) );
+static_assert( check<char8_t>(ATOMIC_CHAR8_T_LOCK_FREE) );
 static_assert( check<char16_t>(ATOMIC_CHAR16_T_LOCK_FREE) );
 static_assert( check<char32_t>(ATOMIC_CHAR32_T_LOCK_FREE) );
diff --git a/libstdc++-v3/testsuite/29_atomics/atomic_integral/operators/bitwise_neg.cc b/libstdc++-v3/testsuite/29_atomics/atomic_integral/operators/bitwise_neg.cc
index 327b7e23f7d..f6d392d116d 100644
--- a/libstdc++-v3/testsuite/29_atomics/atomic_integral/operators/bitwise_neg.cc
+++ b/libstdc++-v3/testsuite/29_atomics/atomic_integral/operators/bitwise_neg.cc
@@ -26,8 +26,8 @@ int main()
   return 0;
 }
 
-// { dg-error "operator" "" { target *-*-* } 476 }
-// { dg-error "operator" "" { target *-*-* } 477 }
-// { dg-error "operator" "" { target *-*-* } 478 }
+// { dg-error "operator" "" { target *-*-* } 495 }
+// { dg-error "operator" "" { target *-*-* } 496 }
+// { dg-error "operator" "" { target *-*-* } 497 }
 
 // { dg-prune-output "declared here" }
diff --git a/libstdc++-v3/testsuite/29_atomics/atomic_integral/operators/decrement_neg.cc b/libstdc++-v3/testsuite/29_atomics/atomic_integral/operators/decrement_neg.cc
index 921f14d7009..58796c032dc 100644
--- a/libstdc++-v3/testsuite/29_atomics/atomic_integral/operators/decrement_neg.cc
+++ b/libstdc++-v3/testsuite/29_atomics/atomic_integral/operators/decrement_neg.cc
@@ -27,6 +27,6 @@ int main()
   return 0;
 }
 
-// { dg-error "operator" "" { target *-*-* } 428 }
-// { dg-error "operator" "" { target *-*-* } 429 }
-// { dg-error "operator" "" { target *-*-* } 430 }
+// { dg-error "operator" "" { target *-*-* } 447 }
+// { dg-error "operator" "" { target *-*-* } 448 }
+// { dg-error "operator" "" { target *-*-* } 449 }
diff --git a/libstdc++-v3/testsuite/29_atomics/atomic_integral/operators/increment_neg.cc b/libstdc++-v3/testsuite/29_atomics/atomic_integral/operators/increment_neg.cc
index 1a3ff297b9d..37a89b64bb1 100644
--- a/libstdc++-v3/testsuite/29_atomics/atomic_integral/operators/increment_neg.cc
+++ b/libstdc++-v3/testsuite/29_atomics/atomic_integral/operators/increment_neg.cc
@@ -27,6 +27,6 @@ int main()
   return 0;
 }
 
-// { dg-error "operator" "" { target *-*-* } 406 }
-// { dg-error "operator" "" { target *-*-* } 407 }
-// { dg-error "operator" "" { target *-*-* } 408 }
+// { dg-error "operator" "" { target *-*-* } 425 }
+// { dg-error "operator" "" { target *-*-* } 426 }
+// { dg-error "operator" "" { target *-*-* } 427 }
diff --git a/libstdc++-v3/testsuite/29_atomics/headers/atomic/macros.cc b/libstdc++-v3/testsuite/29_atomics/headers/atomic/macros.cc
index 443d9da2438..15251149804 100644
--- a/libstdc++-v3/testsuite/29_atomics/headers/atomic/macros.cc
+++ b/libstdc++-v3/testsuite/29_atomics/headers/atomic/macros.cc
@@ -1,4 +1,5 @@
 // { dg-do preprocess { target c++11 } }
+// { dg-options "-fchar8_t" }
 
 // Copyright (C) 2008-2018 Free Software Foundation, Inc.
 //
@@ -31,9 +32,16 @@
 # error "ATOMIC_CHAR_LOCK_FREE must be 1 or 2"
 #endif
 
+#ifndef ATOMIC_CHAR8_T_LOCK_FREE
+# error "ATOMIC_CHAR8_T_LOCK_FREE must be a macro"
+#elif ATOMIC_CHAR8_T_LOCK_FREE != 1 && ATOMIC_CHAR8_T_LOCK_FREE != 2
+# error "ATOMIC_CHAR8_T_LOCK_FREE must be 1 or 2"
+#endif
+
 #ifndef ATOMIC_CHAR16_T_LOCK_FREE 
 # error "ATOMIC_CHAR16_T_LOCK_FREE must be a macro"
 #elif ATOMIC_CHAR16_T_LOCK_FREE != 1 && ATOMIC_CHAR16_T_LOCK_FREE != 2
+# error "ATOMIC_CHAR16_T_LOCK_FREE must be 1 or 2"
 #endif
 
 #ifndef ATOMIC_CHAR32_T_LOCK_FREE 
diff --git a/libstdc++-v3/testsuite/29_atomics/headers/atomic/types_std_c++0x.cc b/libstdc++-v3/testsuite/29_atomics/headers/atomic/types_std_c++0x.cc
index 58c19d69968..acc24ca2c82 100644
--- a/libstdc++-v3/testsuite/29_atomics/headers/atomic/types_std_c++0x.cc
+++ b/libstdc++-v3/testsuite/29_atomics/headers/atomic/types_std_c++0x.cc
@@ -1,5 +1,6 @@
 // { dg-do compile { target c++11 } }
 // { dg-require-cstdint "" }
+// { dg-options "-fchar8_t" }
 
 // Copyright (C) 2008-2018 Free Software Foundation, Inc.
 //
@@ -46,6 +47,7 @@ void test01()
   using std::atomic_llong;
   using std::atomic_ullong;
   using std::atomic_wchar_t;
+  using std::atomic_char8_t;
   using std::atomic_char16_t;
   using std::atomic_char32_t;
 
diff --git a/libstdc++-v3/testsuite/29_atomics/headers/atomic/types_std_c++0x_neg.cc b/libstdc++-v3/testsuite/29_atomics/headers/atomic/types_std_c++0x_neg.cc
index 962e8728c7d..d19d04949e9 100644
--- a/libstdc++-v3/testsuite/29_atomics/headers/atomic/types_std_c++0x_neg.cc
+++ b/libstdc++-v3/testsuite/29_atomics/headers/atomic/types_std_c++0x_neg.cc
@@ -1,4 +1,5 @@
 // { dg-do compile { target c++11 } }
+// { dg-options "-fchar8_t" }
 
 // Copyright (C) 2009-2018 Free Software Foundation, Inc.
 //
@@ -45,6 +46,7 @@ void test01()
   using atomic_llong;		// { dg-error "expected nested-name-specifier" }
   using atomic_ullong;		// { dg-error "expected nested-name-specifier" }
   using atomic_wchar_t;		// { dg-error "expected nested-name-specifier" }
+  using atomic_char8_t;		// { dg-error "expected nested-name-specifier" }
   using atomic_char16_t;	// { dg-error "expected nested-name-specifier" }
   using atomic_char32_t;	// { dg-error "expected nested-name-specifier" }
 
diff --git a/libstdc++-v3/testsuite/experimental/polymorphic_allocator/pmr_typedefs_string.cc b/libstdc++-v3/testsuite/experimental/polymorphic_allocator/pmr_typedefs_string.cc
index ed53ce1a89b..db16ce59ac7 100644
--- a/libstdc++-v3/testsuite/experimental/polymorphic_allocator/pmr_typedefs_string.cc
+++ b/libstdc++-v3/testsuite/experimental/polymorphic_allocator/pmr_typedefs_string.cc
@@ -16,6 +16,7 @@
 // <http://www.gnu.org/licenses/>.
 
 // { dg-do compile { target c++14 } }
+// { dg-options "-fchar8_t" }
 // { dg-require-effective-target cxx11-abi }
 
 #include <experimental/string>
@@ -36,6 +37,12 @@ static_assert(std::is_same<xpmr::string,
     std::basic_string<char, std::char_traits<char>,
 		      xpmr::polymorphic_allocator<char>>>::value,
     "pmr::string");
+#ifdef _GLIBCXX_USE_CHAR8_T
+static_assert(std::is_same<xpmr::u8string,
+    std::basic_string<char8_t, std::char_traits<char8_t>,
+		      xpmr::polymorphic_allocator<char8_t>>>::value,
+    "pmr::u8string");
+#endif
 static_assert(std::is_same<xpmr::u16string,
     std::basic_string<char16_t, std::char_traits<char16_t>,
 		      xpmr::polymorphic_allocator<char16_t>>>::value,
diff --git a/libstdc++-v3/testsuite/experimental/string_view/typedefs.cc b/libstdc++-v3/testsuite/experimental/string_view/typedefs.cc
index 5bde385a9d5..53ac37b9d5d 100644
--- a/libstdc++-v3/testsuite/experimental/string_view/typedefs.cc
+++ b/libstdc++-v3/testsuite/experimental/string_view/typedefs.cc
@@ -1,3 +1,4 @@
+// { dg-options "-fchar8_t" }
 // { dg-do compile { target c++14 } }
 
 // Copyright (C) 2014-2018 Free Software Foundation, Inc.
@@ -24,12 +25,16 @@ template<typename C, typename T>
 
 using check2_t = std::experimental::fundamentals_v1::string_view;
 
+#ifdef _GLIBCXX_USE_CHAR8_T
+using check3_t = std::experimental::fundamentals_v1::u8string_view;
+#endif
+
 #ifdef _GLIBCXX_USE_C99_STDINT_TR1
-using check3_t = std::experimental::fundamentals_v1::u16string_view;
-using check4_t = std::experimental::fundamentals_v1::u32string_view;
+using check4_t = std::experimental::fundamentals_v1::u16string_view;
+using check5_t = std::experimental::fundamentals_v1::u32string_view;
 #endif
 
 #ifdef _GLIBCXX_USE_WCHAR_T
-using check5_t = std::experimental::fundamentals_v1::wstring_view;
+using check6_t = std::experimental::fundamentals_v1::wstring_view;
 #endif
 
diff --git a/libstdc++-v3/testsuite/util/testsuite_common_types.h b/libstdc++-v3/testsuite/util/testsuite_common_types.h
index 2e977b57cf1..c74fb06f8db 100644
--- a/libstdc++-v3/testsuite/util/testsuite_common_types.h
+++ b/libstdc++-v3/testsuite/util/testsuite_common_types.h
@@ -51,6 +51,7 @@
 
 namespace __gnu_test
 {
+  using __gnu_cxx::typelist::null_type;
   using __gnu_cxx::typelist::node;
   using __gnu_cxx::typelist::transform;
   using __gnu_cxx::typelist::append;
@@ -272,16 +273,23 @@ namespace __gnu_test
     typedef long long 		a11;
     typedef unsigned long long 	a12;
     typedef wchar_t 		a13;
+    typedef node<_GLIBCXX_TYPELIST_CHAIN13(a1, a2, a3, a4, a5, a6, a7, a8, a9,
+					   a10, a11, a12, a13)> basic_typelist;
+#ifdef _GLIBCXX_USE_CHAR8_T
+    typedef char8_t 		a14;
+    typedef node<_GLIBCXX_TYPELIST_CHAIN1(a14)> char8_typelist;
+#else
+    typedef node<null_type> char8_typelist;
+#endif
 #if __cplusplus >= 201103L
-    typedef char16_t 		a14;
-    typedef char32_t 		a15;
-
-    typedef node<_GLIBCXX_TYPELIST_CHAIN15(a1, a2, a3, a4, a5, a6, a7, a8, a9,
-					   a10, a11, a12, a13, a14, a15)> type;
+    typedef char16_t 		a15;
+    typedef char32_t 		a16;
+    typedef node<_GLIBCXX_TYPELIST_CHAIN2(a15, a16)> cxx11_typelist;
 #else
-    typedef node<_GLIBCXX_TYPELIST_CHAIN13(a1, a2, a3, a4, a5, a6, a7, a8, a9,
-					   a10, a11, a12, a13)> type;
+    typedef node<null_type> cxx11_typelist;
 #endif
+    typedef typename append<basic_typelist, char8_typelist>::type tl1;
+    typedef typename append<tl1, cxx11_typelist>::type type;
   };
 
   // A typelist of all standard integral types + the GNU 128-bit types.
@@ -300,32 +308,31 @@ namespace __gnu_test
     typedef long long 		a11;
     typedef unsigned long long 	a12;
     typedef wchar_t 		a13;
+    typedef node<_GLIBCXX_TYPELIST_CHAIN13(a1, a2, a3, a4, a5, a6, a7, a8, a9,
+					   a10, a11, a12, a13)> basic_typelist;
+#ifdef _GLIBCXX_USE_CHAR8_T
+    typedef char8_t 		a14;
+    typedef node<_GLIBCXX_TYPELIST_CHAIN1(a14)> char8_typelist;
+#else
+    typedef node<null_type> char8_typelist;
+#endif
 #if __cplusplus >= 201103L
-    typedef char16_t 		a14;
-    typedef char32_t 		a15;
-# if !defined(__STRICT_ANSI__) && defined(_GLIBCXX_USE_INT128)
-    __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,
-					   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
+    typedef char16_t 		a15;
+    typedef char32_t 		a16;
+    typedef node<_GLIBCXX_TYPELIST_CHAIN2(a15, a16)> cxx11_typelist;
 #else
+    typedef node<null_type> cxx11_typelist;
+#endif
 # if !defined(__STRICT_ANSI__) && defined(_GLIBCXX_USE_INT128)
-    __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;
-# else
-   typedef node<_GLIBCXX_TYPELIST_CHAIN13(a1, a2, a3, a4, a5, a6, a7, a8, a9,
-					  a10, a11, a12, a13)> type;
-# endif
+    __extension__ typedef __int128            a17;
+    __extension__ typedef unsigned __int128   a18;
+    typedef node<_GLIBCXX_TYPELIST_CHAIN2(a17, a18)> int128_typelist;
+#else
+    typedef node<null_type> int128_typelist;
 #endif
+    typedef typename append<basic_typelist, char8_typelist>::type tl1;
+    typedef typename append<tl1, cxx11_typelist>::type            tl2;
+    typedef typename append<tl2, int128_typelist>::type type;
   };
 
 #if __cplusplus >= 201103L
@@ -345,9 +352,15 @@ namespace __gnu_test
     typedef std::atomic_wchar_t     	a13;
     typedef std::atomic_char16_t    	a14;
     typedef std::atomic_char32_t    	a15;
-
-    typedef node<_GLIBCXX_TYPELIST_CHAIN14(a2, a3, a4, a5, a6, a7, a8, a9,
-					   a10, a11, a12, a13, a14, a15)> type;
+    typedef node<_GLIBCXX_TYPELIST_CHAIN14(a2, a3, a4, a5, a6, a7, a8, a9, a10,
+					    a11, a12, a13, a14, a15)> basic_typelist;
+#ifdef _GLIBCXX_USE_CHAR8_T
+    typedef std::atomic_char8_t		a16;
+    typedef node<_GLIBCXX_TYPELIST_CHAIN1(a16)> char8_typelist;
+#else
+    typedef node<null_type> char8_typelist;
+#endif
+    typedef typename append<basic_typelist, char8_typelist>::type type;
   };
 
   struct atomic_integrals
@@ -367,9 +380,15 @@ namespace __gnu_test
     typedef std::atomic_wchar_t     	a13;
     typedef std::atomic_char16_t    	a14;
     typedef std::atomic_char32_t    	a15;
-
     typedef node<_GLIBCXX_TYPELIST_CHAIN15(a1, a2, a3, a4, a5, a6, a7, a8, a9,
-					   a10, a11, a12, a13, a14, a15)> type;
+					   a10, a11, a12, a13, a14, a15)> basic_typelist;
+#ifdef _GLIBCXX_USE_CHAR8_T
+    typedef std::atomic_char8_t		a16;
+    typedef node<_GLIBCXX_TYPELIST_CHAIN1(a16)> char8_typelist;
+#else
+    typedef node<null_type> char8_typelist;
+#endif
+    typedef typename append<basic_typelist, char8_typelist>::type type;
   };
 
 

Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]