> 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 ;-)

Reply via email to