brintos

brintos / llvm-project-archived public Read only

0
0
Text · 1.1 KiB · 89eb64f Raw
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