Bug#891679: libc++: FTBFS with glibc 2.27: Failing Tests

Aurelien Jarno aurel32 at debian.org
Tue Feb 27 22:26:15 UTC 2018


Source: libc++
Version: 5.0.1-1
Severity: important
Tags: patch
User: debian-glibc at lists.debian.org
Usertags: 2.27

libc++ 5.0.1-1 fails to build with glibc 2.27 (2.27-0experimental0 from
experimental):

| ********************
| Failing Tests (5):
|     libc++ :: std/localization/locale.categories/category.monetary/locale.money.get/locale.money.get.members/get_long_double_fr_FR.pass.cpp
|     libc++ :: std/localization/locale.categories/category.monetary/locale.money.put/locale.money.put.members/put_long_double_fr_FR.pass.cpp
|     libc++ :: std/localization/locale.categories/category.monetary/locale.moneypunct.byname/decimal_point.pass.cpp
|     libc++ :: std/localization/locale.categories/category.monetary/locale.moneypunct.byname/thousands_sep.pass.cpp
|     libc++ :: std/localization/locale.categories/facet.numpunct/locale.numpunct.byname/thousands_sep.pass.cpp

A full build log is available there:
http://aws-logs.debian.net/2018/02/07/glibc-exp/libc++_5.0.1-1_unstable_glibc-exp.log

This failing tests are due to changes in the locales introduced in glibc
2.27, which causes the expected value to change. And more precisely the
following two changes:

