Am Donnerstag, den 19.11.2020, 18:58 +0000 schrieb Joseph Myers: > On Thu, 19 Nov 2020, Uecker, Martin wrote:
... > > > +void g(void) > > +{ > > + volatile int j; > > + typeof((0,j)) i21; i21 = j;; > > + typeof(+j) i22; i22 = j;; > > + typeof(-j) i23; i23 = j;; > > + typeof(1?j:0) i24; i24 = j;; > > + typeof((int)j) i25; i25 = j;; > > + typeof((volatile int)j) i26; i26 = j;; > > +} > > + > > +void h(void) > > +{ > > + _Atomic int j; > > + typeof((0,j)) i32; i32 = j;; > > + typeof(+j) i33; i33 = j;; > > + typeof(-j) i34; i34 = j;; > > + typeof(1?j:0) i35; i35 = j;; > > + typeof((int)j) i36; i36 = j;; > > + typeof((_Atomic int)j) i37; i37 = j;; > > +} > > + > > +void e(void) > > +{ > > + int* restrict j; > > + typeof((0,j)) i43; i43 = j;; > > + typeof(1?j:0) i44; i44 = j;; > > + typeof((int*)j) i45; i45 = j;; > > + typeof((int* restrict)j) i46; i46 = j;; > > +} > > But these tests don't look like they do anything useful (i.e. verify that > typeof loses the qualifier), because testing by assignment like that only > works with const. You could do e.g. > > volatile int j; > extern int i; > extern typeof((0,j)) i; > > instead to verify the qualifier is removed. Apparently I did not have enough coffee when generalizing this to the other qualifiers. Ok, with the following test? /* test that lvalue conversions drops qualifiers, Bug 97702 */ /* { dg-do compile } */ /* { dg-options "" } */ const int jc; extern int j; extern typeof(0,jc) j; extern typeof(+jc) j; extern typeof(-jc) j; extern typeof(1?jc:0) j; extern typeof((int)jc) j; extern typeof((const int)jc) j; volatile int kv; extern int k; extern typeof(0,kv) k; extern typeof(+kv) k; extern typeof(-kv) k; extern typeof(1?kv:0) k; extern typeof((int)kv) k; extern typeof((volatile int)kv) k; _Atomic int la; extern int l; extern typeof(0,la) l; extern typeof(+la) l; extern typeof(-la) l; extern typeof(1?la:0) l; extern typeof((int)la) l; extern typeof((_Atomic int)la) l; int * restrict mr; extern int *m; extern typeof(0,mr) m; extern typeof(1?mr:0) m; extern typeof((int *)mr) m; extern typeof((int * restrict)mr) m;