On Thu, Feb 04, 2016 at 05:01:36PM +1100, Richard Henderson wrote:
> While attempting to write some code that uses the new x86 named address
> space support in gcc 6, I found that __typeof is very unhelpful.  In
> particular, given
> 
>       int __seg_fs *ptr;
>       __typeof(*ptr) obj;
> 
> OBJ will not be type "int", but "int __seg_fs".  Which means that you can't
> use it to create temporaries within statement expressions.
> 
> In the process of writing this, I found a hack in __typeof added just to
> support _Atomic.  Which suggests that one of these variants would be more
> generally helpful than the hack.
> 
> I add __typeof_noas and __typeof_noqual.  The first strips only the address
> space, leaving 'const' and 'volatile' (and, I suppose 'restrict').  The
> second strips all qualifiers, essentially yielding the TYPE_MAIN_VARIANT.
> 
> Thoughts?

We've already been asked to add something like __typeof_noqual, e.g.
https://gcc.gnu.org/bugzilla/show_bug.cgi?id=39985#c3 .  In a similar PR,
I wanted to modify __typeof to drop all qualifiers, but Joseph suggested
instead to add a new typeof variant:
https://gcc.gnu.org/bugzilla/show_bug.cgi?id=65455#c19
(or adjust __typeof to only drop all qualifiers on rvalues?).

So this makes sense, though I don't see the need for __typeof_noas if we
can have __typeof_noqual.

        Marek

Reply via email to