[PATCH] D40073: [Analyzer] Non-determinism: don't sort indirect goto LabelDecl's by addresses

Devin Coughlin via Phabricator via cfe-commits cfe-commits at lists.llvm.org
Sat Nov 18 17:35:02 PST 2017


dcoughlin accepted this revision.
dcoughlin added a comment.
This revision is now accepted and ready to land.

Thanks for finding and fixing this!

This looks good, but since the nondeterminism is in CFG construction, I think it makes sense to create and dump the CFG rather than running the whole analyzer.

Here is a suggestion for a faster, more portable test.

  // 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


Repository:
  rL LLVM

https://reviews.llvm.org/D40073





More information about the cfe-commits mailing list