------- Comment #10 from dave at hiauly1 dot hia dot nrc dot ca 2007-04-02 03:36 ------- Subject: Re: FAIL: 22_locale/time_get/get_date/wchar_t/4.cc execution test
> ------- Comment #8 from pcarlini at suse dot de 2007-04-02 00:53 ------- > One last remark: when something having to do with named locales doesn't work, > often I find myself checking whether corresponding "C" code works. In this > case, if __format is wrong, which means apparently that > _M_data->_M_date_format > is wrong, I suggest preparing a plain "C" snippet equivalent to the code in > config/locale/gnu/time_members.cc which sets _M_data->_M_date_format, > something > like: > > loc = newlocale(1 << LC_ALL, __s, 0); > > union { char *__s; wchar_t *__w; } __u; > __u.__s = __nl_langinfo_l(_NL_WD_FMT, loc); > > const wchar_t* pp = __u.__w; Thanks for the tip. The following doesn't work on hppa but does on x86: #include <locale.h> #include <langinfo.h> #include <wchar.h> wchar_t * foo (void) { char *__s = "zh_TW"; wchar_t *pp; locale_t loc; union { char *__s; wchar_t *__w; } __u; loc = newlocale(1 << LC_ALL, __s, 0); __u.__s = nl_langinfo_l(_NL_WD_FMT, loc); pp = __u.__w; return pp; } int main () { wchar_t *pp; pp = foo (); return 0; } Displaying the return value from the call to foo yields (gdb) p ((wchar_t *)$ret0)[0] $1 = 37 So, I think the problem is in nl_langinfo_l. Dave -- http://gcc.gnu.org/bugzilla/show_bug.cgi?id=31413