public inbox for libstdc++@gcc.gnu.org
 help / color / mirror / Atom feed
From: "CHIGOT, CLEMENT" <clement.chigot@atos.net>
To: Rainer Orth <ro@CeBiTec.Uni-Bielefeld.DE>,
	Jonathan Wakely <jwakely@redhat.com>
Cc: libstdc++ <libstdc++@gcc.gnu.org>,
	David Edelsohn via Gcc-patches <gcc-patches@gcc.gnu.org>,
	David Edelsohn <dje.gcc@gmail.com>
Subject: Re: [PATCH] libstdc++: implement locale support for AIX
Date: Wed, 27 Jan 2021 12:52:21 +0000	[thread overview]
Message-ID: <PA4PR02MB668659F4DE3E528F87A71C08EABB0@PA4PR02MB6686.eurprd02.prod.outlook.com> (raw)
In-Reply-To: <PA4PR02MB6686CC25C3DB174FD7DAC6B6EAA00@PA4PR02MB6686.eurprd02.prod.outlook.com>

[-- Attachment #1: Type: text/plain, Size: 842 bytes --]

Hi everyone, 

Here is a better version of the patch. 
All tests are on Linux are passing. Few have been disabled as 
they are working only with GNU model. 
For AIX, few failures remains. I haven't XFAIL them yet, as I 
want to know if they AIX only or related to the model itself. 

A few part still need to be improved (dg-require-localmodel,
std::locale:global, FreeBSD specific #ifdef). 
But at least it can be tested in most of the platforms as is. 

Note that I'll stop working on it until gcc12. Mostly because gcc
is on freeze but also because I've more urgent stuff to do right now. 
Of course any feedbacks is welcome ! But I might not send a
new patch if it requires too much time (at least not right now). 

Thanks anyway Rainer and Jonathan for your help ! I hope this 
version suits you better !

Clément


[-- Attachment #2: 0001-libstdc-implement-locale-support-for-XPG7.patch --]
[-- Type: application/octet-stream, Size: 52884 bytes --]

From 10f7048f2fb53f818493766cc0a60cf9e7b20635 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Cl=C3=A9ment=20Chigot?= <clement.chigot@atos.net>
Date: Tue, 29 Dec 2020 11:08:33 +0100
Subject: [PATCH] libstdc++: implement locale support for XPG7
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit

Create a new locale model for POSIX operating systems.
The implementation is based on dragonfly one.

There are few known limitations.
std::messages isn't implemented.
Creation std::locale with a string describing each LC_* category
isn't possible (eg std::locale("LC_CTYPE=en_US.UTF-8;LC_NUMERIC=C;...")

libstdc++-v3/ChangeLog:
2020-01-25  Clément Chigot  <clement.chigot@atos.net>

	* acinclude.m4: Add XPG7 model.
	* config.h.in: Regenerate.
	* configure: Regenerate.
	* config/locale/dragonfly/c_locale.cc: Rename to ...
	* config/locale/xpg7/c_locale.cc: ... here.
	* config/locale/dragonfly/c_locale.h: Rename to ...
	* config/locale/xpg7/c_locale.h: ... here.
	(_GLIBCXX_C_LOCALE_XPG7): New define.
	(strtof_l): New function if not provided by the system.
	(strtod_l): Likewise.
	(strtold_l): Likewise.
	* config/locale/dragonfly/ctype_members.cc: Rename to ...
	* config/locale/xpg7/ctype_members.cc: ... here.
	* config/locale/dragonfly/monetary_members.cc: Rename to ...
	* config/locale/xpg7/monetary_members.cc: ... here.
	* config/locale/dragonfly/numeric_members.cc: Rename to ...
	* config/locale/xpg7/numeric_members.cc: ... here.
	* config/locale/dragonfly/time_members.cc: Rename to ...
	* config/locale/xpg7/time_members.cc: ... here.
	* config/os/aix/ctype_configure_char.cc (ctype<char>::ctype):
	Add support for XPG7 model.
	* config/os/gnu-linux/ctype_configure_char.cc: Likewise.
	* src/c++98/locale_init.cc (locale::global): Call setlocale
	for each category instead of once when not using gnu model.
	* testsuite/22_locale/codecvt/in/wchar_t/2.cc: Add xfail for
	wchar_t on 16bit.
	* testsuite/22_locale/codecvt/in/wchar_t/3.cc: Likewise.
	* testsuite/22_locale/codecvt/in/wchar_t/4.cc: Likewise.
	* testsuite/22_locale/codecvt/in/wchar_t/7.cc: Likewise.
	* testsuite/22_locale/codecvt/in/wchar_t/8.cc: Likewise.
	* testsuite/22_locale/codecvt/in/wchar_t/9.cc: Likewise.
	* testsuite/22_locale/codecvt/length/wchar_t/4.cc: Likewise.
	* testsuite/22_locale/codecvt/out/wchar_t/4.cc: Likewise.
	* testsuite/22_locale/codecvt/unshift/wchar_t/4.cc: Likewise.
	* testsuite/27_io/basic_filebuf/overflow/wchar_t/11305-1.cc:
	Likewise.
	* testsuite/27_io/basic_filebuf/overflow/wchar_t/11305-2.cc:
	Likewise.
	* testsuite/27_io/basic_filebuf/overflow/wchar_t/11305-3.cc:
	Likewise.
	* testsuite/27_io/basic_filebuf/overflow/wchar_t/11305-4.cc:
	Likewise.
	* testsuite/22_locale/ctype/is/wchar_t/2.cc: Remove xfail
	with xpg7 model.
	* testsuite/22_locale/locale/cons/29217.cc: Add skip when not
	using gnu model.
	* testsuite/22_locale/locale/cons/38368.cc: Likewise.
	* testsuite/22_locale/locale/cons/40184.cc: Likewise.
	* testsuite/22_locale/locale/cons/5.cc: Likewise.
	* testsuite/22_locale/locale/global_locale_objects/14071.cc:
	Likewise.
	* testsuite/22_locale/messages/13631.cc: Likewise.
	* testsuite/22_locale/messages/members/char/1.cc: Likewise.
	* testsuite/22_locale/messages/members/char/2.cc: Likewise.
	* testsuite/22_locale/messages/members/char/3.cc: Likewise.
	* testsuite/22_locale/messages/members/char/wrapped_env.cc:
	Likewise.
	* testsuite/22_locale/messages/members/char/wrapped_locale.cc:
	Likewise.
	* testsuite/22_locale/messages_byname/named_equivalence.cc:
	Likewise.
	* testsuite/lib/dg-options.exp (dg-require-localemodel): New.
	* testsuite/lib/libstdc++.exp (check_v3_target_namedlocale): Add
	AIX support.
	(check_v3_target_localemodel): New.
	* testsuite/util/testsuite_hooks.h (ISO_8859): Add AIX support.
---
 libstdc++-v3/acinclude.m4                     | 47 ++++++------
 libstdc++-v3/config.h.in                      | 15 ++++
 .../locale/{dragonfly => xpg7}/c_locale.cc    |  8 ++-
 .../locale/{dragonfly => xpg7}/c_locale.h     | 48 ++++++++++++-
 .../{dragonfly => xpg7}/codecvt_members.cc    |  4 +-
 .../{dragonfly => xpg7}/collate_members.cc    |  4 +-
 .../{dragonfly => xpg7}/ctype_members.cc      | 71 +++++++++++++++++--
 .../{dragonfly => xpg7}/monetary_members.cc   | 47 ++++++++++--
 .../{dragonfly => xpg7}/numeric_members.cc    | 30 +++++++-
 .../{dragonfly => xpg7}/time_members.cc       | 36 +++++++++-
 .../locale/{dragonfly => xpg7}/time_members.h |  4 +-
 .../config/os/aix/ctype_configure_char.cc     | 71 ++++++++++++++++---
 .../os/gnu-linux/ctype_configure_char.cc      |  4 +-
 libstdc++-v3/src/c++98/locale_init.cc         | 12 ++++
 .../22_locale/codecvt/in/wchar_t/2.cc         |  1 +
 .../22_locale/codecvt/in/wchar_t/3.cc         |  1 +
 .../22_locale/codecvt/in/wchar_t/4.cc         |  1 +
 .../22_locale/codecvt/in/wchar_t/7.cc         |  1 +
 .../22_locale/codecvt/in/wchar_t/8.cc         |  1 +
 .../22_locale/codecvt/in/wchar_t/9.cc         |  1 +
 .../22_locale/codecvt/length/wchar_t/4.cc     |  1 +
 .../22_locale/codecvt/out/wchar_t/4.cc        |  1 +
 .../22_locale/codecvt/unshift/wchar_t/4.cc    |  1 +
 .../testsuite/22_locale/ctype/is/wchar_t/2.cc |  2 +-
 .../testsuite/22_locale/locale/cons/29217.cc  |  1 +
 .../testsuite/22_locale/locale/cons/38368.cc  |  1 +
 .../testsuite/22_locale/locale/cons/40184.cc  |  1 +
 .../testsuite/22_locale/locale/cons/5.cc      |  1 +
 .../locale/global_locale_objects/14071.cc     |  1 +
 .../testsuite/22_locale/messages/13631.cc     |  1 +
 .../22_locale/messages/members/char/1.cc      |  1 +
 .../22_locale/messages/members/char/2.cc      |  1 +
 .../22_locale/messages/members/char/3.cc      |  1 +
 .../messages/members/char/wrapped_env.cc      |  1 +
 .../messages/members/char/wrapped_locale.cc   |  1 +
 .../messages_byname/named_equivalence.cc      |  1 +
 .../basic_filebuf/overflow/wchar_t/11305-1.cc |  1 +
 .../basic_filebuf/overflow/wchar_t/11305-2.cc |  1 +
 .../basic_filebuf/overflow/wchar_t/11305-3.cc |  1 +
 .../basic_filebuf/overflow/wchar_t/11305-4.cc |  1 +
 libstdc++-v3/testsuite/lib/dg-options.exp     |  9 +++
 libstdc++-v3/testsuite/lib/libstdc++.exp      | 31 ++++++++
 libstdc++-v3/testsuite/util/testsuite_hooks.h |  3 +
 43 files changed, 414 insertions(+), 57 deletions(-)
 rename libstdc++-v3/config/locale/{dragonfly => xpg7}/c_locale.cc (96%)
 rename libstdc++-v3/config/locale/{dragonfly => xpg7}/c_locale.h (67%)
 rename libstdc++-v3/config/locale/{dragonfly => xpg7}/codecvt_members.cc (98%)
 rename libstdc++-v3/config/locale/{dragonfly => xpg7}/collate_members.cc (94%)
 rename libstdc++-v3/config/locale/{dragonfly => xpg7}/ctype_members.cc (77%)
 rename libstdc++-v3/config/locale/{dragonfly => xpg7}/monetary_members.cc (95%)
 rename libstdc++-v3/config/locale/{dragonfly => xpg7}/numeric_members.cc (89%)
 rename libstdc++-v3/config/locale/{dragonfly => xpg7}/time_members.cc (92%)
 rename libstdc++-v3/config/locale/{dragonfly => xpg7}/time_members.h (95%)

diff --git a/libstdc++-v3/acinclude.m4 b/libstdc++-v3/acinclude.m4
index e4175ea3e64..e1853e7a947 100644
--- a/libstdc++-v3/acinclude.m4
+++ b/libstdc++-v3/acinclude.m4
@@ -2421,7 +2421,7 @@ dnl
 AC_DEFUN([GLIBCXX_ENABLE_CLOCALE], [
   GLIBCXX_ENABLE(clocale,auto,[[[=MODEL]]],
     [use MODEL for target locale package],
-    [permit generic|gnu|ieee_1003.1-2001|newlib|yes|no|auto])
+    [permit generic|gnu|ieee_1003.1-2001|newlib|xpg7|yes|no|auto])
 
   # Deal with gettext issues.  Default to not using it (=no) until we detect
   # support for it later.  Let the user turn it off via --e/d, but let that
@@ -2448,8 +2448,8 @@ AC_DEFUN([GLIBCXX_ENABLE_CLOCALE], [
       darwin*)
 	enable_clocale_flag=darwin
 	;;
-      dragonfly* | freebsd*)
-	enable_clocale_flag=dragonfly
+      aix* | dragonfly* | freebsd*)
+	enable_clocale_flag=xpg7
 	;;
       openbsd*)
 	enable_clocale_flag=newlib
@@ -2543,23 +2543,6 @@ AC_DEFUN([GLIBCXX_ENABLE_CLOCALE], [
       CLOCALE_INTERNAL_H=config/locale/generic/c++locale_internal.h
       ;;
 
-    dragonfly)
-      AC_MSG_RESULT(dragonfly or freebsd)
-
-      CLOCALE_H=config/locale/dragonfly/c_locale.h
-      CLOCALE_CC=config/locale/dragonfly/c_locale.cc
-      CCODECVT_CC=config/locale/dragonfly/codecvt_members.cc
-      CCOLLATE_CC=config/locale/dragonfly/collate_members.cc
-      CCTYPE_CC=config/locale/dragonfly/ctype_members.cc
-      CMESSAGES_H=config/locale/generic/messages_members.h
-      CMESSAGES_CC=config/locale/generic/messages_members.cc
-      CMONEY_CC=config/locale/dragonfly/monetary_members.cc
-      CNUMERIC_CC=config/locale/dragonfly/numeric_members.cc
-      CTIME_H=config/locale/dragonfly/time_members.h
-      CTIME_CC=config/locale/dragonfly/time_members.cc
-      CLOCALE_INTERNAL_H=config/locale/generic/c++locale_internal.h
-      ;;
-
     gnu)
       AC_MSG_RESULT(gnu)
 
@@ -2610,6 +2593,24 @@ AC_DEFUN([GLIBCXX_ENABLE_CLOCALE], [
       CTIME_CC=config/locale/generic/time_members.cc
       CLOCALE_INTERNAL_H=config/locale/generic/c++locale_internal.h
       ;;
+
+    xpg7)
+      AC_MSG_RESULT(xpg7)
+
+      CLOCALE_H=config/locale/xpg7/c_locale.h
+      CLOCALE_CC=config/locale/xpg7/c_locale.cc
+      CCODECVT_CC=config/locale/xpg7/codecvt_members.cc
+      CCOLLATE_CC=config/locale/xpg7/collate_members.cc
+      CCTYPE_CC=config/locale/xpg7/ctype_members.cc
+      CMESSAGES_H=config/locale/generic/messages_members.h
+      CMESSAGES_CC=config/locale/generic/messages_members.cc
+      CMONEY_CC=config/locale/xpg7/monetary_members.cc
+      CNUMERIC_CC=config/locale/xpg7/numeric_members.cc
+      CTIME_H=config/locale/xpg7/time_members.h
+      CTIME_CC=config/locale/xpg7/time_members.cc
+      CLOCALE_INTERNAL_H=config/locale/generic/c++locale_internal.h
+      ;;
+
     newlib)
       AC_MSG_RESULT(newlib)
 
@@ -2656,6 +2657,12 @@ AC_DEFUN([GLIBCXX_ENABLE_CLOCALE], [
   AC_SUBST(CTIME_CC)
   AC_SUBST(CLOCALE_CC)
   AC_SUBST(CLOCALE_INTERNAL_H)
+
+  if test $enable_clocale_flag = xpg7; then
+     AC_CHECK_HEADERS(xlocale.h)
+
+     AC_CHECK_FUNCS([strtof_l localeconv_l mbstowcs_l wcsftime_l strftime_l])
+  fi
 ])
 
 
diff --git a/libstdc++-v3/config.h.in b/libstdc++-v3/config.h.in
index d36ca2620b4..0b726524cc5 100644
--- a/libstdc++-v3/config.h.in
+++ b/libstdc++-v3/config.h.in
@@ -225,6 +225,9 @@
 /* Define to 1 if you have the <linux/types.h> header file. */
 #undef HAVE_LINUX_TYPES_H
 
+/* Define to 1 if you have the `localeconv_l' function. */
+#undef HAVE_LOCALECONV_L
+
 /* Define to 1 if you have the <locale.h> header file. */
 #undef HAVE_LOCALE_H
 
@@ -249,6 +252,9 @@
 /* Define if mbstate_t exists in wchar.h. */
 #undef HAVE_MBSTATE_T
 
+/* Define to 1 if you have the `mbstowcs_l' function. */
+#undef HAVE_MBSTOWCS_L
+
 /* Define to 1 if you have the `memalign' function. */
 #undef HAVE_MEMALIGN
 
@@ -360,6 +366,9 @@
 /* Define if strerror_r is available in <string.h>. */
 #undef HAVE_STRERROR_R
 
+/* Define to 1 if you have the `strftime_l' function. */
+#undef HAVE_STRFTIME_L
+
 /* Define to 1 if you have the <strings.h> header file. */
 #undef HAVE_STRINGS_H
 
@@ -369,6 +378,9 @@
 /* Define to 1 if you have the `strtof' function. */
 #undef HAVE_STRTOF
 
+/* Define to 1 if you have the `strtof_l' function. */
+#undef HAVE_STRTOF_L
+
 /* Define to 1 if you have the `strtold' function. */
 #undef HAVE_STRTOLD
 
@@ -490,6 +502,9 @@
 /* Define to 1 if you have the <wchar.h> header file. */
 #undef HAVE_WCHAR_H
 
+/* Define to 1 if you have the `wcsftime_l' function. */
+#undef HAVE_WCSFTIME_L
+
 /* Defined if wcstof exists. */
 #undef HAVE_WCSTOF
 
diff --git a/libstdc++-v3/config/locale/dragonfly/c_locale.cc b/libstdc++-v3/config/locale/xpg7/c_locale.cc
similarity index 96%
rename from libstdc++-v3/config/locale/dragonfly/c_locale.cc
rename to libstdc++-v3/config/locale/xpg7/c_locale.cc
index 02df4605bb5..fcd50ac4aec 100644
--- a/libstdc++-v3/config/locale/dragonfly/c_locale.cc
+++ b/libstdc++-v3/config/locale/xpg7/c_locale.cc
@@ -1,6 +1,6 @@
-// localization implementation details, DragonFly version -*- C++ -*-
+// localization implementation details, XPG7 version -*- C++ -*-
 
-// Copyright (C) 2014-2021 Free Software Foundation, Inc.
+// Copyright (C) 2021-2021 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
@@ -28,13 +28,17 @@
 
 // Written by Benjamin Kosnik <bkoz@redhat.com>
 // Modified for DragonFly by John Marino <gnugcc@marino.st>
+// Modified for XPG7 by Clément Chigot <clement.chigot@atos.net>
 
 #include <cstdlib>
 #include <locale>
 #include <stdexcept>
 #include <limits>
+
 #include <langinfo.h>
+#ifdef _GLIBCXX_HAVE_XLOCALE_H
 #include <xlocale.h>
+#endif
 
 namespace std _GLIBCXX_VISIBILITY(default)
 {
diff --git a/libstdc++-v3/config/locale/dragonfly/c_locale.h b/libstdc++-v3/config/locale/xpg7/c_locale.h
similarity index 67%
rename from libstdc++-v3/config/locale/dragonfly/c_locale.h
rename to libstdc++-v3/config/locale/xpg7/c_locale.h
index cf4281cebbf..5b5c7ba451d 100644
--- a/libstdc++-v3/config/locale/dragonfly/c_locale.h
+++ b/libstdc++-v3/config/locale/xpg7/c_locale.h
@@ -1,6 +1,6 @@
-// localization implementation details, DragonFly version -*- C++ -*-
+// localization implementation details, XPG7 version -*- C++ -*-
 
-// Copyright (C) 2001-2021 Free Software Foundation, Inc.
+// Copyright (C) 2021-2021 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
@@ -33,6 +33,7 @@
 
 // Written by Benjamin Kosnik <bkoz@redhat.com>
 // Modified for DragonFly by John Marino <gnugcc@marino.st>
+// Modified for XPG7 by Clément Chigot <clement.chigot@atos.net>
 
 #ifndef _GLIBCXX_CXX_LOCALE_H
 #define _GLIBCXX_CXX_LOCALE_H 1
@@ -40,7 +41,46 @@
 #pragma GCC system_header
 
 #include <clocale>
+#include <cstdlib>
+#ifdef _GLIBCXX_HAVE_XLOCALE_H
 #include <xlocale.h>
+#endif
+
+#define _GLIBCXX_C_LOCALE_XPG7 1
+
+// Assume that if strtof_l is missing then strtod_l and strold_l
+// are missing too.
+#ifndef _GLIBCXX_HAVE_STRTOF_L
+extern "C" inline
+float strtof_l (const char *__nptr, char **__endptr,
+		locale_t locale)
+{
+  locale_t __old = uselocale(locale);
+  float __res = strtof(__nptr, __endptr);
+  uselocale(__old);
+  return __res;
+}
+
+extern "C" inline
+double strtod_l (const char *__nptr, char **__endptr,
+		 locale_t locale)
+{
+  locale_t __old = uselocale(locale);
+  double __res = strtod(__nptr, __endptr);
+  uselocale(__old);
+  return __res;
+}
+
+extern "C" inline
+long double strtold_l (const char *__nptr, char **__endptr,
+		       locale_t locale)
+{
+  locale_t __old = uselocale(locale);
+  long double __res = strtold(__nptr, __endptr);
+  uselocale(__old);
+  return __res;
+}
+#endif
 
 #define _GLIBCXX_NUM_CATEGORIES 0
 
@@ -48,7 +88,11 @@ namespace std _GLIBCXX_VISIBILITY(default)
 {
 _GLIBCXX_BEGIN_NAMESPACE_VERSION
 
+#if defined(__DragonFly__) || defined(__FreeBSD__)
   typedef int*			__c_locale;
+#else
+  typedef locale_t			__c_locale;
+#endif
 
   // Convert numeric value of type double and long double to string and
   // return length of string.  If vsnprintf is available use it, otherwise
diff --git a/libstdc++-v3/config/locale/dragonfly/codecvt_members.cc b/libstdc++-v3/config/locale/xpg7/codecvt_members.cc
similarity index 98%
rename from libstdc++-v3/config/locale/dragonfly/codecvt_members.cc
rename to libstdc++-v3/config/locale/xpg7/codecvt_members.cc
index 11cbcdae59f..178966f0fdb 100644
--- a/libstdc++-v3/config/locale/dragonfly/codecvt_members.cc
+++ b/libstdc++-v3/config/locale/xpg7/codecvt_members.cc
@@ -1,6 +1,6 @@
-// std::codecvt implementation details, DragonFly version -*- C++ -*-
+// std::codecvt implementation details, XPG7 version -*- C++ -*-
 
-// Copyright (C) 2015-2021 Free Software Foundation, Inc.
+// Copyright (C) 2021-2021 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
diff --git a/libstdc++-v3/config/locale/dragonfly/collate_members.cc b/libstdc++-v3/config/locale/xpg7/collate_members.cc
similarity index 94%
rename from libstdc++-v3/config/locale/dragonfly/collate_members.cc
rename to libstdc++-v3/config/locale/xpg7/collate_members.cc
index 64c7d864a61..605b8a42c08 100644
--- a/libstdc++-v3/config/locale/dragonfly/collate_members.cc
+++ b/libstdc++-v3/config/locale/xpg7/collate_members.cc
@@ -1,6 +1,6 @@
-// std::collate implementation details, DragonFly version -*- C++ -*-
+// std::collate implementation details, XPG7 version -*- C++ -*-
 
-// Copyright (C) 2015-2021 Free Software Foundation, Inc.
+// Copyright (C) 2021-2021 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
diff --git a/libstdc++-v3/config/locale/dragonfly/ctype_members.cc b/libstdc++-v3/config/locale/xpg7/ctype_members.cc
similarity index 77%
rename from libstdc++-v3/config/locale/dragonfly/ctype_members.cc
rename to libstdc++-v3/config/locale/xpg7/ctype_members.cc
index 420cb51e07a..d9c1e0f8681 100644
--- a/libstdc++-v3/config/locale/dragonfly/ctype_members.cc
+++ b/libstdc++-v3/config/locale/xpg7/ctype_members.cc
@@ -1,6 +1,6 @@
-// std::ctype implementation details, DragonFly version -*- C++ -*-
+// std::ctype implementation details, XPG7 version -*- C++ -*-
 
-// Copyright (C) 2014-2021 Free Software Foundation, Inc.
+// Copyright (C) 2021-2021 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
@@ -28,13 +28,18 @@
 
 // Written by Benjamin Kosnik <bkoz@redhat.com>
 // Modified for DragonFly by John Marino <gnugcc@marino.st>
+// Modified for XPG7 by Clément Chigot <clement.chigot@atos.net>
 
 #include <locale>
 #include <cstring>
 #include <cstdio>
 
 #ifndef _ISbit
+#if __BYTE_ORDER__ == __ORDER_LITTLE_ENDIAN__
 #define _ISbit(bit) ((bit) < 8 ? ((1 << (bit)) << 8) : ((1 << (bit)) >> 8))
+#else
+#define _ISbit(bit) (1 << bit)
+#endif
 #endif
 
 namespace std _GLIBCXX_VISIBILITY(default)
@@ -114,8 +119,8 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
   {
     while (__lo < __hi)
       {
-        *__lo = towupper_l(*__lo, (locale_t)_M_c_locale_ctype);
-        ++__lo;
+	*__lo = towupper_l(*__lo, (locale_t)_M_c_locale_ctype);
+	++__lo;
       }
     return __hi;
   }
@@ -129,12 +134,64 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
   {
     while (__lo < __hi)
       {
-        *__lo = towlower_l(*__lo, (locale_t)_M_c_locale_ctype);
-        ++__lo;
+	*__lo = towlower_l(*__lo, (locale_t)_M_c_locale_ctype);
+	++__lo;
+      }
+    return __hi;
+  }
+
+#if !defined(__DragonFly__) && !defined(__FreeBSD__)
+  bool
+  ctype<wchar_t>::
+  do_is(mask __m, char_type __c) const
+  {
+    bool __ret = false;
+    const size_t __bitmasksize = 15;
+    for (size_t __bitcur = 0; __bitcur <= __bitmasksize; ++__bitcur)
+      if (__m & _M_bit[__bitcur]
+	  && iswctype_l(__c, _M_wmask[__bitcur], (locale_t)_M_c_locale_ctype))
+	{
+	  __ret = true;
+	  break;
+	}
+    return __ret;
+  }
+
+  const wchar_t*
+  ctype<wchar_t>::
+  do_is(const wchar_t* __lo, const wchar_t* __hi, mask* __vec) const
+  {
+    for (;__lo < __hi; ++__vec, ++__lo)
+      {
+	const size_t __bitmasksize = 15;
+	mask __m = 0;
+	for (size_t __bitcur = 0; __bitcur <= __bitmasksize; ++__bitcur)
+	  if (iswctype_l(*__lo, _M_wmask[__bitcur], (locale_t)_M_c_locale_ctype))
+	    __m |= _M_bit[__bitcur];
+	*__vec = __m;
       }
     return __hi;
   }
 
+  const wchar_t*
+  ctype<wchar_t>::
+  do_scan_is(mask __m, const wchar_t* __lo, const wchar_t* __hi) const
+  {
+    while (__lo < __hi && !this->do_is(__m, *__lo))
+      ++__lo;
+    return __lo;
+  }
+
+  const wchar_t*
+  ctype<wchar_t>::
+  do_scan_not(mask __m, const char_type* __lo, const char_type* __hi) const
+  {
+    while (__lo < __hi && this->do_is(__m, *__lo) != 0)
+      ++__lo;
+    return __lo;
+  }
+#endif
+
   wchar_t
   ctype<wchar_t>::
   do_widen(char __c) const
@@ -217,7 +274,7 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
 	 __j < sizeof(_M_widen) / sizeof(wint_t); ++__j)
       _M_widen[__j] = btowc(__j);
 
-    for (size_t __k = 0; __k <= 11; ++__k)
+    for (size_t __k = 0; __k <= 15; ++__k)
       {
 	_M_bit[__k] = static_cast<mask>(_ISbit(__k));
 	_M_wmask[__k] = _M_convert_to_wmask(_M_bit[__k]);
diff --git a/libstdc++-v3/config/locale/dragonfly/monetary_members.cc b/libstdc++-v3/config/locale/xpg7/monetary_members.cc
similarity index 95%
rename from libstdc++-v3/config/locale/dragonfly/monetary_members.cc
rename to libstdc++-v3/config/locale/xpg7/monetary_members.cc
index e1decc61cbf..0ef52de0990 100644
--- a/libstdc++-v3/config/locale/dragonfly/monetary_members.cc
+++ b/libstdc++-v3/config/locale/xpg7/monetary_members.cc
@@ -1,6 +1,6 @@
-// std::moneypunct implementation details, DragonFly version -*- C++ -*-
+// std::moneypunct implementation details, XPG7 version -*- C++ -*-
 
-// Copyright (C) 2015-2021 Free Software Foundation, Inc.
+// Copyright (C) 2021-2021 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
@@ -28,10 +28,17 @@
 
 // Written by Benjamin Kosnik <bkoz@redhat.com>
 // Modified for DragonFly by John Marino <gnugcc@marino.st>
+// Modified for XPG7 by Clément Chigot <clement.chigot@atos.net>
 
+// Solaris 11.4 doesn't make C99 members of struct lconv visible for C++11
+// without this.
+#define _LCONV_C99
 #include <locale>
 #include <cstring>
+
+#ifdef _GLIBCXX_HAVE_XLOCALE_H
 #include <xlocale.h>
+#endif
 
 namespace std _GLIBCXX_VISIBILITY(default)
 {
@@ -241,7 +248,12 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
       else
 	{
 	  // Named locale.
+#ifdef _GLIBCXX_HAVE_LOCALECONV_L
 	  lconv* lc = localeconv_l((locale_t) __cloc);
+#else
+	  __c_locale __old = uselocale(__cloc);
+	  lconv* lc = localeconv();
+#endif
 
 	  // Check for NULL, which implies no fractional digits.
 	  if (lc->mon_decimal_point == NULL ||
@@ -348,6 +360,9 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
 	      delete [] __group;
 	      delete [] __ps;
 	      delete [] __ns;
+#ifndef _GLIBCXX_HAVE_LOCALECONV_L
+	      uselocale(__old);
+#endif
 	      __throw_exception_again;
 	    }
 
@@ -360,6 +375,9 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
 	  char __nspace = lc->int_n_sep_by_space;
 	  _M_data->_M_neg_format = _S_construct_pattern(__nprecedes, __nspace,
 							__nposn);
+#ifndef _GLIBCXX_HAVE_LOCALECONV_L
+	  uselocale(__old);
+#endif
 	}
     }
 
@@ -395,7 +413,12 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
       else
 	{
 	  // Named locale.
+#ifdef _GLIBCXX_HAVE_LOCALECONV_L
 	  lconv* lc = localeconv_l((locale_t) __cloc);
+#else
+	  __c_locale __old = uselocale(__cloc);
+	  lconv* lc = localeconv();
+#endif
 
 	  // Check for NULL, which implies no fractional digits.
 	  if (lc->mon_decimal_point == NULL ||
@@ -502,6 +525,9 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
 	      delete [] __group;
 	      delete [] __ps;
 	      delete [] __ns;
+#ifndef _GLIBCXX_HAVE_LOCALECONV_L
+	      uselocale(__old);
+#endif
 	      __throw_exception_again;
 	    }
 
@@ -514,6 +540,9 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
 	  char __nspace = lc->n_sep_by_space;
 	  _M_data->_M_neg_format = _S_construct_pattern(__nprecedes, __nspace,
 							__nposn);
+#ifndef _GLIBCXX_HAVE_LOCALECONV_L
+	  uselocale(__old);
+#endif
 	}
     }
 
@@ -581,9 +610,14 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
 	}
       else
 	{
-	  __c_locale __old = (__c_locale)uselocale((locale_t)__cloc);
 	  // Named locale.
+	  // uselocale is needed for mbsrtowcs.
+	  __c_locale __old = (__c_locale)uselocale((locale_t)__cloc);
+#ifdef _GLIBCXX_HAVE_LOCALECONV_L
 	  lconv* lc = localeconv_l((locale_t) __cloc);
+#else
+	  lconv* lc = localeconv();
+#endif
 
 	  // Check for NULL, which implies no fractional digits.
 	  if (lc->mon_decimal_point == NULL ||
@@ -741,9 +775,14 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
 	}
       else
 	{
-	  __c_locale __old = (__c_locale)uselocale((locale_t)__cloc);
 	  // Named locale.
+	  // uselocale is needed for mbsrtowcs.
+	  __c_locale __old = (__c_locale)uselocale((locale_t)__cloc);
+#ifdef _GLIBCXX_HAVE_LOCALECONV_L
 	  lconv* lc = localeconv_l((locale_t) __cloc);
+#else
+	  lconv* lc = localeconv();
+#endif
 
 	  // Check for NULL, which implies no fractional digits.
 	  if (lc->mon_decimal_point == NULL ||
diff --git a/libstdc++-v3/config/locale/dragonfly/numeric_members.cc b/libstdc++-v3/config/locale/xpg7/numeric_members.cc
similarity index 89%
rename from libstdc++-v3/config/locale/dragonfly/numeric_members.cc
rename to libstdc++-v3/config/locale/xpg7/numeric_members.cc
index cac6fe8c710..26432c13c1b 100644
--- a/libstdc++-v3/config/locale/dragonfly/numeric_members.cc
+++ b/libstdc++-v3/config/locale/xpg7/numeric_members.cc
@@ -1,6 +1,6 @@
-// std::numpunct implementation details, DragonFly version -*- C++ -*-
+// std::numpunct implementation details, XPG7 version -*- C++ -*-
 
-// Copyright (C) 2015-2021 Free Software Foundation, Inc.
+// Copyright (C) 2021-2021 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
@@ -28,10 +28,14 @@
 
 // Written by Benjamin Kosnik <bkoz@redhat.com>
 // Modified for DragonFly by John Marino <gnugcc@marino.st>
+// Modified for XPG7 by Clément Chigot <clement.chigot@atos.net>
 
 #include <locale>
 #include <cstring>
+
+#ifdef _GLIBCXX_HAVE_XLOCALE_H
 #include <xlocale.h>
+#endif
 
 namespace std _GLIBCXX_VISIBILITY(default)
 {
@@ -63,7 +67,12 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
       else
 	{
 	  // Named locale.
+#ifdef _GLIBCXX_HAVE_LOCALECONV_L
 	  lconv* lc = localeconv_l((locale_t) __cloc);
+#else
+	  __c_locale __old = uselocale(__cloc);
+	  lconv* lc = localeconv();
+#endif
 
 	  // Decimal point should always be defined, but check null anyway
 	  if (lc->decimal_point == NULL)
@@ -103,6 +112,9 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
 		    {
 		      delete _M_data;
 		      _M_data = 0;
+#ifndef _GLIBCXX_HAVE_LOCALECONV_L
+		      uselocale(__old);
+#endif
 		      __throw_exception_again;
 		    }
 		}
@@ -113,6 +125,9 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
 		}
 	      _M_data->_M_grouping_size = __len;
 	    }
+#ifndef _GLIBCXX_HAVE_LOCALECONV_L
+	  uselocale(__old);
+#endif
 	}
 
       // NB: There is no way to extact this info from posix locales.
@@ -162,7 +177,12 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
       else
 	{
 	  // Named locale.
+#ifdef _GLIBCXX_HAVE_LOCALECONV_L
 	  lconv* lc = localeconv_l((locale_t) __cloc);
+#else
+	  __c_locale __old = uselocale(__cloc);
+	  lconv* lc = localeconv();
+#endif
 
 	  // Decimal point should always be defined, but check null anyway
 	  if (lc->decimal_point == NULL)
@@ -201,6 +221,9 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
 		    {
 		      delete _M_data;
 		      _M_data = 0;
+#ifndef _GLIBCXX_HAVE_LOCALECONV_L
+		      uselocale(__old);
+#endif
 		      __throw_exception_again;
 		    }
 		}
@@ -211,6 +234,9 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
 		}
 	      _M_data->_M_grouping_size = __len;
 	    }
+#ifndef _GLIBCXX_HAVE_LOCALECONV_L
+	  uselocale(__old);
+#endif
 	}
 
       // NB: There is no way to extact this info from posix locales.
