109 lines · cpp
1// RUN: %clang_cc1 -triple i386-unknown-unknown -emit-llvm %s -o - | FileCheck %s2 3extern int printf(const char*, ...);4 5// CHECK-LABEL: @_Z4testi(6int test(int val){7 switch (val) {8 case 4:9 do {10 switch (6) {11 // CHECK: call noundef i32 (ptr, ...) @_Z6printfPKcz12 case 6: do { case 5: printf("bad\n"); } while (0);13 };14 } while (0);15 }16 return 0;17}18 19int main(void) {20 return test(5);21}22 23// CHECK-LABEL: @_Z10other_testv(24void other_test() {25 switch(0) {26 case 0:27 do {28 default:;29 } while(0);30 }31}32 33struct X { X(); ~X(); };34 35void dont_call();36void foo();37 38// CHECK-LABEL: @_Z13nested_scopesv(39void nested_scopes() {40 switch (1) {41 case 0:42 // CHECK-NOT: @_Z9dont_callv(43 dont_call();44 break;45 46 default:47 // CHECK: call {{.*}} @_ZN1XC1Ev(48 // CHECK: call {{.*}} @_Z3foov(49 // CHECK-NOT: call {{.*}} @_Z3foov(50 // CHECK: call {{.*}} @_ZN1XD1Ev(51 { X x; foo(); }52 53 // CHECK: call {{.*}} @_ZN1XC1Ev(54 // CHECK: call {{.*}} @_Z3foov(55 // CHECK: call {{.*}} @_ZN1XD1Ev(56 { X x; foo(); }57 58 // CHECK: call {{.*}} @_ZN1XC1Ev(59 // CHECK: call {{.*}} @_Z3foov(60 // CHECK: call {{.*}} @_ZN1XD1Ev(61 { X x; foo(); }62 break;63 }64}65 66// CHECK-LABEL: @_Z17scope_fallthroughv(67void scope_fallthrough() {68 switch (1) {69 // CHECK: call {{.*}} @_ZN1XC1Ev(70 // CHECK-NOT: call {{.*}} @_Z3foov(71 // CHECK: call {{.*}} @_ZN1XD1Ev(72 { default: X x; }73 // CHECK: call {{.*}} @_Z3foov(74 foo();75 break;76 }77}78 79// CHECK-LABEL: @_Z12hidden_breakb(80void hidden_break(bool b) {81 switch (1) {82 default:83 // CHECK: br84 if (b)85 break;86 // CHECK: call {{.*}} @_Z3foov(87 foo();88 break;89 }90}91 92// CHECK-LABEL: @_Z10hidden_varv(93int hidden_var() {94 switch (1) {95 // CHECK: %[[N:.*]] = alloca i3296 case 0: int n;97 // CHECK: store i32 0, ptr %[[N]]98 // CHECK: load i32, ptr %[[N]]99 // CHECK: ret100 default: n = 0; return n;101 }102}103 104// CHECK-LABEL: @_Z13case_in_labelv(105void case_in_label() {106 // CHECK: br label %107 switch (1) case 1: foo: case 0: goto foo;108}109