| commit f11f2f6e145d6fc6b52f6b0733599f8b96595733
| Author: Mike FABIAN <mfabian at redhat.com>
| Date:   Tue Aug 29 13:39:18 2017 +0200
| 
|     Use “,” as mon_decimal_point for ru_RU and os_RU locales (follow CLDR)
| 
|             [BZ #13805]
|             * locales/ru_RU (LC_MONETARY): Use “,” for mon_decimal_point
|             (to agree with CLDR).
|             * locales/ru_RU (LC_NUMERIC): Write mon_decimal_point in ASCII
|             for readability.
|             * locales/os_RU (LC_MONETARY): Copy from ru_RU,
|             makes it agree with CLDR.

and

| commit 70a6707fa15e63591d991761be025e26e8d02bb6
| Author: Stanislav Brabec <sbrabec at suse.cz>
| Date:   Wed Nov 2 16:52:58 2016 +0100
| 
|     Locales: Use Unicode wise thousands separator
|     
|     Many languages use small gap as thousands separator.
|     
|     Thousands separator should not be a plain space, but a narrow space.
|     And additionally, it is not allowed to wrap line in the middle of the
|     number.
|     
|     Locale data were created in a deep age of 8-bit encodings, so most of
|     them use space (incorrect: it allows wrapping the line in the middle
|     of the number), or NBSP (better, but typographically incorrect: space
|     between groups is too wide).
|     
|     Now UNICODE is widely supported, so we should leave legacy characters
|     in favor of correct UNICODE character.
|     
|     UNICODE has a dedicated character for this purpose:
|     
|     NNBSP
|     U+202F NARROW NO-BREAK SPACE: a narrow form of a no-break space,
|     typically the width of a thin space or a mid space
|     
|     The NNBSP exists since Unicode 3.0.
|     
|     Use of NNBSP will prevent line wrapping in the midle of number and
|     improve readability of numbers.

I have attached a patch to do the corresponding changes on the libc++
side. Note however they are not conditional, meaning that they won't
work with glibc 2.26 or older. I guess the correct way to do that
depends on upstream.
-------------- next part --------------
--- libc++-5.0.1.orig/libcxx/test/std/localization/locale.categories/category.monetary/locale.money.get/locale.money.get.members/get_long_double_fr_FR.pass.cpp
+++ libc++-5.0.1/libcxx/test/std/localization/locale.categories/category.monetary/locale.money.get/locale.money.get.members/get_long_double_fr_FR.pass.cpp
@@ -84,7 +84,7 @@ int main()
             assert(ex == -1);
         }
         {   // positive
-            std::string v = "1 234 567,89 ";
+            std::string v = "1\177234\177567,89 ";
             typedef input_iterator<const char*> I;
             long double ex;
             std::ios_base::iostate err = std::ios_base::goodbit;
@@ -95,7 +95,7 @@ int main()
             assert(ex == 123456789);
         }
         {   // negative
-            std::string v = "-1 234 567,89";
+            std::string v = "-1\177234\177567,89";
             typedef input_iterator<const char*> I;
             long double ex;
             std::ios_base::iostate err = std::ios_base::goodbit;
@@ -164,7 +164,7 @@ int main()
             assert(ex == -1);
         }
         {   // positive, showbase
-            std::string v = "1 234 567,89 \u20ac";
+            std::string v = "1\177234\177567,89 \u20ac";
             typedef input_iterator<const char*> I;
             long double ex;
             std::ios_base::iostate err = std::ios_base::goodbit;
@@ -175,7 +175,7 @@ int main()
             assert(ex == 123456789);
         }
         {   // positive, showbase
-            std::string v = "1 234 567,89 \u20ac";
+            std::string v = "1\177234\177567,89 \u20ac";
             showbase(ios);
             typedef input_iterator<const char*> I;
             long double ex;
@@ -188,7 +188,7 @@ int main()
             noshowbase(ios);
         }
         {   // negative, showbase
-            std::string v = "-1 234 567,89 \u20ac";
+            std::string v = "-1\177234\177567,89 \u20ac";
             showbase(ios);
             typedef input_iterator<const char*> I;
             long double ex;
@@ -201,7 +201,7 @@ int main()
             noshowbase(ios);
         }
         {   // negative, showbase
-            std::string v = "1 234 567,89 EUR -";
+            std::string v = "1\177234\177567,89 EUR -";
             showbase(ios);
             typedef input_iterator<const char*> I;
             long double ex;
@@ -213,7 +213,7 @@ int main()
             noshowbase(ios);
         }
         {   // negative, showbase
-            std::string v = "1 234 567,89 EUR -";
+            std::string v = "1\177234\177567,89 EUR -";
             typedef input_iterator<const char*> I;
             long double ex;
             std::ios_base::iostate err = std::ios_base::goodbit;
@@ -251,7 +251,7 @@ int main()
             assert(ex == -1);
         }
         {   // positive
-            std::string v = "1 234 567,89 ";
+            std::string v = "1\177234\177567,89 ";
             typedef input_iterator<const char*> I;
             long double ex;
             std::ios_base::iostate err = std::ios_base::goodbit;
@@ -262,7 +262,7 @@ int main()
             assert(ex == 123456789);
         }
         {   // negative
-            std::string v = "-1 234 567,89";
+            std::string v = "-1\177234\177567,89";
             typedef input_iterator<const char*> I;
             long double ex;
             std::ios_base::iostate err = std::ios_base::goodbit;
@@ -331,7 +331,7 @@ int main()
             assert(ex == -1);
         }
         {   // positive, showbase
-            std::string v = "1 234 567,89 EUR";
+            std::string v = "1\177234\177567,89 EUR";
             typedef input_iterator<const char*> I;
             long double ex;
             std::ios_base::iostate err = std::ios_base::goodbit;
@@ -342,7 +342,7 @@ int main()
             assert(ex == 123456789);
         }
         {   // positive, showbase
-            std::string v = "1 234 567,89 EUR";
+            std::string v = "1\177234\177567,89 EUR";
             showbase(ios);
             typedef input_iterator<const char*> I;
             long double ex;
@@ -355,7 +355,7 @@ int main()
             noshowbase(ios);
         }
         {   // negative, showbase
-            std::string v = "-1 234 567,89 EUR";
+            std::string v = "-1\177234\177567,89 EUR";
             showbase(ios);
             typedef input_iterator<const char*> I;
             long double ex;
@@ -368,7 +368,7 @@ int main()
             noshowbase(ios);
         }
         {   // negative, showbase
-            std::string v = "1 234 567,89 Eu-";
+            std::string v = "1\177234\177567,89 Eu-";
             showbase(ios);
             typedef input_iterator<const char*> I;
             long double ex;
@@ -380,7 +380,7 @@ int main()
             noshowbase(ios);
         }
         {   // negative, showbase
-            std::string v = "1 234 567,89 Eu-";
+            std::string v = "1\177234\177567,89 Eu-";
             typedef input_iterator<const char*> I;
             long double ex;
             std::ios_base::iostate err = std::ios_base::goodbit;
@@ -417,7 +417,7 @@ int main()
             assert(ex == -1);
         }
         {   // positive
-            std::wstring v = L"1 234 567,89 ";
+            std::wstring v = L"1\u202f234\u202f567,89 ";
             typedef input_iterator<const wchar_t*> I;
             long double ex;
             std::ios_base::iostate err = std::ios_base::goodbit;
@@ -428,7 +428,7 @@ int main()
             assert(ex == 123456789);
         }
         {   // negative
-            std::wstring v = L"-1 234 567,89";
+            std::wstring v = L"-1\u202f234\u202f567,89";
             typedef input_iterator<const wchar_t*> I;
             long double ex;
             std::ios_base::iostate err = std::ios_base::goodbit;
@@ -497,7 +497,7 @@ int main()
             assert(ex == -1);
         }
         {   // positive, showbase
-            std::wstring v = L"1 234 567,89 \u20ac";
+            std::wstring v = L"1\u202f234\u202f567,89 \u20ac";
             typedef input_iterator<const wchar_t*> I;
             long double ex;
             std::ios_base::iostate err = std::ios_base::goodbit;
@@ -508,7 +508,7 @@ int main()
             assert(ex == 123456789);
         }
         {   // positive, showbase
-            std::wstring v = L"1 234 567,89 \u20ac";
+            std::wstring v = L"1\u202f234\u202f567,89 \u20ac";
             showbase(ios);
             typedef input_iterator<const wchar_t*> I;
             long double ex;
@@ -521,7 +521,7 @@ int main()
             noshowbase(ios);
         }
         {   // negative, showbase
-            std::wstring v = L"-1 234 567,89 \u20ac";
+            std::wstring v = L"-1\u202f234\u202f567,89 \u20ac";
             showbase(ios);
             typedef input_iterator<const wchar_t*> I;
             long double ex;
@@ -534,7 +534,7 @@ int main()
             noshowbase(ios);
         }
         {   // negative, showbase
-            std::wstring v = L"1 234 567,89 EUR -";
+            std::wstring v = L"1\u202f234\u202f567,89 EUR -";
             showbase(ios);
             typedef input_iterator<const wchar_t*> I;
             long double ex;
@@ -546,7 +546,7 @@ int main()
             noshowbase(ios);
         }
         {   // negative, showbase
-            std::wstring v = L"1 234 567,89 EUR -";
+            std::wstring v = L"1\u202f234\u202f567,89 EUR -";
             typedef input_iterator<const wchar_t*> I;
             long double ex;
             std::ios_base::iostate err = std::ios_base::goodbit;
@@ -583,7 +583,7 @@ int main()
             assert(ex == -1);
         }
         {   // positive
-            std::wstring v = L"1 234 567,89 ";
+            std::wstring v = L"1\u202f234\u202f567,89 ";
             typedef input_iterator<const wchar_t*> I;
             long double ex;
             std::ios_base::iostate err = std::ios_base::goodbit;
@@ -594,7 +594,7 @@ int main()
             assert(ex == 123456789);
         }
         {   // negative
-            std::wstring v = L"-1 234 567,89";
+            std::wstring v = L"-1\u202f234\u202f567,89";
             typedef input_iterator<const wchar_t*> I;
             long double ex;
             std::ios_base::iostate err = std::ios_base::goodbit;
@@ -663,7 +663,7 @@ int main()
             assert(ex == -1);
         }
         {   // positive, showbase
-            std::wstring v = L"1 234 567,89 EUR";
+            std::wstring v = L"1\u202f234\u202f567,89 EUR";
             typedef input_iterator<const wchar_t*> I;
             long double ex;
             std::ios_base::iostate err = std::ios_base::goodbit;
@@ -674,7 +674,7 @@ int main()
             assert(ex == 123456789);
         }
         {   // positive, showbase
-            std::wstring v = L"1 234 567,89 EUR";
+            std::wstring v = L"1\u202f234\u202f567,89 EUR";
             showbase(ios);
             typedef input_iterator<const wchar_t*> I;
             long double ex;
@@ -687,7 +687,7 @@ int main()
             noshowbase(ios);
         }
         {   // negative, showbase
-            std::wstring v = L"-1 234 567,89 EUR";
+            std::wstring v = L"-1\u202f234\u202f567,89 EUR";
             showbase(ios);
             typedef input_iterator<const wchar_t*> I;
             long double ex;
@@ -700,7 +700,7 @@ int main()
             noshowbase(ios);
         }
         {   // negative, showbase
-            std::wstring v = L"1 234 567,89 Eu-";
+            std::wstring v = L"1\u202f234\u202f567,89 Eu-";
             showbase(ios);
             typedef input_iterator<const wchar_t*> I;
             long double ex;
@@ -712,7 +712,7 @@ int main()
             noshowbase(ios);
         }
         {   // negative, showbase
-            std::wstring v = L"1 234 567,89 Eu-";
+            std::wstring v = L"1\u202f234\u202f567,89 Eu-";
             typedef input_iterator<const wchar_t*> I;
             long double ex;
             std::ios_base::iostate err = std::ios_base::goodbit;
--- libc++-5.0.1.orig/libcxx/test/std/localization/locale.categories/category.monetary/locale.money.put/locale.money.put.members/put_long_double_fr_FR.pass.cpp
+++ libc++-5.0.1/libcxx/test/std/localization/locale.categories/category.monetary/locale.money.put/locale.money.put.members/put_long_double_fr_FR.pass.cpp
@@ -83,7 +83,7 @@ int main()
         output_iterator<char*> iter = f.put(output_iterator<char*>(str),
                                             false, ios, '*', v);
         std::string ex(str, iter.base());
-        assert(ex == "1 234 567,89");
+        assert(ex == "1\177234\177567,89");
     }
     {   // negative
         long double v = -123456789;
@@ -91,7 +91,7 @@ int main()
         output_iterator<char*> iter = f.put(output_iterator<char*>(str),
                                             false, ios, '*', v);
         std::string ex(str, iter.base());
-        assert(ex == "-1 234 567,89");
+        assert(ex == "-1\177234\177567,89");
     }
     {   // zero, showbase
         long double v = 0;
@@ -118,7 +118,7 @@ int main()
         output_iterator<char*> iter = f.put(output_iterator<char*>(str),
                                             false, ios, '*', v);
         std::string ex(str, iter.base());
-        assert(ex == "1 234 567,89 \u20ac");
+        assert(ex == "1\177234\177567,89 \u20ac");
     }
     {   // negative, showbase
         long double v = -123456789;
@@ -127,7 +127,7 @@ int main()
         output_iterator<char*> iter = f.put(output_iterator<char*>(str),
                                             false, ios, '*', v);
         std::string ex(str, iter.base());
-        assert(ex == "-1 234 567,89 \u20ac");
+        assert(ex == "-1\177234\177567,89 \u20ac");
     }
     {   // negative, showbase, left
         long double v = -123456789;
@@ -138,7 +138,7 @@ int main()
         output_iterator<char*> iter = f.put(output_iterator<char*>(str),
                                             false, ios, ' ', v);
         std::string ex(str, iter.base());
-        assert(ex == "-1 234 567,89 \u20ac   ");
+        assert(ex == "-1\177234\177567,89 \u20ac   ");
         assert(ios.width() == 0);
     }
     {   // negative, showbase, internal
@@ -150,7 +150,7 @@ int main()
         output_iterator<char*> iter = f.put(output_iterator<char*>(str),
                                             false, ios, ' ', v);
         std::string ex(str, iter.base());
-        assert(ex == "-1 234 567,89    \u20ac");
+        assert(ex == "-1\177234\177567,89    \u20ac");
         assert(ios.width() == 0);
     }
     {   // negative, showbase, right
@@ -162,7 +162,7 @@ int main()
         output_iterator<char*> iter = f.put(output_iterator<char*>(str),
                                             false, ios, ' ', v);
         std::string ex(str, iter.base());
-        assert(ex == "   -1 234 567,89 \u20ac");
+        assert(ex == "   -1\177234\177567,89 \u20ac");
         assert(ios.width() == 0);
     }
 