diff --git a/libstdc++-v3/config/locale/dragonfly/time_members.cc b/libstdc++-v3/config/locale/xpg7/time_members.cc
similarity index 92%
rename from libstdc++-v3/config/locale/dragonfly/time_members.cc
rename to libstdc++-v3/config/locale/xpg7/time_members.cc
index c8b621a323f..17bdb3808d9 100644
--- a/libstdc++-v3/config/locale/dragonfly/time_members.cc
+++ b/libstdc++-v3/config/locale/xpg7/time_members.cc
@@ -1,6 +1,6 @@
-// std::time_get, std::time_put implementation, DragonFly version -*- C++ -*-
+// std::time_get, std::time_put implementation, AIX version -*- C++ -*-
 
-// Copyright (C) 2001-2021 Free Software Foundation, Inc.
+// Copyright (C) 2021-2021 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
@@ -29,13 +29,17 @@
 
 // Written by Benjamin Kosnik <bkoz@redhat.com>
 // Modified for DragonFly by John Marino <gnugcc@marino.st>
+// Modified for XPG7 by Clément Chigot <clement.chigot@atos.net>
 
 #include <locale>
 #include <ctime>
 #include <cwchar>
 #include <stdlib.h>
 #include <langinfo.h>
+
+#ifdef _GLIBCXX_HAVE_XLOCALE_H
 #include <xlocale.h>
