1 // RUN: %clang_cc1 -no-opaque-pointers -triple i386-unknown-unknown -emit-llvm %s -o - | FileCheck %s 2 3 extern int printf(const char*, ...); 4 5 // CHECK-LABEL: @_Z4testi( 6 int test(int val){ 7 switch (val) { 8 case 4: 9 do { 10 switch (6) { 11 // CHECK: call noundef i32 (i8*, ...) @_Z6printfPKcz 12 case 6: do { case 5: printf("bad\n"); } while (0); 13 }; 14 } while (0); 15 } 16 return 0; 17 } 18 19 int main(void) { 20 return test(5); 21 } 22 23 // CHECK-LABEL: @_Z10other_testv( 24 void other_test() { 25 switch(0) { 26 case 0: 27 do { 28 default:; 29 } while(0); 30 } 31 } 32 33 struct X { X(); ~X(); }; 34 35 void dont_call(); 36 void foo(); 37 38 // CHECK-LABEL: @_Z13nested_scopesv( 39 void 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( 67 void 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( 80 void hidden_break(bool b) { 81 switch (1) { 82 default: 83 // CHECK: br 84 if (b) 85 break; 86 // CHECK: call {{.*}} @_Z3foov( 87 foo(); 88 break; 89 } 90 } 91 92 // CHECK-LABEL: @_Z10hidden_varv( 93 int hidden_var() { 94 switch (1) { 95 // CHECK: %[[N:.*]] = alloca i32 96 case 0: int n; 97 // CHECK: store i32 0, i32* %[[N]] 98 // CHECK: load i32, i32* %[[N]] 99 // CHECK: ret 100 default: n = 0; return n; 101 } 102 } 103 104 // CHECK-LABEL: @_Z13case_in_labelv( 105 void case_in_label() { 106 // CHECK: br label % 107 switch (1) case 1: foo: case 0: goto foo; 108 } 109