On Thu, Oct 16, 2025 at 5:52 PM Alejandro Colomar <[email protected]> wrote:
>
> Hi Richard,
>
> On Thu, Oct 16, 2025 at 02:15:59PM +0200, Alejandro Colomar wrote:
> > On Thu, Oct 16, 2025 at 01:41:40PM +0200, Richard Biener wrote:
> > > > > If we ever expose vector bools as GNU extension then you get a new
> > > > > "signed bool" with different _Minof/_Maxof (-1 and 0).
> > > > >
> > > > > typedef bool sbool __attribute__((signed_bool_precision(1)));
> > > > >
> > > > > _Minof (sbool) == 1
> > > > >
> > > > > need to compile with -fgimple to have the attribute not ignored.  And 
> > > > > yes,
> > > > > a 8-bit precision signed bool is a thing then (but still [-1,0]).
> > > >
> > > > What should _Widthof() return for such types?  1?  8?
> > > > <https://www.open-std.org/jtc1/sc22/wg14/www/docs/n3573.txt>
> > >
> > > What does _Widthof do to struct { int i : 3; } a.i?  Hmm.
> >
> > _Widthof() is a constraint violation with non-integer types.
> >
> > (And I think I should restrict it to reject booleans too, precisely
> >  because it's not obvious what it should return.)
>
> Ahh, sorry; I misunderstood.  You mean _Widthof() of the bit-field
> member.  _Widthof of a bit-field should return the number of bits in the
> bit field.  That is...
>
> >
> >
> > Have a lovely day!
> > Alex
> >
> > > struct { long long x : 37; } x;
> > > int main()
> > > {
> > >   __typeof (x.x) a;
>
> ..., _Widthof(x.x) == 37
>
>
> Cheers,
> Alex
>
> > > }
> > >
> > > t4.c:4:13: error: ‘typeof’ applied to a bit-field
> > >     4 |   __typeof (x.x) a;
> > >       |             ^
> > >
> > > I see.  In GNU C this has long long : 37 type (it isn't promoted).
> > > But this works ;)
> > > (by accident?)
> > >
> > > struct { long long x : 37; } x;
> > > int main()
> > > {
> > >   auto b = x.x;
> > >   __typeof (b) c;
> > >   return c;
> > > }
> > >
> > > > cat t4.c.006t.original
> > >
> > > ;; Function main (null)
> > > ;; enabled by -tree-original
> > >
> > >
> > > {
> > >   <unnamed-signed:37> b = x.x;
> > >   <unnamed-signed:37> c;
> > >
> > >     <unnamed-signed:37> b = x.x;
> > >     <unnamed-signed:37> c;
>
> Nice!  :)

For some definition of "nice" ;)

Richard.

>
> --
> <https://www.alejandro-colomar.es>
> Use port 80 (that is, <...:80/>).

Reply via email to