cfg.cpp revision 7d0dcd2de023e2667a3f1f14daff9d087fab9bf7
1// RUN: %clang_cc1 -analyze -analyzer-checker=debug.DumpCFG -std=c++11 %s 2>&1 | FileCheck %s 2 3// CHECK: ENTRY 4// CHECK-NEXT: Succs (1): B1 5// CHECK: [B1] 6// CHECK: Succs (21): B2 B3 B4 B5 B6 B7 B8 B9 7// CHECK: B10 B11 B12 B13 B14 B15 B16 B17 B18 B19 8// CHECK: B20 B21 B0 9// CHECK: [B0 (EXIT)] 10// CHECK-NEXT: Preds (21): B2 B3 B4 B5 B6 B7 B8 B9 11// CHECK-NEXT: B10 B11 B12 B13 B14 B15 B16 B17 B18 B19 12// CHECK-NEXT: B20 B21 B1 13void checkWrap(int i) { 14 switch(i) { 15 case 0: break; 16 case 1: break; 17 case 2: break; 18 case 3: break; 19 case 4: break; 20 case 5: break; 21 case 6: break; 22 case 7: break; 23 case 8: break; 24 case 9: break; 25 case 10: break; 26 case 11: break; 27 case 12: break; 28 case 13: break; 29 case 14: break; 30 case 15: break; 31 case 16: break; 32 case 17: break; 33 case 18: break; 34 case 19: break; 35 } 36} 37 38// CHECK: ENTRY 39// CHECK-NEXT: Succs (1): B1 40// CHECK: [B1] 41// CHECK-NEXT: 1: int i; 42// CHECK-NEXT: 2: int j; 43// CHECK-NEXT: 3: 1 44// CHECK-NEXT: 4: int k = 1; 45// CHECK-NEXT: 5: int l; 46// CHECK-NEXT: 6: 2 47// CHECK-NEXT: 7: int m = 2; 48// CHECK-NEXT: CXXConstructExpr 49// CHECK-NEXT: 9: struct standalone myStandalone; 50// CHECK-NEXT: CXXConstructExpr 51// CHECK-NEXT: 11: struct <anonymous struct at {{.*}}> myAnon; 52// CHECK-NEXT: CXXConstructExpr 53// CHECK-NEXT: 13: struct named myNamed; 54// CHECK-NEXT: Preds (1): B2 55// CHECK-NEXT: Succs (1): B0 56void checkDeclStmts() { 57 int i, j; 58 int k = 1, l, m = 2; 59 60 struct standalone { int x, y; }; 61 struct standalone myStandalone; 62 63 struct { int x, y; } myAnon; 64 65 struct named { int x, y; } myNamed; 66 67 static_assert(1, "abc"); 68} 69 70// CHECK: ENTRY 71// CHECK-NEXT: Succs (1): B1 72// CHECK: [B1] 73// CHECK-NEXT: 1: e 74// CHECK-NEXT: 2: [B1.1] (ImplicitCastExpr, LValueToRValue, enum EmptyE) 75// CHECK-NEXT: 3: [B1.2] (ImplicitCastExpr, IntegralCast, int) 76// CHECK-NEXT: T: switch [B1.3] 77// CHECK-NEXT: Preds (1): B2 78// CHECK-NEXT: Succs (1): B0 79// CHECK: [B0 (EXIT)] 80// CHECK-NEXT: Preds (1): B1 81enum EmptyE {}; 82void F(EmptyE e) { 83 switch (e) {} 84} 85 86// CHECK: ENTRY 87// CHECK-NEXT: Succs (1): B1 88// CHECK: [B1] 89// CHECK-NEXT: 1: __builtin_object_size 90// CHECK-NEXT: 2: [B1.1] (ImplicitCastExpr, BuiltinFnToFnPtr, unsigned long (*)(const void *, int)) 91// CHECK-NEXT: 3: [B1.2](dummy(), 0) 92// CHECK-NEXT: 4: (void)[B1.3] (CStyleCastExpr, ToVoid, void) 93// CHECK-NEXT: Preds (1): B2 94// CHECK-NEXT: Succs (1): B0 95// CHECK: [B0 (EXIT)] 96// CHECK-NEXT: Preds (1): B1 97void testBuiltinSize() { 98 extern int *dummy(); 99 (void)__builtin_object_size(dummy(), 0); 100} 101