+#endif
 
 namespace std _GLIBCXX_VISIBILITY(default)
 {
@@ -47,8 +51,14 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
     _M_put(char* __s, size_t __maxlen, const char* __format,
 	   const tm* __tm) const throw()
     {
+#ifdef _GLIBCXX_HAVE_STRFTIME_L
       const size_t __len = strftime_l(__s, __maxlen, __format, __tm,
 				      (locale_t)_M_c_locale_timepunct);
+#else
+      __c_locale __old = uselocale(_M_c_locale_timepunct);
+      const size_t __len = strftime(__s, __maxlen, __format, __tm);
+      uselocale(__old);
+#endif
       // Make sure __s is null terminated.
       if (__len == 0)
 	__s[0] = '\0';
@@ -196,15 +206,29 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
     _M_put(wchar_t* __s, size_t __maxlen, const wchar_t* __format,
 	   const tm* __tm) const throw()
     {
+#ifdef _GLIBCXX_HAVE_WCSFTIME_L
       const size_t __len = wcsftime_l(__s, __maxlen, __format, __tm,
 				      (locale_t)_M_c_locale_timepunct);
+#else
+      __c_locale __old = uselocale(_M_c_locale_timepunct);
+      const size_t __len = wcsftime(__s, __maxlen, __format, __tm);
+      uselocale(__old);
+#endif
       // Make sure __s is null terminated.
       if (__len == 0)
 	__s[0] = L'\0';
     }
 
+#ifdef _GLIBCXX_HAVE_MBSTOWCS_L
+#define MBSTOWCS_L(WCSTRING, STRING, NUMBER, LOCALE)	\
+  mbstowcs_l (WCSTRING, STRING, NUMBER, LOCALE);
+#else
+  // "uselocale" must be called before using this macro.
+#define MBSTOWCS_L(WCSTRING, STRING, NUMBER, LOCALE)	\
+  mbstowcs (WCSTRING, STRING, NUMBER);
+#endif
 #define WIDE_LANGINFO(M,FMT) \
-	fmtlen = mbstowcs_l (holder, nl_langinfo_l(FMT, (locale_t)__cloc), \
+	fmtlen = MBSTOWCS_L (holder, nl_langinfo_l(FMT, (locale_t)__cloc), \
 		128, (locale_t)__cloc); \
 	langstring = new wchar_t[fmtlen + 1]; \
 	wcsncpy (langstring, holder, fmtlen); \
@@ -281,6 +305,9 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
 	}
       else
 	{
+#ifndef _GLIBCXX_HAVE_MBSTOWCS_L
+	  __c_locale __old = uselocale(__cloc);
+#endif
 	  wchar_t *langstring = 0;
 	  wchar_t holder[128];
 	  size_t fmtlen;
@@ -342,6 +369,9 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
 	  WIDE_LANGINFO(_M_amonth10, ABMON_10)
 	  WIDE_LANGINFO(_M_amonth11, ABMON_11)
 	  WIDE_LANGINFO(_M_amonth12, ABMON_12)
+#ifndef _GLIBCXX_HAVE_MBSTOWCS_L
+	  uselocale(__old);
+#endif
 	}
     }
 
diff --git a/libstdc++-v3/config/locale/dragonfly/time_members.h b/libstdc++-v3/config/locale/xpg7/time_members.h
similarity index 95%
rename from libstdc++-v3/config/locale/dragonfly/time_members.h
rename to libstdc++-v3/config/locale/xpg7/time_members.h
index 04b7e995d6f..74763df0c40 100644
--- a/libstdc++-v3/config/locale/dragonfly/time_members.h
+++ b/libstdc++-v3/config/locale/xpg7/time_members.h
@@ -1,6 +1,6 @@
-// std::time_get, std::time_put implementation, DragonFly version -*- C++ -*-
+// std::time_get, std::time_put implementation, XPG7 version -*- C++ -*-
 
-// Copyright (C) 2015-2021 Free Software Foundation, Inc.
+// Copyright (C) 2021-2021 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
diff --git a/libstdc++-v3/config/os/aix/ctype_configure_char.cc b/libstdc++-v3/config/os/aix/ctype_configure_char.cc
index b12c0bd435c..870417cd778 100644
--- a/libstdc++-v3/config/os/aix/ctype_configure_char.cc
+++ b/libstdc++-v3/config/os/aix/ctype_configure_char.cc
@@ -42,28 +42,83 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
   ctype<char>::classic_table() throw()
   { return 0; }
 
+#if _GLIBCXX_C_LOCALE_IEEE_2008
+  ctype<char>::ctype(__c_locale __cloc, const mask* __table, bool __del,
+		     size_t __refs)
+    : facet(__refs), _M_c_locale_ctype(_S_clone_c_locale(__cloc)),
+    _M_del(__table != 0 && __del),
+    _M_toupper(NULL), _M_tolower(NULL),
+    _M_table(__table ? __table : classic_table()),
+    _M_widen_ok(0), _M_narrow_ok(0)
+    {
+      memset(_M_widen, 0, sizeof(_M_widen));
+      memset(_M_narrow, 0, sizeof(_M_narrow));
+    }
+#else
   ctype<char>::ctype(__c_locale, const mask* __table, bool __del,
 		     size_t __refs)
-  : facet(__refs), _M_del(__table != 0 && __del),
+  : facet(__refs), _M_c_locale_ctype(_S_get_c_locale()),
+  _M_del(__table != 0 && __del),
   _M_toupper(NULL), _M_tolower(NULL),
-  _M_table(__table ? __table : classic_table())
+  _M_table(__table ? __table : classic_table()),
+  _M_widen_ok(0), _M_narrow_ok(0)
   {
+    char* __old = setlocale(LC_CTYPE, NULL);
+    char* __sav = NULL;
+    if (strcmp(__old, "C"))
+      {
+	const size_t __len = strlen(__old) + 1;
+	__sav = new char[__len];
+	memcpy(__sav, __old, __len);
+	setlocale(LC_CTYPE, "C");
+      }
+    if (__sav)
+      {
+	setlocale(LC_CTYPE, __sav);
+	delete [] __sav;
+      }
     memset(_M_widen, 0, sizeof(_M_widen));
-    _M_widen_ok = 0;
     memset(_M_narrow, 0, sizeof(_M_narrow));
-    _M_narrow_ok = 0;
   }
+#endif
 
+#if _GLIBCXX_C_LOCALE_IEEE_2008
   ctype<char>::ctype(const mask* __table, bool __del, size_t __refs)
-  : facet(__refs), _M_del(__table != 0 && __del),
+    : facet(__refs), _M_c_locale_ctype(_S_get_c_locale()),
+    _M_del(__table != 0 && __del),
+    _M_toupper(NULL), _M_tolower(NULL),
+    _M_table(__table ? __table : classic_table()),
+    _M_widen_ok(0), _M_narrow_ok(0)
+    {
+      memset(_M_widen, 0, sizeof(_M_widen));
+      memset(_M_narrow, 0, sizeof(_M_narrow));
+    }
+#else
+  ctype<char>::ctype(const mask* __table, bool __del, size_t __refs)
+  : facet(__refs), _M_c_locale_ctype(_S_get_c_locale()),
+  _M_del(__table != 0 && __del),
   _M_toupper(NULL), _M_tolower(NULL),
-  _M_table(__table ? __table : classic_table())
+  _M_table(__table ? __table : classic_table()),
+  _M_widen_ok(0), _M_narrow_ok(0)
   {
+    char* __old = setlocale(LC_CTYPE, NULL);
+    char* __sav = NULL;
+    if (strcmp(__old, "C"))
+      {
+	const size_t __len = strlen(__old) + 1;
+	__sav = new char[__len];
+	memcpy(__sav, __old, __len);
+	setlocale(LC_CTYPE, "C");
+      }
+    if (__sav)
+      {
+	setlocale(LC_CTYPE, __sav);
+	delete [] __sav;
+      }
     memset(_M_widen, 0, sizeof(_M_widen));
-    _M_widen_ok = 0;
     memset(_M_narrow, 0, sizeof(_M_narrow));
-    _M_narrow_ok = 0;
   }
+#endif
 
   char
   ctype<char>::do_toupper(char __c) const
diff --git a/libstdc++-v3/config/os/gnu-linux/ctype_configure_char.cc b/libstdc++-v3/config/os/gnu-linux/ctype_configure_char.cc
index d6ab73175b8..991ca32d9d5 100644
--- a/libstdc++-v3/config/os/gnu-linux/ctype_configure_char.cc
+++ b/libstdc++-v3/config/os/gnu-linux/ctype_configure_char.cc
@@ -38,7 +38,7 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
 
 // Information as gleaned from /usr/include/ctype.h
 
-#if _GLIBCXX_C_LOCALE_GNU
+#if _GLIBCXX_C_LOCALE_GNU || _GLIBCXX_C_LOCALE_XPG7
   const ctype_base::mask*
   ctype<char>::classic_table() throw()
   { return _S_get_c_locale()->__ctype_b; }
@@ -70,7 +70,7 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
   }
 #endif
 
