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