1 // RUN: %clang_cc1 %s -triple=x86_64-apple-darwin10 -emit-llvm -o - -O3 | FileCheck -check-prefix=CHECK -check-prefix=CHECK-LP64 %s 2 // RUN: %clang_cc1 %s -triple=i386-apple-darwin10 -emit-llvm -o - -O3 | FileCheck %s 3 // RUN: %clang_cc1 %s -triple=aarch64_be-none-eabi -emit-llvm -o - -O3 | FileCheck %s 4 // RUN: %clang_cc1 %s -triple=thumbv7_be-none-eabi -emit-llvm -o - -O3 | FileCheck %s 5 6 // CHECK-LP64: %union.Test1 = type { i32, [4 x i8] } 7 union Test1 { 8 int a; 9 int b: 39; 10 }; 11 Test1 t1; 12 13 // CHECK-LP64: %union.Test2 = type { i8 } 14 union Test2 { 15 int : 6; 16 } t2; 17 18 // CHECK-LP64: %union.Test3 = type { i16 } 19 union Test3 { 20 int : 9; 21 } t3; 22 23 // CHECK: %union.Test4 = type { i8, i8 } 24 union Test4 { 25 char val : 16; 26 }; 27 Test4 t4; 28 29 #define CHECK(x) if (!(x)) return __LINE__ 30 31 // CHECK: define i32 @_Z11test_assignv() 32 int test_assign() { 33 struct { 34 int a; 35 36 unsigned long long b : 65; 37 38 int c; 39 } c; 40 41 c.a = 0; 42 c.b = (unsigned long long)-1; 43 c.c = 0; 44 45 CHECK(c.a == 0); 46 CHECK(c.b == (unsigned long long)-1); 47 CHECK(c.c == 0); 48 49 Test1 u1; 50 Test4 u2; 51 52 u1.b = 1; 53 u2.val = 42; 54 55 CHECK(u1.b == 1); 56 CHECK(u2.val == 42); 57 58 // CHECK: ret i32 0 59 return 0; 60 } 61 62 // CHECK: define i32 @_Z9test_initv() 63 int test_init() { 64 struct S { 65 int a; 66 67 unsigned long long b : 65; 68 69 int c; 70 }; 71 S s1 = {1, 42, 0}; 72 73 CHECK(s1.a == 1); 74 CHECK(s1.b == (unsigned long long)42); 75 CHECK(s1.c == 0); 76 77 Test1 u1 = {1}; 78 Test4 u2 = {42}; 79 80 CHECK(u1.a == 1); 81 CHECK(u1.b == 1); 82 CHECK(u2.val == 42); 83 84 // CHECK: ret i32 0 85 return 0; 86 } 87