On Fri, Jun 01, 2018 at 09:33:57PM +0000, Joseph Myers wrote:
> On Fri, 1 Jun 2018, Segher Boessenkool wrote:
>
> > This patch changes the (C++) mangling of the 128-bit float types.
> > IBM long double ("double-double") is mangled as "g", as before, and
> > IEEE 128-bit long double is mangled as "u9__ieee128".
>
> To be clear: given this mangling (which certainly simplifies the ABI), is
> the intent that only one type with double-double format, and only one type
> with binary128 format, will be accessible in any given C++ compilation, to
> avoid ICEs (bugs 85075 and 85518) from different types having the same
> mangling? So __ibm128 *will* be the same type as long double when those
> have the same format, and likewise long double, __float128, __ieee128 and
> __typeof (__builtin_inff128 ()) will have the same type when they have the
> same format?
Yes. (__float128 is just a #define btw.)
> You can have the simple mangling that's compatible between different
> choices of long double, or you can have the types being consistently
> different so people can e.g. overload and write templates using them
> without worrying about the possibility that __ieee128 might or might not
> be the same type as long double depending on the compiler options, but you
> can't have both without running into problems.
Right. But given how much this simplifies, we'll just have to bite the
bullet and get this to work properly.
Segher