On Sat, 19 Aug 2023, 11:45 FX Coudert, <fxcoud...@gmail.com> wrote:

> Hi,
>
> > That seems like a bug in the aarch64-darwin port.
> > 1.0q should definitely be __float128 rather than _Float128.
>
> Is there a simple way to test what type 1.0q is, in C? I tried using
> _Generic, but it says
>
> > a.c:7:52: error: ‘_Generic’ specifies two compatible types
> >     7 |   int i = _Generic(0.q, default: 0, __float128: 1, _Float128: 2);
> >       |                                                    ^~~~~~~~~
> > a.c:7:37: note: compatible type is here
> >     7 |   int i = _Generic(0.q, default: 0, __float128: 1, _Float128: 2);
> >       |                                     ^~~~~~~~~~
>
>
> Then:
>
> >  /* For C, let float128t_type_node (__float128 in some backends) be the
> >     same type as float128_type_node (_Float128), for C++ let those
> >     be distinct types that mangle and behave differently.  */
>
> OK so my mistake is in not defining float128t_type_node in the
> aarch64-darwin port. I will do that. Am I correct in reading that this
> “new” way of handling extended types in C++ was introduced in 2022-09-27?


Yes, this is a new C++23 feature first supported in gcc 13.


If so, my port to aarch64-darwin was done two years ago, and that explains
> why I missed that entirely…
>
> Thanks a lot Jakub for the help!
> FX

Reply via email to