-#if _GLIBCXX_C_LOCALE_GNU
+#if _GLIBCXX_C_LOCALE_GNU || _GLIBCXX_C_LOCALE_XPG7
   ctype<char>::ctype(__c_locale __cloc, const mask* __table, bool __del,
 		     size_t __refs)
   : facet(__refs), _M_c_locale_ctype(_S_clone_c_locale(__cloc)),
diff --git a/libstdc++-v3/src/c++98/locale_init.cc b/libstdc++-v3/src/c++98/locale_init.cc
index 4bec50bf595..dcea799aeaf 100644
--- a/libstdc++-v3/src/c++98/locale_init.cc
+++ b/libstdc++-v3/src/c++98/locale_init.cc
@@ -296,7 +296,19 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
       _S_global = __other._M_impl;
       const string __other_name = __other.name();
       if (__other_name != "*")
+#ifdef _GLIBCXX_C_LOCALE_GNU
 	setlocale(LC_ALL, __other_name.c_str());
+#else
+        {
+	  // In general, passing "LC_CTYPE=C;LC_NUMERIQUE=C;..." as
+	  // argument to setlocale isn't allowed.
+	  if (__other._M_impl->_M_check_same_name())
+	    setlocale(LC_ALL, __other_name.c_str());
+	  else
+	    for (size_t __i = 0; __i < __other._S_categories_size; ++__i)
+	      setlocale(__i, __other._M_impl->_M_names[__i]);
+	}
+#endif
     }
 
     // Reference count sanity check: one reference removed for the