@@ -191,7 +191,7 @@ int main()
         output_iterator<char*> iter = f.put(output_iterator<char*>(str),
                                             true, ios, '*', v);
         std::string ex(str, iter.base());
-        assert(ex == "1 234 567,89");
+        assert(ex == "1\177234\177567,89");
     }
     {   // negative
         long double v = -123456789;
@@ -199,7 +199,7 @@ int main()
         output_iterator<char*> iter = f.put(output_iterator<char*>(str),
                                             true, ios, '*', v);
         std::string ex(str, iter.base());
-        assert(ex == "-1 234 567,89");
+        assert(ex == "-1\177234\177567,89");
     }
     {   // zero, showbase
         long double v = 0;
@@ -226,7 +226,7 @@ int main()
         output_iterator<char*> iter = f.put(output_iterator<char*>(str),
                                             true, ios, '*', v);
         std::string ex(str, iter.base());
-        assert(ex == "1 234 567,89 EUR");
+        assert(ex == "1\177234\177567,89 EUR");
     }
     {   // negative, showbase
         long double v = -123456789;
@@ -235,7 +235,7 @@ int main()
         output_iterator<char*> iter = f.put(output_iterator<char*>(str),
                                             true, ios, '*', v);
         std::string ex(str, iter.base());
-        assert(ex == "-1 234 567,89 EUR");
+        assert(ex == "-1\177234\177567,89 EUR");
     }
     {   // negative, showbase, left
         long double v = -123456789;
@@ -246,7 +246,7 @@ int main()
         output_iterator<char*> iter = f.put(output_iterator<char*>(str),
                                             true, ios, ' ', v);
         std::string ex(str, iter.base());
-        assert(ex == "-1 234 567,89 EUR   ");
+        assert(ex == "-1\177234\177567,89 EUR   ");
         assert(ios.width() == 0);
     }
     {   // negative, showbase, internal
@@ -258,7 +258,7 @@ int main()
         output_iterator<char*> iter = f.put(output_iterator<char*>(str),
                                             true, ios, ' ', v);
         std::string ex(str, iter.base());
-        assert(ex == "-1 234 567,89    EUR");
+        assert(ex == "-1\177234\177567,89    EUR");
         assert(ios.width() == 0);
     }
     {   // negative, showbase, right
@@ -270,7 +270,7 @@ int main()
         output_iterator<char*> iter = f.put(output_iterator<char*>(str),
                                             true, ios, ' ', v);
         std::string ex(str, iter.base());
-        assert(ex == "   -1 234 567,89 EUR");
+        assert(ex == "   -1\177234\177567,89 EUR");
         assert(ios.width() == 0);
     }
 }
