[patch] change specific int128 -> generic intN
DJ Delorie
dj@redhat.com
Tue Jun 24 05:40:00 GMT 2014
> Since the test on __STRICT_ANSI__ is removed for all other uses, it would
> seem consistent to me to remove this one as well. Besides, you are already
> testing __GLIBCXX_USE_INT_N_0, which as far as I understand is protected
> by !flag_iso (with the exception of size_t).
Yup, I'll clean that up.
> > -#if !defined(__STRICT_ANSI__) && defined(_GLIBCXX_USE_INT128)
> > + // Conditionalizing on __STRICT_ANSI__ here will break any port that
> > + // uses one of these types for size_t.
> > +#if defined(__GLIBCXX_USE_INT_N_0)
> > template<>
> > - struct __is_integral_helper<__int128>
> > + struct __is_integral_helper<__GLIBCXX_TYPE_INT_N_0>
>
> Since the check for __STRICT_ANSI__ is removed, do we need to add
> __extension__ in front of __GLIBCXX_TYPE_INT_N_0 to avoid warning with
> -Wsystem-headers?
I copied the code from the __int128 case, and it explicitly bypassed
-Wsystem-headers... so we don't have that problem. Not sure if we
*should* have that problem, but we didn't before... I can only assume
that either (1) someone found it too difficult to get __extension__ to
work right in all those cases, or (2) it's a bug. Or (3) for some
reason they decided to do it that way anyway. I don't know.
> That seems complicated. You just need to call emit_support_tinfo_1 on
> each of the types (see how fundamentals is used at the end of the
> function), no need to put everything in the array.
Sure, *now* you tell me that :-)
I can do it either way, but it's the same overhead to iterate through
the types. Shoving it into the array is a bit more future-proof, but
keeping the index in sync is a bit of work if the table ever changes.
Your choice ;-)
More information about the Libstdc++
mailing list