--std vs __intN

Marc Glisse marc.glisse@inria.fr
Fri Jun 6 06:19:00 GMT 2014


On Thu, 5 Jun 2014, DJ Delorie wrote:

> Currently, __int128 is disabled if __STRICT_ANSI__ via --std.
>
> I'm working on making __int<N> generic within gcc, to support targets
> that have non-standard type sizes (msp430's pointer is 20 bits).  This
> means, for example, that size_t and sizeof(void*) may be one of these
> __int<N> types.
>
> This means if __int<N> is disabled via --std, most of the standard
> library breaks because the pointer type isn't listed in any of the
> headers' templates.
>
> If I *don't* disable __int<N> when --std says to, some of the
> testsuite tests - which test for that case - fail.
>
> What to do?

There have been discussions in the past about when to enable __int128 
support in the library. In my (non-maintainer) opinion, we should test 
__SIZEOF_INT128__ (or whatever similar macro you are going to introduce) 
so it is entirely up to the compiler to decide if __int128 will be 
available and the library just follows that decision. If the compiler 
allows using __int128, removing the std::abs overload doesn't help much. 
_GLIBCXX_USE_INT128 is not that relevant, at best it may indicate if rtti 
information is available for __int128 in libstdc++.{a,so}. Note that the 
standard allows extended integer types (even if we don't call __int128 
that for various reasons), it isn't that much of an extension. => fix the 
testsuite (and if necessary use __extension__ to avoid warnings).

Otherwise, you are going to need yet another macro to tell the library if 
it should bypass the strict ansi test... Unless size_t is the only type 
for which this is likely to happen? Then we could use some template stuff 
to check if size_t belongs to the list unsigned int/unsigned long/... and 
overload / specialize for it if not. In practice, that would likely be 
creating a __unique_size_t typedef which is size_t if unique and a dummy 
type if not, and always specializing for it. For overloading we have a bit 
more choice.

-- 
Marc Glisse



More information about the Libstdc++ mailing list