| // RUN: %clang_cc1 -triple i386-unknown-unknown -O3 %s -emit-llvm -o - | FileCheck %s |
| |
| int foo(int i) { |
| int j = 0; |
| switch (i) { |
| case -1: |
| j = 1; break; |
| case 1 : |
| j = 2; break; |
| case 2: |
| j = 3; break; |
| default: |
| j = 42; break; |
| } |
| j = j + 1; |
| return j; |
| } |
| |
| int foo2(int i) { |
| int j = 0; |
| switch (i) { |
| case 1 : |
| j = 2; break; |
| case 2 ... 10: |
| j = 3; break; |
| default: |
| j = 42; break; |
| } |
| j = j + 1; |
| return j; |
| } |
| |
| int foo3(int i) { |
| int j = 0; |
| switch (i) { |
| default: |
| j = 42; break; |
| case 111: |
| j = 111; break; |
| case 0 ... 100: |
| j = 1; break; |
| case 222: |
| j = 222; break; |
| } |
| return j; |
| } |
| |
| |
| static int foo4(int i) { |
| int j = 0; |
| switch (i) { |
| case 111: |
| j = 111; break; |
| case 0 ... 100: |
| j = 1; break; |
| case 222: |
| j = 222; break; |
| default: |
| j = 42; break; |
| case 501 ... 600: |
| j = 5; break; |
| } |
| return j; |
| } |
| |
| // CHECK: define i32 @foo4t() |
| // CHECK: ret i32 376 |
| // CHECK: } |
| int foo4t() { |
| // 111 + 1 + 222 + 42 = 376 |
| return foo4(111) + foo4(99) + foo4(222) + foo4(601); |
| } |
| |
| // CHECK: define void @foo5() |
| // CHECK-NOT: switch |
| // CHECK: } |
| void foo5(){ |
| switch(0){ |
| default: |
| if (0) { |
| |
| } |
| } |
| } |
| |
| // CHECK: define void @foo6() |
| // CHECK-NOT: switch |
| // CHECK: } |
| void foo6(){ |
| switch(0){ |
| } |
| } |
| |
| // CHECK: define void @foo7() |
| // CHECK-NOT: switch |
| // CHECK: } |
| void foo7(){ |
| switch(0){ |
| foo7(); |
| } |
| } |
| |