xref: /aosp_15_r20/external/clang/test/CodeGenCXX/bitfield-layout.cpp (revision 67e74705e28f6214e480b399dd47ea732279e315)
1*67e74705SXin Li // RUN: %clang_cc1 %s -triple=x86_64-apple-darwin10 -emit-llvm -o - -O3 | FileCheck -check-prefix CHECK-LP64 %s
2*67e74705SXin Li // RUN: %clang_cc1 %s -triple=i386-apple-darwin10 -emit-llvm -o - -O3 | FileCheck -check-prefix CHECK-LP32 %s
3*67e74705SXin Li 
4*67e74705SXin Li // CHECK-LP64: %union.Test1 = type { i32, [4 x i8] }
5*67e74705SXin Li union Test1 {
6*67e74705SXin Li   int a;
7*67e74705SXin Li   int b: 39;
8*67e74705SXin Li } t1;
9*67e74705SXin Li 
10*67e74705SXin Li // CHECK-LP64: %union.Test2 = type { i8 }
11*67e74705SXin Li union Test2 {
12*67e74705SXin Li   int : 6;
13*67e74705SXin Li } t2;
14*67e74705SXin Li 
15*67e74705SXin Li // CHECK-LP64: %union.Test3 = type { i16 }
16*67e74705SXin Li union Test3 {
17*67e74705SXin Li   int : 9;
18*67e74705SXin Li } t3;
19*67e74705SXin Li 
20*67e74705SXin Li 
21*67e74705SXin Li #define CHECK(x) if (!(x)) return __LINE__
22*67e74705SXin Li 
f()23*67e74705SXin Li int f() {
24*67e74705SXin Li   struct {
25*67e74705SXin Li     int a;
26*67e74705SXin Li 
27*67e74705SXin Li     unsigned long long b : 65;
28*67e74705SXin Li 
29*67e74705SXin Li     int c;
30*67e74705SXin Li   } c;
31*67e74705SXin Li 
32*67e74705SXin Li   c.a = 0;
33*67e74705SXin Li   c.b = (unsigned long long)-1;
34*67e74705SXin Li   c.c = 0;
35*67e74705SXin Li 
36*67e74705SXin Li   CHECK(c.a == 0);
37*67e74705SXin Li   CHECK(c.b == (unsigned long long)-1);
38*67e74705SXin Li   CHECK(c.c == 0);
39*67e74705SXin Li 
40*67e74705SXin Li // CHECK-LP64: ret i32 0
41*67e74705SXin Li // CHECK-LP32: ret i32 0
42*67e74705SXin Li   return 0;
43*67e74705SXin Li }
44