@@ -301,7 +301,7 @@ int main()
         output_iterator<wchar_t*> iter = f.put(output_iterator<wchar_t*>(str),
                                             false, ios, '*', v);
         std::wstring ex(str, iter.base());
-        assert(ex == L"1 234 567,89");
+        assert(ex == L"1\u202f234\u202f567,89");
     }
     {   // negative
         long double v = -123456789;
@@ -309,7 +309,7 @@ int main()
         output_iterator<wchar_t*> iter = f.put(output_iterator<wchar_t*>(str),
                                             false, ios, '*', v);
         std::wstring ex(str, iter.base());
-        assert(ex == L"-1 234 567,89");
+        assert(ex == L"-1\u202f234\u202f567,89");
     }
     {   // zero, showbase
         long double v = 0;
@@ -336,7 +336,7 @@ int main()
         output_iterator<wchar_t*> iter = f.put(output_iterator<wchar_t*>(str),
                                             false, ios, '*', v);
         std::wstring ex(str, iter.base());
-        assert(ex == L"1 234 567,89 \u20ac");
+        assert(ex == L"1\u202f234\u202f567,89 \u20ac");
     }
     {   // negative, showbase
         long double v = -123456789;
@@ -345,7 +345,7 @@ int main()
         output_iterator<wchar_t*> iter = f.put(output_iterator<wchar_t*>(str),
                                             false, ios, '*', v);
         std::wstring ex(str, iter.base());
-        assert(ex == L"-1 234 567,89 \u20ac");
+        assert(ex == L"-1\u202f234\u202f567,89 \u20ac");
     }
     {   // negative, showbase, left
         long double v = -123456789;
@@ -356,7 +356,7 @@ int main()
         output_iterator<wchar_t*> iter = f.put(output_iterator<wchar_t*>(str),
                                             false, ios, ' ', v);
         std::wstring ex(str, iter.base());
-        assert(ex == L"-1 234 567,89 \u20ac     ");
+        assert(ex == L"-1\u202f234\u202f567,89 \u20ac     ");
         assert(ios.width() == 0);
     }
     {   // negative, showbase, internal
@@ -368,7 +368,7 @@ int main()
         output_iterator<wchar_t*> iter = f.put(output_iterator<wchar_t*>(str),
                                             false, ios, ' ', v);
         std::wstring ex(str, iter.base());
-        assert(ex == L"-1 234 567,89      \u20ac");
+        assert(ex == L"-1\u202f234\u202f567,89      \u20ac");
         assert(ios.width() == 0);
     }
     {   // negative, showbase, right
@@ -380,7 +380,7 @@ int main()
         output_iterator<wchar_t*> iter = f.put(output_iterator<wchar_t*>(str),
                                             false, ios, ' ', v);
         std::wstring ex(str, iter.base());
-        assert(ex == L"     -1 234 567,89 \u20ac");
+        assert(ex == L"     -1\u202f234\u202f567,89 \u20ac");
         assert(ios.width() == 0);
     }
 
