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