// RUN: %clang_analyze_cc1 -analyzer-checker=debug.DumpCFG %s 2>&1 | FileCheck %s | |
void *target; | |
int indirectBlockSuccessorDeterminism() { | |
(void)&&L1; | |
(void)&&L2; | |
(void)&&L3; | |
(void)&&L4; | |
(void)&&L5; | |
(void)&&L6; | |
(void)&&L7; | |
(void)&&L8; | |
(void)&&L9; | |
(void)&&L10; | |
(void)&&L11; | |
(void)&&L12; | |
(void)&&L13; | |
(void)&&L14; | |
(void)&&L15; | |
(void)&&L16; | |
(void)&&L17; | |
(void)&&L18; | |
(void)&&L19; | |
(void)&&L20; | |
(void)&&L21; | |
(void)&&L22; | |
(void)&&L23; | |
(void)&&L24; | |
(void)&&L25; | |
(void)&&L26; | |
(void)&&L27; | |
(void)&&L28; | |
(void)&&L29; | |
(void)&&L30; | |
(void)&&L31; | |
(void)&&L32; | |
(void)&&L33; | |
(void)&&L34; | |
(void)&&L35; | |
(void)&&L36; | |
(void)&&L37; | |
(void)&&L38; | |
(void)&&L39; | |
(void)&&L40; | |
goto *target; | |
L1: | |
L2: | |
L3: | |
L4: | |
L5: | |
L6: | |
L7: | |
L8: | |
L9: | |
L10: | |
L11: | |
L12: | |
L13: | |
L14: | |
L15: | |
L16: | |
L17: | |
L18: | |
L19: | |
L20: | |
L21: | |
L22: | |
L23: | |
L24: | |
L25: | |
L26: | |
L27: | |
L28: | |
L29: | |
L30: | |
L31: | |
L32: | |
L33: | |
L34: | |
L35: | |
L36: | |
L37: | |
L38: | |
L39: | |
L40: | |
return 0; | |
} | |
// CHECK-LABEL: [B41 (INDIRECT GOTO DISPATCH)] | |
// CHECK-NEXT: Preds (1): B42 | |
// CHECK-NEXT: Succs (40): B1 B2 B3 B4 B5 B6 B7 B8 | |
// CHECK-NEXT: B9 B10 B11 B12 B13 B14 B15 B16 B17 B18 | |
// CHECK-NEXT: B19 B20 B21 B22 B23 B24 B25 B26 B27 B28 | |
// CHECK-NEXT: B29 B30 B31 B32 B33 B34 B35 B36 B37 B38 | |
// CHECK-NEXT: B39 B40 |