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. Tested x86_64-linux (Debian and Fedora), committed to trunk.
commit 2ea40fe56cde866c8a039e1b078882ead0851115 Author: Jonathan Wakely <jwak...@redhat.com> Date: Tue Aug 28 17:16:02 2018 +0100 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. 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 <sstream> #include <testsuite_hooks.h> +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 <locale.h> +#if __has_include(<langinfo.h>) +# include <langinfo.h> +#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();