diff --git a/libstdc++-v3/testsuite/22_locale/codecvt/in/wchar_t/2.cc b/libstdc++-v3/testsuite/22_locale/codecvt/in/wchar_t/2.cc
index ea0c43a20fc..71e198843d2 100644
--- a/libstdc++-v3/testsuite/22_locale/codecvt/in/wchar_t/2.cc
+++ b/libstdc++-v3/testsuite/22_locale/codecvt/in/wchar_t/2.cc
@@ -1,4 +1,5 @@
 // { dg-require-namedlocale "en_US.ISO8859-1" }
+// { dg-excess-errors "wchar_t overflow" { xfail { wchar_t_char16_t_compatible } } }
 
 // 2003-02-06  Petur Runolfsson  <peturr02@ru.is>
 
diff --git a/libstdc++-v3/testsuite/22_locale/codecvt/in/wchar_t/3.cc b/libstdc++-v3/testsuite/22_locale/codecvt/in/wchar_t/3.cc
index 54206f8000a..ffde94108a1 100644
--- a/libstdc++-v3/testsuite/22_locale/codecvt/in/wchar_t/3.cc
+++ b/libstdc++-v3/testsuite/22_locale/codecvt/in/wchar_t/3.cc
@@ -1,4 +1,5 @@
 // { dg-require-namedlocale "en_US.ISO-8859-15" }
