1*67e74705SXin Li // RUN: %clang_cc1 -fsyntax-only -verify %s 2*67e74705SXin Li // expected-no-diagnostics 3*67e74705SXin Li struct {unsigned x : 2;} x; 4*67e74705SXin Li __typeof__((x.x+=1)+1) y; 5*67e74705SXin Li __typeof__(x.x<<1) y; 6*67e74705SXin Li int y; 7*67e74705SXin Li 8*67e74705SXin Li 9*67e74705SXin Li struct { int x : 8; } x1; 10*67e74705SXin Li long long y1; 11*67e74705SXin Li __typeof__(((long long)x1.x + 1)) y1; 12*67e74705SXin Li 13*67e74705SXin Li 14*67e74705SXin Li // Check for extensions: variously sized unsigned bit-fields fitting 15*67e74705SXin Li // into a signed int promote to signed int. 16*67e74705SXin Li enum E { ec1, ec2, ec3 }; 17*67e74705SXin Li struct S { 18*67e74705SXin Li enum E e : 2; 19*67e74705SXin Li unsigned short us : 4; 20*67e74705SXin Li unsigned long long ul1 : 8; 21*67e74705SXin Li unsigned long long ul2 : 50; 22*67e74705SXin Li } s; 23*67e74705SXin Li 24*67e74705SXin Li __typeof(s.e + s.e) x_e; 25*67e74705SXin Li int x_e; 26*67e74705SXin Li 27*67e74705SXin Li __typeof(s.us + s.us) x_us; 28*67e74705SXin Li int x_us; 29*67e74705SXin Li 30*67e74705SXin Li __typeof(s.ul1 + s.ul1) x_ul1; 31*67e74705SXin Li int x_ul1; 32*67e74705SXin Li 33*67e74705SXin Li __typeof(s.ul2 + s.ul2) x_ul2; 34*67e74705SXin Li unsigned long long x_ul2; 35*67e74705SXin Li 36