1// RUN: %clang_cc1 -triple i386-unknown-unknown %s -emit-llvm -o - -O3 -no-struct-path-tbaa | FileCheck %s 2// RUN: %clang_cc1 -triple i386-unknown-unknown %s -emit-llvm -o - -O3 | FileCheck %s --check-prefix=PATH 3 4static int f0(int n) { 5 struct s0 { 6 int a : 30; 7 int b : 2; 8 long long c : 31; 9 } x = { 0xdeadbeef, 0xdeadbeef, 0xdeadbeef }; 10 11 x.a += n; 12 x.b += n; 13 x.c += n; 14 15 return x.a + x.b + x.c; 16} 17 18int g0(void) { 19// CHECK-LABEL: @g0() 20// CHECK: ret i32 1 21// PATH-LABEL: @g0() 22// PATH: ret i32 1 23 return f0(-1) + 44335655; 24} 25 26static int f1(void) { 27 struct s1 { 28 int a:13; 29 char b; 30 unsigned short c:7; 31 } x; 32 33 x.a = -40; 34 x.b = 10; 35 x.c = 15; 36 37 return x.a + x.b + x.c; 38} 39 40int g1(void) { 41// CHECK-LABEL: @g1() 42// CHECK: ret i32 1 43// PATH-LABEL: @g1() 44// PATH: ret i32 1 45 return f1() + 16; 46} 47 48static int f2(void) { 49 struct s2 { 50 short a[3]; 51 int b : 15; 52 } x; 53 54 x.a[0] = x.a[1] = x.a[2] = -40; 55 x.b = 10; 56 57 return x.b; 58} 59 60int g2(void) { 61// CHECK-LABEL: @g2() 62// CHECK: ret i32 1 63// PATH-LABEL: @g2() 64// PATH: ret i32 1 65 return f2() - 9; 66} 67 68static int f3(int n) { 69 struct s3 { 70 unsigned a:16; 71 unsigned b:28 __attribute__ ((packed)); 72 } x = { 0xdeadbeef, 0xdeadbeef }; 73 struct s4 { 74 signed a:16; 75 signed b:28 __attribute__ ((packed)); 76 } y; 77 y.a = -0x56789abcL; 78 y.b = -0x56789abcL; 79 return ((y.a += x.a += n) + 80 (y.b += x.b += n)); 81} 82 83int g3(void) { 84// CHECK-LABEL: @g3() 85// CHECK: ret i32 1 86// PATH-LABEL: @g3() 87// PATH: ret i32 1 88 return f3(20) + 130725747; 89} 90