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 4 static 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 18 int 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 26 static 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 40 int 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 48 static 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 60 int 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 68 static 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 83 int 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