+// { dg-excess-errors "wchar_t overflow" { xfail { wchar_t_char16_t_compatible } } }
 
 // 2003-02-06  Petur Runolfsson  <peturr02@ru.is>
 
diff --git a/libstdc++-v3/testsuite/22_locale/codecvt/in/wchar_t/4.cc b/libstdc++-v3/testsuite/22_locale/codecvt/in/wchar_t/4.cc
index f27d667daf5..9193b598162 100644
--- a/libstdc++-v3/testsuite/22_locale/codecvt/in/wchar_t/4.cc
+++ b/libstdc++-v3/testsuite/22_locale/codecvt/in/wchar_t/4.cc
@@ -1,4 +1,5 @@
 // { dg-require-namedlocale "en_US.UTF-8" }
+// { dg-excess-errors "wchar_t overflow" { xfail { wchar_t_char16_t_compatible } } }
 
 // 2003-02-06  Petur Runolfsson  <peturr02@ru.is>
 
diff --git a/libstdc++-v3/testsuite/22_locale/codecvt/in/wchar_t/7.cc b/libstdc++-v3/testsuite/22_locale/codecvt/in/wchar_t/7.cc
index b5383af657c..e4b428c9fc6 100644
--- a/libstdc++-v3/testsuite/22_locale/codecvt/in/wchar_t/7.cc
+++ b/libstdc++-v3/testsuite/22_locale/codecvt/in/wchar_t/7.cc
@@ -1,4 +1,5 @@
 // { dg-require-namedlocale "en_US.UTF-8" }
+// { dg-excess-errors "wchar_t overflow" { xfail { wchar_t_char16_t_compatible } } }
 
 // 2003-02-06  Petur Runolfsson  <peturr02@ru.is>
 
diff --git a/libstdc++-v3/testsuite/22_locale/codecvt/in/wchar_t/8.cc b/libstdc++-v3/testsuite/22_locale/codecvt/in/wchar_t/8.cc
index 1d40a1723a4..ffbd856640b 100644
--- a/libstdc++-v3/testsuite/22_locale/codecvt/in/wchar_t/8.cc
+++ b/libstdc++-v3/testsuite/22_locale/codecvt/in/wchar_t/8.cc
@@ -1,4 +1,5 @@
 // { dg-require-namedlocale "en_US.UTF-8" }
+// { dg-excess-errors "wchar_t overflow" { xfail { wchar_t_char16_t_compatible } } }
 
 // 2003-02-06  Petur Runolfsson  <peturr02@ru.is>
 
diff --git a/libstdc++-v3/testsuite/22_locale/codecvt/in/wchar_t/9.cc b/libstdc++-v3/testsuite/22_locale/codecvt/in/wchar_t/9.cc
index 9801e085683..5e42a373547 100644
--- a/libstdc++-v3/testsuite/22_locale/codecvt/in/wchar_t/9.cc
+++ b/libstdc++-v3/testsuite/22_locale/codecvt/in/wchar_t/9.cc
@@ -1,4 +1,5 @@
 // { dg-require-namedlocale "en_US.UTF-8" }
+// { dg-excess-errors "wchar_t overflow" { xfail { wchar_t_char16_t_compatible } } }
 
 // 2003-02-06  Petur Runolfsson  <peturr02@ru.is>
 
diff --git a/libstdc++-v3/testsuite/22_locale/codecvt/length/wchar_t/4.cc b/libstdc++-v3/testsuite/22_locale/codecvt/length/wchar_t/4.cc
index f70d0fc6c58..01bf1a57917 100644
--- a/libstdc++-v3/testsuite/22_locale/codecvt/length/wchar_t/4.cc
+++ b/libstdc++-v3/testsuite/22_locale/codecvt/length/wchar_t/4.cc
@@ -1,4 +1,5 @@
 // { dg-require-namedlocale "en_US.UTF-8" }
+// { dg-excess-errors "wchar_t overflow" { xfail { wchar_t_char16_t_compatible } } }
 
 // 2003-02-06  Petur Runolfsson  <peturr02@ru.is>
 
diff --git a/libstdc++-v3/testsuite/22_locale/codecvt/out/wchar_t/4.cc b/libstdc++-v3/testsuite/22_locale/codecvt/out/wchar_t/4.cc
index 5cde0b66331..25dfa02b99d 100644
--- a/libstdc++-v3/testsuite/22_locale/codecvt/out/wchar_t/4.cc
+++ b/libstdc++-v3/testsuite/22_locale/codecvt/out/wchar_t/4.cc
@@ -1,4 +1,5 @@
 // { dg-require-namedlocale "en_US.UTF-8" }
+// { dg-excess-errors "wchar_t overflow" { xfail { wchar_t_char16_t_compatible } } }
 
 // 2003-02-06  Petur Runolfsson  <peturr02@ru.is>
 
diff --git a/libstdc++-v3/testsuite/22_locale/codecvt/unshift/wchar_t/4.cc b/libstdc++-v3/testsuite/22_locale/codecvt/unshift/wchar_t/4.cc
index 1e4ce5a8e3e..5d00a62c9a9 100644
--- a/libstdc++-v3/testsuite/22_locale/codecvt/unshift/wchar_t/4.cc
+++ b/libstdc++-v3/testsuite/22_locale/codecvt/unshift/wchar_t/4.cc
@@ -1,4 +1,5 @@
 // { dg-require-namedlocale "en_US.UTF-8" }
+// { dg-excess-errors "wchar_t overflow" { xfail { wchar_t_char16_t_compatible } } }
 
 // 2003-02-06  Petur Runolfsson  <peturr02@ru.is>
 
diff --git a/libstdc++-v3/testsuite/22_locale/ctype/is/wchar_t/2.cc b/libstdc++-v3/testsuite/22_locale/ctype/is/wchar_t/2.cc
index 5254c967018..1f2869e43f6 100644
--- a/libstdc++-v3/testsuite/22_locale/ctype/is/wchar_t/2.cc
+++ b/libstdc++-v3/testsuite/22_locale/ctype/is/wchar_t/2.cc
@@ -1,5 +1,5 @@
-// { dg-do run { xfail { ! { *-*-linux* *-*-gnu* } } } }
 // { dg-require-namedlocale "de_DE.ISO8859-15" }
+// { dg-require-localemodel "gnu xpg7" }
 
 // Copyright (C) 2000-2021 Free Software Foundation, Inc.
 //
diff --git a/libstdc++-v3/testsuite/22_locale/locale/cons/29217.cc b/libstdc++-v3/testsuite/22_locale/locale/cons/29217.cc
index a60e98eee76..0cfcc042b1c 100644
--- a/libstdc++-v3/testsuite/22_locale/locale/cons/29217.cc
+++ b/libstdc++-v3/testsuite/22_locale/locale/cons/29217.cc
@@ -1,4 +1,5 @@
 // { dg-require-namedlocale "en_US.UTF-8" }
+// { dg-require-localemodel "gnu" }
 
 // Copyright (C) 2006-2021 Free Software Foundation, Inc.
 //
