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