| // RUN: clang-cc -triple i386-unknown-unknown %s -emit-llvm -o %t -O3 && |
| // RUN: grep "ret i32" %t | count 4 && |
| // RUN: grep "ret i32 1" %t | count 4 |
| |
| static int f0(int n) { |
| struct s0 { |
| int a : 30; |
| int b : 2; |
| long long c : 31; |
| } x = { 0xdeadbeef, 0xdeadbeef, 0xdeadbeef }; |
| |
| x.a += n; |
| x.b += n; |
| x.c += n; |
| |
| return x.a + x.b + x.c; |
| } |
| |
| int g0(void) { |
| return f0(-1) + 44335655; |
| } |
| |
| static int f1(void) { |
| struct s1 { |
| int a:13; |
| char b; |
| unsigned short c:7; |
| } x; |
| |
| x.a = -40; |
| x.b = 10; |
| x.c = 15; |
| |
| return x.a + x.b + x.c; |
| } |
| |
| int g1(void) { |
| return f1() + 16; |
| } |
| |
| static int f2(void) { |
| struct s2 { |
| short a[3]; |
| int b : 15; |
| } x; |
| |
| x.a[0] = x.a[1] = x.a[2] = -40; |
| x.b = 10; |
| |
| return x.b; |
| } |
| |
| int g2(void) { |
| return f2() - 9; |
| } |
| |
| static int f3(int n) { |
| struct s3 { |
| unsigned a:16; |
| unsigned b:28 __attribute__ ((packed)); |
| } x = { 0xdeadbeef, 0xdeadbeef }; |
| struct s4 { |
| signed a:16; |
| signed b:28 __attribute__ ((packed)); |
| } y; |
| y.a = -0x56789abcL; |
| y.b = -0x56789abcL; |
| return ((y.a += x.a += n) + |
| (y.b += x.b += n)); |
| } |
| |
| int g3(void) { |
| return f3(20) + 130725747; |
| } |