diff --git a/libstdc++-v3/testsuite/22_locale/locale/cons/38368.cc b/libstdc++-v3/testsuite/22_locale/locale/cons/38368.cc
index 8d8f07f01cc..94fcfe3ac8b 100644
--- a/libstdc++-v3/testsuite/22_locale/locale/cons/38368.cc
+++ b/libstdc++-v3/testsuite/22_locale/locale/cons/38368.cc
@@ -1,4 +1,5 @@
 // { dg-require-namedlocale "en_US.ISO8859-1" }
+// { dg-require-localemodel "gnu" }
 
 // Copyright (C) 2008-2021 Free Software Foundation, Inc.
 //
diff --git a/libstdc++-v3/testsuite/22_locale/locale/cons/40184.cc b/libstdc++-v3/testsuite/22_locale/locale/cons/40184.cc
index 6a8eff8737b..d41ee12603b 100644
--- a/libstdc++-v3/testsuite/22_locale/locale/cons/40184.cc
+++ b/libstdc++-v3/testsuite/22_locale/locale/cons/40184.cc
@@ -1,4 +1,5 @@
 // { dg-require-namedlocale "ja_JP.eucJP" }
+// { dg-require-localemodel "gnu" }
 
 // Copyright (C) 2009-2021 Free Software Foundation, Inc.
 //
diff --git a/libstdc++-v3/testsuite/22_locale/locale/cons/5.cc b/libstdc++-v3/testsuite/22_locale/locale/cons/5.cc
index 66b939e2228..99abf566b81 100644
--- a/libstdc++-v3/testsuite/22_locale/locale/cons/5.cc
+++ b/libstdc++-v3/testsuite/22_locale/locale/cons/5.cc
@@ -3,6 +3,7 @@
 // { dg-require-namedlocale "es_MX" }
 // { dg-require-namedlocale "fr_FR" }
 // { dg-require-namedlocale "it_IT" }
+// { dg-require-localemodel "gnu" }
 
 // 2000-09-13 Benjamin Kosnik <bkoz@redhat.com>
 
diff --git a/libstdc++-v3/testsuite/22_locale/locale/global_locale_objects/14071.cc b/libstdc++-v3/testsuite/22_locale/locale/global_locale_objects/14071.cc
index ea3992b03f6..30d4a31a64c 100644
--- a/libstdc++-v3/testsuite/22_locale/locale/global_locale_objects/14071.cc
+++ b/libstdc++-v3/testsuite/22_locale/locale/global_locale_objects/14071.cc
@@ -1,5 +1,6 @@
 // { dg-require-namedlocale "is_IS.ISO8859-1" }
 // { dg-require-namedlocale "en_US.ISO8859-1" }
+// { dg-require-localemodel "gnu" }
 
 // 2004-02-09  Petur Runolfsson  <peturr02@ru.is>
 
diff --git a/libstdc++-v3/testsuite/22_locale/messages/13631.cc b/libstdc++-v3/testsuite/22_locale/messages/13631.cc
index b8ae3d4f140..2509bba0845 100644
--- a/libstdc++-v3/testsuite/22_locale/messages/13631.cc
+++ b/libstdc++-v3/testsuite/22_locale/messages/13631.cc
@@ -1,4 +1,5 @@
 // { dg-require-namedlocale "fr_FR.ISO8859-15" }
+// { dg-require-localemodel "gnu" }
 
 // Copyright (C) 2014-2021 Free Software Foundation, Inc.
 //
diff --git a/libstdc++-v3/testsuite/22_locale/messages/members/char/1.cc b/libstdc++-v3/testsuite/22_locale/messages/members/char/1.cc
index c4d972124f0..fdf4a0af018 100644
--- a/libstdc++-v3/testsuite/22_locale/messages/members/char/1.cc
+++ b/libstdc++-v3/testsuite/22_locale/messages/members/char/1.cc
@@ -1,4 +1,5 @@
 // { dg-require-namedlocale "de_DE.ISO8859-15" }
+// { dg-require-localemodel "gnu" }
 
 // 2001-07-17 Benjamin Kosnik  <bkoz@redhat.com>
 
diff --git a/libstdc++-v3/testsuite/22_locale/messages/members/char/2.cc b/libstdc++-v3/testsuite/22_locale/messages/members/char/2.cc
index 81d914f5c37..3345f43b342 100644
--- a/libstdc++-v3/testsuite/22_locale/messages/members/char/2.cc
+++ b/libstdc++-v3/testsuite/22_locale/messages/members/char/2.cc
@@ -1,4 +1,5 @@
 // { dg-require-namedlocale "fr_FR.ISO8859-15" }
+// { dg-require-localemodel "gnu" }
 
 // 2001-07-17 Benjamin Kosnik  <bkoz@redhat.com>
 
diff --git a/libstdc++-v3/testsuite/22_locale/messages/members/char/3.cc b/libstdc++-v3/testsuite/22_locale/messages/members/char/3.cc
index 5a503ef2c49..1d2f7ad3162 100644
--- a/libstdc++-v3/testsuite/22_locale/messages/members/char/3.cc
+++ b/libstdc++-v3/testsuite/22_locale/messages/members/char/3.cc
@@ -1,5 +1,6 @@
 // { dg-require-namedlocale "en_US.ISO8859-1" }
 // { dg-require-namedlocale "fr_FR.ISO8859-15" }
+// { dg-require-localemodel "gnu" }
 
 // 2001-07-17 Benjamin Kosnik  <bkoz@redhat.com>
 
diff --git a/libstdc++-v3/testsuite/22_locale/messages/members/char/wrapped_env.cc b/libstdc++-v3/testsuite/22_locale/messages/members/char/wrapped_env.cc
index 35e7f6c740c..976b4d9fbf6 100644
--- a/libstdc++-v3/testsuite/22_locale/messages/members/char/wrapped_env.cc
+++ b/libstdc++-v3/testsuite/22_locale/messages/members/char/wrapped_env.cc
@@ -1,6 +1,7 @@
 // { dg-require-namedlocale "de_DE.ISO8859-15" }
 // { dg-require-namedlocale "fr_FR.ISO8859-15" }
 // { dg-require-namedlocale "en_US.ISO8859-1" }
+// { dg-require-localemodel "gnu" }
 
 // 2001-08-15 Benjamin Kosnik  <bkoz@redhat.com>
 
diff --git a/libstdc++-v3/testsuite/22_locale/messages/members/char/wrapped_locale.cc b/libstdc++-v3/testsuite/22_locale/messages/members/char/wrapped_locale.cc
index a44bf1476b2..b143d33a4cc 100644
--- a/libstdc++-v3/testsuite/22_locale/messages/members/char/wrapped_locale.cc
+++ b/libstdc++-v3/testsuite/22_locale/messages/members/char/wrapped_locale.cc
@@ -2,6 +2,7 @@
 // { dg-require-namedlocale "de_DE.ISO8859-15" }
 // { dg-require-namedlocale "fr_FR.ISO8859-15" }
 // { dg-require-namedlocale "en_US.ISO8859-1" }
+// { dg-require-localemodel "gnu" }
 
 // 2001-08-15 Benjamin Kosnik  <bkoz@redhat.com>
 
diff --git a/libstdc++-v3/testsuite/22_locale/messages_byname/named_equivalence.cc b/libstdc++-v3/testsuite/22_locale/messages_byname/named_equivalence.cc
index 1006f20c996..fabf281d3e6 100644
--- a/libstdc++-v3/testsuite/22_locale/messages_byname/named_equivalence.cc
+++ b/libstdc++-v3/testsuite/22_locale/messages_byname/named_equivalence.cc
@@ -1,4 +1,5 @@
 // { dg-require-namedlocale "de_DE.ISO8859-15" }
+// { dg-require-localemodel "gnu" }
 
 // 2001-07-17 Benjamin Kosnik  <bkoz@redhat.com>
 
diff --git a/libstdc++-v3/testsuite/27_io/basic_filebuf/overflow/wchar_t/11305-1.cc b/libstdc++-v3/testsuite/27_io/basic_filebuf/overflow/wchar_t/11305-1.cc
index c747f7bfb02..46713cca118 100644
--- a/libstdc++-v3/testsuite/27_io/basic_filebuf/overflow/wchar_t/11305-1.cc
+++ b/libstdc++-v3/testsuite/27_io/basic_filebuf/overflow/wchar_t/11305-1.cc
@@ -1,4 +1,5 @@
 // { dg-require-namedlocale "en_US.UTF-8" }
+// { dg-excess-errors "wchar_t overflow" { xfail { wchar_t_char16_t_compatible } } }
 
 // Copyright (C) 2003-2021 Free Software Foundation, Inc.
 //
diff --git a/libstdc++-v3/testsuite/27_io/basic_filebuf/overflow/wchar_t/11305-2.cc b/libstdc++-v3/testsuite/27_io/basic_filebuf/overflow/wchar_t/11305-2.cc
index 76a387768fe..a3a4bbf5833 100644
--- a/libstdc++-v3/testsuite/27_io/basic_filebuf/overflow/wchar_t/11305-2.cc
+++ b/libstdc++-v3/testsuite/27_io/basic_filebuf/overflow/wchar_t/11305-2.cc
@@ -1,4 +1,5 @@
 // { dg-require-namedlocale "en_US.UTF-8" }
+// { dg-excess-errors "wchar_t overflow" { xfail { wchar_t_char16_t_compatible } } }
 
 // Copyright (C) 2003-2021 Free Software Foundation, Inc.
 //
