brintos

brintos / llvm-project-archived public Read only

0
0
Text · 2.0 KiB · b46b983 Raw
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