xref: /aosp_15_r20/external/clang/test/Sema/bitfield-promote.c (revision 67e74705e28f6214e480b399dd47ea732279e315)
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