switch.c revision 600d47e8d5edc93a08ada8086db23d1d434ce583
1// RUN: clang-cc -triple i386-unknown-unknown -O3 %s -emit-llvm -o - | FileCheck %s
2
3int foo(int i) {
4  int j = 0;
5  switch (i) {
6  case -1:
7    j = 1; break;
8  case 1 :
9    j = 2; break;
10  case 2:
11    j = 3; break;
12  default:
13    j = 42; break;
14  }
15  j = j + 1;
16  return j;
17}
18
19int foo2(int i) {
20  int j = 0;
21  switch (i) {
22  case 1 :
23    j = 2; break;
24  case 2 ... 10:
25    j = 3; break;
26  default:
27    j = 42; break;
28  }
29  j = j + 1;
30  return j;
31}
32
33int foo3(int i) {
34  int j = 0;
35  switch (i) {
36  default:
37    j = 42; break;
38  case 111:
39    j = 111; break;
40  case 0 ... 100:
41    j = 1; break;
42  case 222:
43    j = 222; break;
44  }
45  return j;
46}
47
48
49static int foo4(int i) {
50  int j = 0;
51  switch (i) {
52  case 111:
53    j = 111; break;
54  case 0 ... 100:
55    j = 1; break;
56  case 222:
57    j = 222; break;
58  default:
59    j = 42; break;
60  case 501 ... 600:
61    j = 5; break;
62  }
63  return j;
64}
65
66// CHECK: define i32 @foo4t()
67// CHECK: ret i32 376
68// CHECK: }
69int foo4t() {
70  // 111 + 1 + 222 + 42 = 376
71  return foo4(111) + foo4(99) + foo4(222) + foo4(601);
72}
73
74// CHECK: define void @foo5()
75// CHECK-NOT: switch
76// CHECK: }
77void foo5(){
78    switch(0){
79    default:
80        if (0) {
81
82        }
83    }
84}
85
86// CHECK: define void @foo6()
87// CHECK-NOT: switch
88// CHECK: }
89void foo6(){
90    switch(0){
91    }
92}
93
94// CHECK: define void @foo7()
95// CHECK-NOT: switch
96// CHECK: }
97void foo7(){
98    switch(0){
99      foo7();
100    }
101}
102
103