@@ -409,7 +409,7 @@ int main()
         output_iterator<wchar_t*> iter = f.put(output_iterator<wchar_t*>(str),
                                             true, ios, '*', v);
         std::wstring ex(str, iter.base());
-        assert(ex == L"1 234 567,89");
+        assert(ex == L"1\u202f234\u202f567,89");
     }
     {   // negative
         long double v = -123456789;
@@ -417,7 +417,7 @@ int main()
         output_iterator<wchar_t*> iter = f.put(output_iterator<wchar_t*>(str),
                                             true, ios, '*', v);
         std::wstring ex(str, iter.base());
-        assert(ex == L"-1 234 567,89");
+        assert(ex == L"-1\u202f234\u202f567,89");
     }
     {   // zero, showbase
         long double v = 0;
@@ -444,7 +444,7 @@ int main()
         output_iterator<wchar_t*> iter = f.put(output_iterator<wchar_t*>(str),
                                             true, ios, '*', v);
         std::wstring ex(str, iter.base());
-        assert(ex == L"1 234 567,89 EUR");
+        assert(ex == L"1\u202f234\u202f567,89 EUR");
     }
     {   // negative, showbase
         long double v = -123456789;
@@ -453,7 +453,7 @@ int main()
         output_iterator<wchar_t*> iter = f.put(output_iterator<wchar_t*>(str),
                                             true, ios, '*', v);
         std::wstring ex(str, iter.base());
-        assert(ex == L"-1 234 567,89 EUR");
+        assert(ex == L"-1\u202f234\u202f567,89 EUR");
     }
     {   // negative, showbase, left
         long double v = -123456789;
@@ -464,7 +464,7 @@ int main()
         output_iterator<wchar_t*> iter = f.put(output_iterator<wchar_t*>(str),
                                             true, ios, ' ', v);
         std::wstring ex(str, iter.base());
-        assert(ex == L"-1 234 567,89 EUR   ");
+        assert(ex == L"-1\u202f234\u202f567,89 EUR   ");
         assert(ios.width() == 0);
     }
     {   // negative, showbase, internal
@@ -476,7 +476,7 @@ int main()
         output_iterator<wchar_t*> iter = f.put(output_iterator<wchar_t*>(str),
                                             true, ios, ' ', v);
         std::wstring ex(str, iter.base());
-        assert(ex == L"-1 234 567,89    EUR");
+        assert(ex == L"-1\u202f234\u202f567,89    EUR");
         assert(ios.width() == 0);
     }
     {   // negative, showbase, right
@@ -488,7 +488,7 @@ int main()
         output_iterator<wchar_t*> iter = f.put(output_iterator<wchar_t*>(str),
                                             true, ios, ' ', v);
         std::wstring ex(str, iter.base());
-        assert(ex == L"   -1 234 567,89 EUR");
+        assert(ex == L"   -1\u202f234\u202f567,89 EUR");
         assert(ios.width() == 0);
     }
 }