diff --git a/libstdc++-v3/testsuite/27_io/basic_filebuf/overflow/wchar_t/11305-3.cc b/libstdc++-v3/testsuite/27_io/basic_filebuf/overflow/wchar_t/11305-3.cc
index 24d192921cb..2a314589714 100644
--- a/libstdc++-v3/testsuite/27_io/basic_filebuf/overflow/wchar_t/11305-3.cc
+++ b/libstdc++-v3/testsuite/27_io/basic_filebuf/overflow/wchar_t/11305-3.cc
@@ -1,4 +1,5 @@
 // { dg-require-namedlocale "en_US.UTF-8" }
+// { dg-excess-errors "wchar_t overflow" { xfail { wchar_t_char16_t_compatible } } }
 
 // Copyright (C) 2003-2021 Free Software Foundation, Inc.
 //
diff --git a/libstdc++-v3/testsuite/27_io/basic_filebuf/overflow/wchar_t/11305-4.cc b/libstdc++-v3/testsuite/27_io/basic_filebuf/overflow/wchar_t/11305-4.cc
index 2c0a2ab61db..71393bbd255 100644
--- a/libstdc++-v3/testsuite/27_io/basic_filebuf/overflow/wchar_t/11305-4.cc
+++ b/libstdc++-v3/testsuite/27_io/basic_filebuf/overflow/wchar_t/11305-4.cc
@@ -1,4 +1,5 @@
 // { dg-require-namedlocale "en_US.UTF-8" }
+// { dg-excess-errors "wchar_t overflow" { xfail { wchar_t_char16_t_compatible } } }
 
 // Copyright (C) 2003-2021 Free Software Foundation, Inc.
 //
diff --git a/libstdc++-v3/testsuite/lib/dg-options.exp b/libstdc++-v3/testsuite/lib/dg-options.exp
index 5160e4a72d1..c52663d30af 100644
--- a/libstdc++-v3/testsuite/lib/dg-options.exp
+++ b/libstdc++-v3/testsuite/lib/dg-options.exp
@@ -88,6 +88,15 @@ proc dg-require-namedlocale { args } {
     return
 }
 
+proc dg-require-localemodel { args } {
+    if { ![ check_v3_target_localemodel [lindex $args 1] ] } {
+	upvar dg-do-what dg-do-what
+	set dg-do-what [list [lindex ${dg-do-what} 0] "N" "P"]
+	return
+    }
+    return
+}
+
 proc dg-require-sharedlib { args } {
     if { ![ check_v3_target_sharedlib ] } {
 	upvar dg-do-what dg-do-what
diff --git a/libstdc++-v3/testsuite/lib/libstdc++.exp b/libstdc++-v3/testsuite/lib/libstdc++.exp
index 30a4345b14f..81ae8b091bb 100644
--- a/libstdc++-v3/testsuite/lib/libstdc++.exp
+++ b/libstdc++-v3/testsuite/lib/libstdc++.exp
@@ -904,6 +904,11 @@ proc check_v3_target_namedlocale { args } {
 	puts $f "    strcpy(result, name);"
 	puts $f "#if defined __FreeBSD__ || defined __DragonFly__ || defined __NetBSD__"
 	puts $f "    /* fall-through */"
+	puts $f "#elif defined _AIX"
+	puts $f "    char *p = strstr(result, \"ISO8859-15\");"
+	puts $f "    if (p) {"
+	puts $f "       strcpy(p, \"8859-15\");"
+	puts $f "    }"
 	puts $f "#else"
 	puts $f "    if (strstr(result, \"ISO8859-15\")) {"
 	puts $f "        strcat(result, \"@euro\");"
@@ -954,6 +959,32 @@ proc check_v3_target_namedlocale { args } {
     }]
 }
 
+# Return 1 if the locale model is implemented.
+proc check_v3_target_localemodel { args } {
+    set key "et_locale $args"
+    return [check_v3_target_prop_cached $key {
+	global cxxflags
+	global DEFAULT_CXXFLAGS
+
+	set cond "0"
+	if [string match "*gnu*" $args] {
+	    set cond " $cond || defined _GLIBCXX_C_LOCALE_GNU"
+	}
+	if [string match "*xpg7*" $args] {
+	    set cond " $cond || defined _GLIBCXX_C_LOCALE_XPG7"
+	}
+	
+	set code "
+	#include <bits/c++locale.h>
+	#if ! ($cond)
+	#error '$cond' is false
+	#endif
+	"
+	set flags "$cxxflags $DEFAULT_CXXFLAGS -Werror"
+	return [v3_try_preprocess name $code $flags]
+    }]
+}
+
 # Returns 1 if the tokens in CODE can be preprocessed successfully using FLAGS,
 # returns 0 otherwise.
 proc v3_try_preprocess { name code flags } {
diff --git a/libstdc++-v3/testsuite/util/testsuite_hooks.h b/libstdc++-v3/testsuite/util/testsuite_hooks.h
index b5e0767211a..a632f5f31f8 100644
--- a/libstdc++-v3/testsuite/util/testsuite_hooks.h
+++ b/libstdc++-v3/testsuite/util/testsuite_hooks.h
@@ -77,6 +77,9 @@
 
 #if defined __FreeBSD__ || defined __DragonFly__ || defined __NetBSD__
 # define ISO_8859(part,langTERR) #langTERR ".ISO8859-" #part
+#elif defined _AIX
+# define ISO_8859(part,langTERR) ((part) == 15 ?\
+         #langTERR ".8859-" #part : #langTERR ".ISO8859-" #part)
 #else
 # define ISO_8859(part,langTERR) ((part) == 15 ?\
          #langTERR ".ISO8859-" #part "@euro" : #langTERR ".ISO8859-" #part)
-- 
2.25.0


  reply	other threads:[~2021-01-27 12:53 UTC|newest]

Thread overview: 43+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
     [not found] <PA4PR02MB6686075C6C254E583B72BC2AEAAB0@PA4PR02MB6686.eurprd02.prod.outlook.com>
     [not found] ` <CAGWvny=XpcWGnyb=MWg5ziYSND7O1AnQ6-NAX811p1b5urH0YA@mail.gmail.com>
2021-01-11 15:35   ` Rainer Orth
2021-01-11 15:40     ` Jonathan Wakely
2021-01-11 15:56       ` CHIGOT, CLEMENT
2021-01-11 22:20         ` David Edelsohn
2021-01-12 15:14           ` CHIGOT, CLEMENT
2021-01-12 15:23             ` CHIGOT, CLEMENT
2021-01-12 15:25             ` Jonathan Wakely
2021-01-12 15:40               ` CHIGOT, CLEMENT
2021-01-12 15:44               ` David Edelsohn
2021-01-12 17:34                 ` Jonathan Wakely
2021-01-12 15:52               ` Rainer Orth
2021-01-12 17:41                 ` Rainer Orth
2021-01-12 17:44                   ` David Edelsohn
2021-01-12 19:58                     ` Rainer Orth
2021-01-13 11:57                       ` Rainer Orth
2021-01-13 12:23                         ` CHIGOT, CLEMENT
2021-01-13 12:31                           ` Rainer Orth
2021-01-13 12:41                             ` CHIGOT, CLEMENT
2021-01-13 12:47                               ` Rainer Orth
2021-01-21 12:48                                 ` CHIGOT, CLEMENT
2021-01-21 16:36                                   ` Rainer Orth
2021-01-22  9:57                                     ` CHIGOT, CLEMENT
2021-01-22 11:04                                       ` Rainer Orth
2021-01-22 11:29                                         ` Jonathan Wakely
2021-01-22 11:54                                           ` Rainer Orth
2021-01-22 12:23                                             ` CHIGOT, CLEMENT
2021-01-27 12:52                                               ` CHIGOT, CLEMENT [this message]
2021-01-27 14:26                                                 ` Rainer Orth
2021-01-27 14:44                                                   ` CHIGOT, CLEMENT
2021-01-28 10:09                                                     ` CHIGOT, CLEMENT
2021-05-17  9:17                                                       ` CHIGOT, CLEMENT
2021-06-08  6:59                                                         ` CHIGOT, CLEMENT
2021-06-09 14:50                                                           ` Rainer Orth
2021-07-21 12:00                                                             ` CHIGOT, CLEMENT
2021-07-21 13:04                                                               ` Rainer Orth
2021-07-22 12:09                                                                 ` CHIGOT, CLEMENT
2021-07-22 12:19                                                                   ` Rainer Orth
2021-07-30 14:02                                                                     ` CHIGOT, CLEMENT
2022-03-16  9:57                                                                       ` CHIGOT, CLEMENT
2021-01-22 11:12                                       ` Jonathan Wakely
2021-01-22 11:02                                     ` Jonathan Wakely
2021-01-12 16:00             ` Rainer Orth
     [not found]   ` <PA4PR02MB6686C2022E2B42D82DC9F269EAAB0@PA4PR02MB6686.eurprd02.prod.outlook.com>
2021-01-11 15:38     ` Rainer Orth

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=PA4PR02MB668659F4DE3E528F87A71C08EABB0@PA4PR02MB6686.eurprd02.prod.outlook.com \
    --to=clement.chigot@atos.net \
    --cc=dje.gcc@gmail.com \
    --cc=gcc-patches@gcc.gnu.org \
    --cc=jwakely@redhat.com \
    --cc=libstdc++@gcc.gnu.org \
    --cc=ro@CeBiTec.Uni-Bielefeld.DE \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for read-only IMAP folder(s) and NNTP newsgroup(s).