• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
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 
f0(int n)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 
g0(void)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 
f1(void)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 
g1(void)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 
f2(void)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 
g2(void)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 
f3(int n)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 
g3(void)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