--- libc++-5.0.1.orig/libcxx/test/std/localization/locale.categories/category.monetary/locale.moneypunct.byname/decimal_point.pass.cpp
+++ libc++-5.0.1/libcxx/test/std/localization/locale.categories/category.monetary/locale.moneypunct.byname/decimal_point.pass.cpp
@@ -109,29 +109,21 @@ int main()
         Fwt f(LOCALE_fr_FR_UTF_8, 1);
         assert(f.decimal_point() == L',');
     }
-// GLIBC 2.23 uses '.' as the decimal point while other C libraries use ','
-#ifndef TEST_HAS_GLIBC
-    const char sep = ',';
-    const wchar_t wsep = L',';
-#else
-    const char sep = '.';
-    const wchar_t wsep = L'.';
-#endif
     {
         Fnf f(LOCALE_ru_RU_UTF_8, 1);
-        assert(f.decimal_point() == sep);
+        assert(f.decimal_point() == ',');
     }
     {
         Fnt f(LOCALE_ru_RU_UTF_8, 1);
-        assert(f.decimal_point() == sep);
+        assert(f.decimal_point() == ',');
     }
     {
         Fwf f(LOCALE_ru_RU_UTF_8, 1);
-        assert(f.decimal_point() == wsep);
+        assert(f.decimal_point() == L',');
     }
     {
         Fwt f(LOCALE_ru_RU_UTF_8, 1);
-        assert(f.decimal_point() == wsep);
+        assert(f.decimal_point() == L',');
     }
 
     {
--- libc++-5.0.1.orig/libcxx/test/std/localization/locale.categories/category.monetary/locale.moneypunct.byname/thousands_sep.pass.cpp
+++ libc++-5.0.1/libcxx/test/std/localization/locale.categories/category.monetary/locale.moneypunct.byname/thousands_sep.pass.cpp
@@ -95,19 +95,19 @@ int main()
 
     {
         Fnf f(LOCALE_fr_FR_UTF_8, 1);
-        assert(f.thousands_sep() == ' ');
+        assert(f.thousands_sep() == '\177');
     }
     {
         Fnt f(LOCALE_fr_FR_UTF_8, 1);
-        assert(f.thousands_sep() == ' ');
+        assert(f.thousands_sep() == '\177');
     }
     {
         Fwf f(LOCALE_fr_FR_UTF_8, 1);
-        assert(f.thousands_sep() == L' ');
+        assert(f.thousands_sep() == L'\u202F');
     }
     {
         Fwt f(LOCALE_fr_FR_UTF_8, 1);
-        assert(f.thousands_sep() == L' ');
+        assert(f.thousands_sep() == L'\u202F');
     }
 // The below tests work around GLIBC's use of U00A0 as mon_thousands_sep
 // and U002E as mon_decimal_point.
@@ -119,8 +119,8 @@ int main()
 #else
     // FIXME libc++ specifically works around \u00A0 by translating it into
     // a regular space.
-    const char sep = ' ';
-    const wchar_t wsep = L'\u00A0';
+    const char sep = '\177';
+    const wchar_t wsep = L'\u202F';
 #endif
     {
         Fnf f(LOCALE_ru_RU_UTF_8, 1);
--- libc++-5.0.1.orig/libcxx/test/std/localization/locale.categories/facet.numpunct/locale.numpunct.byname/thousands_sep.pass.cpp
+++ libc++-5.0.1/libcxx/test/std/localization/locale.categories/facet.numpunct/locale.numpunct.byname/thousands_sep.pass.cpp
@@ -54,8 +54,8 @@ int main()
     {
         std::locale l(LOCALE_fr_FR_UTF_8);
 #if defined(TEST_HAS_GLIBC)
-        const char sep = ' ';
-        const wchar_t wsep = L' ';
+        const char sep = ',';
+        const wchar_t wsep = L'\u202F';
 #else
         const char sep = ',';
         const wchar_t wsep = L',';


More information about the Pkg-llvm-team mailing list