On Thu, 23 Feb 2023 at 17:55, Alexandre Oliva <ol...@adacore.com> wrote: > > On Feb 22, 2023, Alexandre Oliva <ol...@adacore.com> wrote: > > >> Just curious, why doesn't the pmf hack work on arm-vxworks7? > > > At first, I thought we were running into this just because we have to > > define __clang__ because of some vxworks system headers aimed at clang. > > But even as I tried to drop the #ifndef, the test still failed; I > > suspected it had to do with ARM's encoding of ptrmemfunc_vbit_in_delta, > > but I did not confirm that this was the case. > > It was much simpler than that: patching locale_facets_nonio.tcc did not > affect the code generated for the tests, even though the modified > definition was present in the preprocessed version, and the patch didn't > cause locale-inst.o to be rebuilt. > > > With a build from scratch, the following patchlet is enough for time_get > tests to pass for us, and I assume we'll have to keep on carrying such > local changes, but I wonder if it would make sense to submit a patch to > adjust all preprocessor tests for __clang__ in libstdc++ to also test > for __clang_major__. > > --- a/libstdc++-v3/include/bits/locale_facets_nonio.tcc > +++ b/libstdc++-v3/include/bits/locale_facets_nonio.tcc > @@ -1465,7 +1465,7 @@ _GLIBCXX_END_NAMESPACE_LDBL_OR_CXX11 > ctype<_CharT> const& __ctype = use_facet<ctype<_CharT> >(__loc); > __err = ios_base::goodbit; > bool __use_state = false; > -#if __GNUC__ >= 5 && !defined(__clang__) > +#if __GNUC__ >= 5 && !(defined(__clang__) && defined(__clang_major__)) > #pragma GCC diagnostic push > #pragma GCC diagnostic ignored "-Wpmf-conversions" > // Nasty hack. The C++ standard mandates that get invokes the do_get
Yeah, we can do that ... but it would be annoying. We can't rely on __GNUC__ because other compilers pretend to be GCC (and clang now allows you to fake any value of __GNUC__ with the -fgcc-version flag), and we can't use __clang__, because other compilers now pretend to be clang ... where does it end?