brintos

brintos / llvm-project-archived public Read only

0
0
Text · 3.5 KiB · a203fb0 Raw
133 lines · cpp
1// RUN: %clang_analyze_cc1 -std=c++11 -fcxx-exceptions -fexceptions -analyzer-checker=debug.DumpCFG -analyzer-config cfg-rich-constructors=true,cfg-implicit-dtors=true,cfg-lifetime=true,cfg-scopes=true %s > %t 2>&12// RUN: FileCheck --input-file=%t -check-prefixes=CHECK %s3 4class A {5public:6  int x;7  [[noreturn]] ~A();8};9 10void foo();11extern const bool UV;12 13// CHECK:       [B3 (ENTRY)]14// CHECK-NEXT:    Succs (1): B215//16// CHECK:       [B1]17// CHECK-NEXT:    1: CFGScopeEnd(a)18// CHECK-NEXT:    2: foo19// CHECK-NEXT:    3: [B1.2] (ImplicitCastExpr, FunctionToPointerDecay, void (*)(void))20// CHECK-NEXT:    4: [B1.3]()21// CHECK-NEXT:    Succs (1): B022//23// CHECK:       [B2 (NORETURN)]24// CHECK-NEXT:    1: CFGScopeBegin(a)25// CHECK-NEXT:    2:  (CXXConstructExpr, [B2.3], A)26// CHECK-NEXT:    3: A a;27// CHECK-NEXT:    4: [B2.3].~A() (Implicit destructor)28// CHECK-NEXT:    5: [B2.3] (Lifetime ends)29// CHECK-NEXT:    Preds (1): B330// CHECK-NEXT:    Succs (1): B031//32// CHECK:       [B0 (EXIT)]33// CHECK-NEXT:    Preds (2): B1 B234void test_single_decl() {35  {36    A a;37  }38  foo();39}40 41// CHECK:       [B6 (ENTRY)]42// CHECK-NEXT:    Succs (1): B543//44// CHECK:       [B1]45// CHECK-NEXT:   label:46// CHECK-NEXT:    1: foo47// CHECK-NEXT:    2: [B1.1] (ImplicitCastExpr, FunctionToPointerDecay, void (*)(void))48// CHECK-NEXT:    3: [B1.2]()49// CHECK-NEXT:    Preds (4): B2 B3(Unreachable) B4 B5(Unreachable)50// CHECK-NEXT:    Succs (1): B051//52// CHECK:       [B2]53// CHECK-NEXT:    1: CFGScopeEnd(a)54// CHECK-NEXT:    Succs (1): B155//56// CHECK:       [B3 (NORETURN)]57// CHECK-NEXT:    1: [B5.3].~A() (Implicit destructor)58// CHECK-NEXT:    2: [B5.3] (Lifetime ends)59// CHECK-NEXT:    Succs (1): B060//61// CHECK:       [B4]62// CHECK-NEXT:    1: CFGScopeEnd(a)63// CHECK-NEXT:    T: goto label;64// CHECK-NEXT:    Succs (1): B165//66// CHECK:       [B5 (NORETURN)]67// CHECK-NEXT:    1: CFGScopeBegin(a)68// CHECK-NEXT:    2:  (CXXConstructExpr, [B5.3], A)69// CHECK-NEXT:    3: A a;70// CHECK-NEXT:    4: [B5.3].~A() (Implicit destructor)71// CHECK-NEXT:    5: [B5.3] (Lifetime ends)72// CHECK-NEXT:    Preds (1): B673// CHECK-NEXT:    Succs (1): B074//75// CHECK:       [B0 (EXIT)]76// CHECK-NEXT:    Preds (3): B1 B3 B577void test_forward_goto() {78  {79    A a;80    goto label;81  }82label:83  foo();84}85 86 87// The blocks B3 and B5, are inserted during backpatching goto stmt, to handle88// scope changes.89// CHECK:       [B6 (ENTRY)]90// CHECK-NEXT:    Succs (1): B391//92// CHECK:       [B1]93// CHECK-NEXT:    1: CFGScopeEnd(a)94// CHECK-NEXT:    2: foo95// CHECK-NEXT:    3: [B1.2] (ImplicitCastExpr, FunctionToPointerDecay, void (*)(void))96// CHECK-NEXT:    4: [B1.3]()97// CHECK-NEXT:    Succs (1): B098//99// CHECK:       [B2 (NORETURN)]100// CHECK-NEXT:    1: [B3.3].~A() (Implicit destructor)101// CHECK-NEXT:    2: [B3.3] (Lifetime ends)102// CHECK-NEXT:    Succs (1): B0103//104// CHECK:       [B3]105// CHECK-NEXT:   label:106// CHECK-NEXT:    1: CFGScopeBegin(a)107// CHECK-NEXT:    2:  (CXXConstructExpr, [B3.3], A)108// CHECK-NEXT:    3: A a;109// CHECK-NEXT:    Preds (3): B4 B5(Unreachable) B6110// CHECK-NEXT:    Succs (1): B5111//112// CHECK:       [B4]113// CHECK-NEXT:    1: CFGScopeEnd(a)114// CHECK-NEXT:    T: goto label;115// CHECK-NEXT:    Succs (1): B3116//117// CHECK:       [B5 (NORETURN)]118// CHECK-NEXT:    1: [B3.3].~A() (Implicit destructor)119// CHECK-NEXT:    2: [B3.3] (Lifetime ends)120// CHECK-NEXT:    Preds (1): B3121// CHECK-NEXT:    Succs (1): B0122//123// CHECK:       [B0 (EXIT)]124// CHECK-NEXT:    Preds (3): B1 B2 B5125void test_backward_goto() {126label:127  {128    A a;129    goto label;130  }131  foo();132}133