41 lines · c
1// Test that misexpect detects mis-annotated switch statements for default case2 3// RUN: llvm-profdata merge %S/Inputs/misexpect-switch-default.proftext -o %t.profdata4// RUN: %clang_cc1 %s -O2 -o - -emit-llvm -fprofile-instrument-use=clang -fprofile-instrument-use-path=%t.profdata -verify -Wmisexpect -debug-info-kind=line-tables-only5 6#define inner_loop 10007#define outer_loop 208#define arry_size 259 10int sum(int *buff, int size);11int random_sample(int *buff, int size);12int rand();13void init_arry();14 15int arry[arry_size] = {0};16 17int main() {18 init_arry();19 int val = 0;20 int j;21 for (j = 0; j < outer_loop * inner_loop; ++j) {22 unsigned condition = rand() % 5;23 switch (__builtin_expect(condition, 6)) { // expected-warning-re {{potential performance regression from use of __builtin_expect(): annotation was correct on {{.+}}% ({{[0-9]+ / [0-9]+}}) of profiled executions}}24 case 0:25 val += sum(arry, arry_size);26 break;27 case 1:28 case 2:29 case 3:30 break;31 case 4:32 val += random_sample(arry, arry_size);33 break;34 default:35 __builtin_unreachable();36 } // end switch37 } // end outer_loop38 39 return 0;40}41