From 9111b0838433457b28e72e646fbe04054cf64780 Mon Sep 17 00:00:00 2001 From: Jonathan Wakely Date: Wed, 29 Aug 2018 11:05:55 +0100 Subject: [PATCH] PR libstdc++/31413 fix test failure on Debian systems Debian uses a different D_FMT string for the zh_TW.UTF-8 locale, which caused this test to fail. Try to detect the Debian format and adjust the input being tested. PR libstdc++/31413 * testsuite/22_locale/time_get/get_date/wchar_t/4.cc: Check D_FMT string for alternative format. From-SVN: r263948 --- libstdc++-v3/ChangeLog | 6 +++++ .../22_locale/time_get/get_date/wchar_t/4.cc | 24 ++++++++++++++++++- 2 files changed, 29 insertions(+), 1 deletion(-) diff --git a/libstdc++-v3/ChangeLog b/libstdc++-v3/ChangeLog index b6ae0e5ffab..477784624b6 100644 --- a/libstdc++-v3/ChangeLog +++ b/libstdc++-v3/ChangeLog @@ -1,3 +1,9 @@ +2018-08-29 Jonathan Wakely + + PR libstdc++/31413 + * testsuite/22_locale/time_get/get_date/wchar_t/4.cc: Check D_FMT + string for alternative format. + 2018-08-28 Jonathan Wakely PR libstdc++/87116 diff --git a/libstdc++-v3/testsuite/22_locale/time_get/get_date/wchar_t/4.cc b/libstdc++-v3/testsuite/22_locale/time_get/get_date/wchar_t/4.cc index 21e51d250ad..a532c93d4a1 100644 --- a/libstdc++-v3/testsuite/22_locale/time_get/get_date/wchar_t/4.cc +++ b/libstdc++-v3/testsuite/22_locale/time_get/get_date/wchar_t/4.cc @@ -25,6 +25,8 @@ #include #include +static bool debian_date_format(); + void test01() { using namespace std; @@ -46,7 +48,7 @@ void test01() 0x5e74, L'1', L'2', 0x6708, L'1', L'7', 0x65e5 , 0x0 }; - iss.str(wstr); + iss.str(debian_date_format() ? wstr+2 : wstr); iterator_type is_it01(iss); tm time01; tim_get.get_date(is_it01, end, iss, errorstate, &time01); @@ -56,6 +58,26 @@ void test01() VERIFY( time01.tm_year == 103 ); } +#include +#if __has_include() +# include +#endif + +static bool debian_date_format() +{ +#ifdef D_FMT + if (setlocale(LC_TIME, "zh_TW.UTF-8") != NULL) + { + // See https://gcc.gnu.org/bugzilla/show_bug.cgi?id=31413 + // and https://gcc.gnu.org/bugzilla/show_bug.cgi?id=71641#c2 + if (*nl_langinfo(D_FMT) == '%') + return true; + setlocale(LC_TIME, "C"); + } +#endif + return false; +} + int main() { test01();