Comment 3 for bug 1276262

Revision history for this message
Tony Reix (tony-reix) wrote :

After debugging "some" more, it looks like the issue is in:

BOOST : libs/filesystem/src/path.cpp

  std::locale path::imbue(const std::locale& loc)
  {
    std::locale temp(path_locale); <<<<<<<<<<<<<<<<<<<<<<< line 918
    path_locale = loc;
    codecvt_facet_ptr =
      &std::use_facet<std::codecvt<wchar_t, char, std::mbstate_t> >(path_locale);
    return temp;
  }

At line 918, C++ try to do some initialization. This seems to imply to use field _M_impl of path_locale, which is 0x0.
It seems that no initialization of path_locale is done and thus _M_impl stay 0x0.

p path_locale
$23 = {static none = 0, static ctype = 1, static numeric = 2, static collate = 4, static time = 8, static monetary = 16, static messages = 32, static all = 63, _M_impl = 0x0,
  static _S_classic = 0x3fffb7fae0b8 <(anonymous namespace)::c_locale_impl>, static _S_global = 0x3fffb7fae0b8 <(anonymous namespace)::c_locale_impl>, static _S_categories =
    0x3fffb7f92cb8 <__gnu_cxx::category_names>, static _S_once = 0}

So, the question is: why path_locale has not been initialized ? and why this happens in PPC/LE and not elsewhere ?

Since, at line 868, we have:

 std::locale path_locale; // initialized by path::codecvt() below
  const std::codecvt<wchar_t, char, std::mbstate_t>* codecvt_facet_ptr; // ditto

which does not seems to do any initialization (gdb don't stop there). however, the comment says that path_locale is initialiazed by line below, where gdb does not stop.