// RUN: %clang_cc1 -fcxx-exceptions -fexceptions -analyze -analyzer-checker=debug.DumpCFG -analyzer-config cfg-scopes=true %s > %t 2>&1
// RUN: FileCheck --input-file=%t %s

class A {
public:
// CHECK:      [B1 (ENTRY)]
// CHECK-NEXT:   Succs (1): B0
// CHECK:      [B0 (EXIT)]
// CHECK-NEXT:   Preds (1): B1
  A() {}

// CHECK:      [B1 (ENTRY)]
// CHECK-NEXT:   Succs (1): B0
// CHECK:      [B0 (EXIT)]
// CHECK-NEXT:   Preds (1): B1
  ~A() {}

// CHECK:      [B2 (ENTRY)]
// CHECK-NEXT:   Succs (1): B1
// CHECK:      [B1]
// CHECK-NEXT:   1: 1
// CHECK-NEXT:   2: return [B1.1];
// CHECK-NEXT:   Preds (1): B2
// CHECK-NEXT:   Succs (1): B0
// CHECK:      [B0 (EXIT)]
// CHECK-NEXT:   Preds (1): B1
  operator int() const { return 1; }
};

int getX();
extern const bool UV;

// CHECK:      [B2 (ENTRY)]
// CHECK-NEXT:   Succs (1): B1
// CHECK:      [B1]
// CHECK-NEXT:   1: CFGScopeBegin(a)
// CHECK-NEXT:   2:  (CXXConstructExpr, [B1.3], class A [2])
// CHECK-NEXT:   3: A a[2];
// CHECK-NEXT:   4:  (CXXConstructExpr, [B1.5], class A [0])
// CHECK-NEXT:   5: A b[0];
// CHECK-NEXT:   6: [B1.3].~A [2]() (Implicit destructor)
// CHECK-NEXT:   7: CFGScopeEnd(a)
// CHECK-NEXT:   Preds (1): B2
// CHECK-NEXT:   Succs (1): B0
// CHECK:      [B0 (EXIT)]
// CHECK-NEXT:   Preds (1): B1
void test_array() {
  A a[2];
  A b[0];
}

// CHECK:      [B2 (ENTRY)]
// CHECK-NEXT:   Succs (1): B1
// CHECK:      [B1]
// CHECK-NEXT:   1: CFGScopeBegin(a)
// CHECK-NEXT:   2:  (CXXConstructExpr, [B1.3], class A)
// CHECK-NEXT:   3: A a;
// CHECK-NEXT:   4: CFGScopeBegin(c)
// CHECK-NEXT:   5:  (CXXConstructExpr, [B1.6], class A)
// CHECK-NEXT:   6: A c;
// CHECK-NEXT:   7:  (CXXConstructExpr, [B1.8], class A)
// CHECK-NEXT:   8: A d;
// CHECK-NEXT:   9: [B1.8].~A() (Implicit destructor)
// CHECK-NEXT:  10: [B1.6].~A() (Implicit destructor)
// CHECK-NEXT:  11: CFGScopeEnd(c)
// CHECK-NEXT:  12:  (CXXConstructExpr, [B1.13], class A)
// CHECK-NEXT:  13: A b;
// CHECK-NEXT:  14: [B1.13].~A() (Implicit destructor)
// CHECK-NEXT:  15: [B1.3].~A() (Implicit destructor)
// CHECK-NEXT:  16: CFGScopeEnd(a)
// CHECK-NEXT:   Preds (1): B2
// CHECK-NEXT:   Succs (1): B0
// CHECK:      [B0 (EXIT)]
// CHECK-NEXT:   Preds (1): B1
void test_scope() {
  A a;
  { A c;
    A d;
  }
  A b;
}

// CHECK:      [B4 (ENTRY)]
// CHECK-NEXT:   Succs (1): B3
// CHECK:      [B1]
// CHECK-NEXT:   1:  (CXXConstructExpr, [B1.2], class A)
// CHECK-NEXT:   2: A c;
// CHECK-NEXT:   3: [B1.2].~A() (Implicit destructor)
// CHECK-NEXT:   4: [B3.5].~A() (Implicit destructor)
// CHECK-NEXT:   5: [B3.3].~A() (Implicit destructor)
// CHECK-NEXT:   6: CFGScopeEnd(a)
// CHECK-NEXT:   Preds (1): B3
// CHECK-NEXT:   Succs (1): B0
// CHECK:      [B2]
// CHECK-NEXT:   1: return;
// CHECK-NEXT:   2: [B3.5].~A() (Implicit destructor)
// CHECK-NEXT:   3: [B3.3].~A() (Implicit destructor)
// CHECK-NEXT:   4: CFGScopeEnd(a)
// CHECK-NEXT:   Preds (1): B3
// CHECK-NEXT:   Succs (1): B0
// CHECK:      [B3]
// CHECK-NEXT:   1: CFGScopeBegin(a)
// CHECK-NEXT:   2:  (CXXConstructExpr, [B3.3], class A)
// CHECK-NEXT:   3: A a;
// CHECK-NEXT:   4:  (CXXConstructExpr, [B3.5], class A)
// CHECK-NEXT:   5: A b;
// CHECK-NEXT:   6: UV
// CHECK-NEXT:   7: [B3.6] (ImplicitCastExpr, LValueToRValue, _Bool)
// CHECK-NEXT:   T: if [B3.7]
// CHECK-NEXT:   Preds (1): B4
// CHECK-NEXT:   Succs (2): B2 B1
// CHECK:      [B0 (EXIT)]
// CHECK-NEXT:   Preds (2): B1 B2
void test_return() {
  A a;
  A b;
  if (UV) return;
  A c;
}

// CHECK:      [B5 (ENTRY)]
// CHECK-NEXT:   Succs (1): B4
// CHECK:      [B1]
// CHECK-NEXT:   1: [B4.8].~A() (Implicit destructor)
// CHECK-NEXT:   2: CFGScopeEnd(b)
// CHECK-NEXT:   3: [B4.3].~A() (Implicit destructor)
// CHECK-NEXT:   4: CFGScopeEnd(a)
// CHECK-NEXT:   Preds (2): B2 B3
// CHECK-NEXT:   Succs (1): B0
// CHECK:      [B2]
// CHECK-NEXT:   1: CFGScopeBegin(c)
// CHECK-NEXT:   2:  (CXXConstructExpr, [B2.3], class A)
// CHECK-NEXT:   3: A c;
// CHECK-NEXT:   4: [B2.3].~A() (Implicit destructor)
// CHECK-NEXT:   5: CFGScopeEnd(c)
// CHECK-NEXT:   Preds (1): B4
// CHECK-NEXT:   Succs (1): B1
// CHECK:      [B3]
// CHECK-NEXT:   1: CFGScopeBegin(c)
// CHECK-NEXT:   2:  (CXXConstructExpr, [B3.3], class A)
// CHECK-NEXT:   3: A c;
// CHECK-NEXT:   4: [B3.3].~A() (Implicit destructor)
// CHECK-NEXT:   5: CFGScopeEnd(c)
// CHECK-NEXT:   Preds (1): B4
// CHECK-NEXT:   Succs (1): B1
// CHECK:      [B4]
// CHECK-NEXT:   1: CFGScopeBegin(a)
// CHECK-NEXT:   2:  (CXXConstructExpr, [B4.3], class A)
// CHECK-NEXT:   3: A a;
// CHECK-NEXT:   4: CFGScopeBegin(b)
// CHECK-NEXT:   5: a
// CHECK-NEXT:   6: [B4.5] (ImplicitCastExpr, NoOp, const class A)
// CHECK-NEXT:   7: [B4.6] (CXXConstructExpr, [B4.8], class A)
// CHECK-NEXT:   8: A b = a;
// CHECK-NEXT:   9: b
// CHECK-NEXT:  10: [B4.9] (ImplicitCastExpr, NoOp, const class A)
// CHECK-NEXT:  11: [B4.10].operator int
// CHECK-NEXT:  12: [B4.10]
// CHECK-NEXT:  13: [B4.12] (ImplicitCastExpr, UserDefinedConversion, int)
// CHECK-NEXT:  14: [B4.13] (ImplicitCastExpr, IntegralToBoolean, _Bool)
// CHECK-NEXT:   T: if [B4.14]
// CHECK-NEXT:   Preds (1): B5
// CHECK-NEXT:   Succs (2): B3 B2
// CHECK:      [B0 (EXIT)]
// CHECK-NEXT:   Preds (1): B1
void test_if_implicit_scope() {
  A a;
  if (A b = a)
    A c;
  else A c;
}

// CHECK:      [B9 (ENTRY)]
// CHECK-NEXT:   Succs (1): B8
// CHECK:      [B1]
// CHECK-NEXT:   1: [B8.8].~A() (Implicit destructor)
// CHECK-NEXT:   2: CFGScopeEnd(b)
// CHECK-NEXT:   3:  (CXXConstructExpr, [B1.4], class A)
// CHECK-NEXT:   4: A e;
// CHECK-NEXT:   5: [B1.4].~A() (Implicit destructor)
// CHECK-NEXT:   6: [B8.3].~A() (Implicit destructor)
// CHECK-NEXT:   7: CFGScopeEnd(a)
// CHECK-NEXT:   Preds (2): B2 B5
// CHECK-NEXT:   Succs (1): B0
// CHECK:      [B2]
// CHECK-NEXT:   1:  (CXXConstructExpr, [B2.2], class A)
// CHECK-NEXT:   2: A d;
// CHECK-NEXT:   3: [B2.2].~A() (Implicit destructor)
// CHECK-NEXT:   4: [B4.3].~A() (Implicit destructor)
// CHECK-NEXT:   5: CFGScopeEnd(c)
// CHECK-NEXT:   Preds (1): B4
// CHECK-NEXT:   Succs (1): B1
// CHECK:      [B3]
// CHECK-NEXT:   1: return;
// CHECK-NEXT:   2: [B4.3].~A() (Implicit destructor)
// CHECK-NEXT:   3: CFGScopeEnd(c)
// CHECK-NEXT:   4: [B8.8].~A() (Implicit destructor)
// CHECK-NEXT:   5: CFGScopeEnd(b)
// CHECK-NEXT:   6: [B8.3].~A() (Implicit destructor)
// CHECK-NEXT:   7: CFGScopeEnd(a)
// CHECK-NEXT:   Preds (1): B4
// CHECK-NEXT:   Succs (1): B0
// CHECK:      [B4]
// CHECK-NEXT:   1: CFGScopeBegin(c)
// CHECK-NEXT:   2:  (CXXConstructExpr, [B4.3], class A)
// CHECK-NEXT:   3: A c;
// CHECK-NEXT:   4: UV
// CHECK-NEXT:   5: [B4.4] (ImplicitCastExpr, LValueToRValue, _Bool)
// CHECK-NEXT:   T: if [B4.5]
// CHECK-NEXT:   Preds (1): B8
// CHECK-NEXT:   Succs (2): B3 B2
// CHECK:      [B5]
// CHECK-NEXT:   1:  (CXXConstructExpr, [B5.2], class A)
// CHECK-NEXT:   2: A d;
// CHECK-NEXT:   3: [B5.2].~A() (Implicit destructor)
// CHECK-NEXT:   4: [B7.3].~A() (Implicit destructor)
// CHECK-NEXT:   5: CFGScopeEnd(c)
// CHECK-NEXT:   Preds (1): B7
// CHECK-NEXT:   Succs (1): B1
// CHECK:      [B6]
// CHECK-NEXT:   1: return;
// CHECK-NEXT:   2: [B7.3].~A() (Implicit destructor)
// CHECK-NEXT:   3: CFGScopeEnd(c)
// CHECK-NEXT:   4: [B8.8].~A() (Implicit destructor)
// CHECK-NEXT:   5: CFGScopeEnd(b)
// CHECK-NEXT:   6: [B8.3].~A() (Implicit destructor)
// CHECK-NEXT:   7: CFGScopeEnd(a)
// CHECK-NEXT:   Preds (1): B7
// CHECK-NEXT:   Succs (1): B0
// CHECK:      [B7]
// CHECK-NEXT:   1: CFGScopeBegin(c)
// CHECK-NEXT:   2:  (CXXConstructExpr, [B7.3], class A)
// CHECK-NEXT:   3: A c;
// CHECK-NEXT:   4: UV
// CHECK-NEXT:   5: [B7.4] (ImplicitCastExpr, LValueToRValue, _Bool)
// CHECK-NEXT:   T: if [B7.5]
// CHECK-NEXT:   Preds (1): B8
// CHECK-NEXT:   Succs (2): B6 B5
// CHECK:      [B8]
// CHECK-NEXT:   1: CFGScopeBegin(a)
// CHECK-NEXT:   2:  (CXXConstructExpr, [B8.3], class A)
// CHECK-NEXT:   3: A a;
// CHECK-NEXT:   4: CFGScopeBegin(b)
// CHECK-NEXT:   5: a
// CHECK-NEXT:   6: [B8.5] (ImplicitCastExpr, NoOp, const class A)
// CHECK-NEXT:   7: [B8.6] (CXXConstructExpr, [B8.8], class A)
// CHECK-NEXT:   8: A b = a;
// CHECK-NEXT:   9: b
// CHECK-NEXT:  10: [B8.9] (ImplicitCastExpr, NoOp, const class A)
// CHECK-NEXT:  11: [B8.10].operator int
// CHECK-NEXT:  12: [B8.10]
// CHECK-NEXT:  13: [B8.12] (ImplicitCastExpr, UserDefinedConversion, int)
// CHECK-NEXT:  14: [B8.13] (ImplicitCastExpr, IntegralToBoolean, _Bool)
// CHECK-NEXT:   T: if [B8.14]
// CHECK-NEXT:   Preds (1): B9
// CHECK-NEXT:   Succs (2): B7 B4
// CHECK:      [B0 (EXIT)]
// CHECK-NEXT:   Preds (3): B1 B3 B6
void test_if_jumps() {
  A a;
  if (A b = a) {
    A c;
    if (UV) return;
    A d;
  } else {
    A c;
    if (UV) return;
    A d;
  }
  A e;
}

// CHECK:      [B6 (ENTRY)]
// CHECK-NEXT:   Succs (1): B5
// CHECK:      [B1]
// CHECK-NEXT:   1: [B4.5].~A() (Implicit destructor)
// CHECK-NEXT:   2: CFGScopeEnd(b)
// CHECK-NEXT:   3: [B5.3].~A() (Implicit destructor)
// CHECK-NEXT:   4: CFGScopeEnd(a)
// CHECK-NEXT:   Preds (1): B4
// CHECK-NEXT:   Succs (1): B0
// CHECK:      [B2]
// CHECK-NEXT:   Preds (1): B3
// CHECK-NEXT:   Succs (1): B4
// CHECK:      [B3]
// CHECK-NEXT:   1: CFGScopeBegin(c)
// CHECK-NEXT:   2:  (CXXConstructExpr, [B3.3], class A)
// CHECK-NEXT:   3: A c;
// CHECK-NEXT:   4: [B3.3].~A() (Implicit destructor)
// CHECK-NEXT:   5: CFGScopeEnd(c)
// CHECK-NEXT:   6: [B4.5].~A() (Implicit destructor)
// CHECK-NEXT:   7: CFGScopeEnd(b)
// CHECK-NEXT:   Preds (1): B4
// CHECK-NEXT:   Succs (1): B2
// CHECK:      [B4]
// CHECK-NEXT:   1: CFGScopeBegin(b)
// CHECK-NEXT:   2: a
// CHECK-NEXT:   3: [B4.2] (ImplicitCastExpr, NoOp, const class A)
// CHECK-NEXT:   4: [B4.3] (CXXConstructExpr, [B4.5], class A)
// CHECK-NEXT:   5: A b = a;
// CHECK-NEXT:   6: b
// CHECK-NEXT:   7: [B4.6] (ImplicitCastExpr, NoOp, const class A)
// CHECK-NEXT:   8: [B4.7].operator int
// CHECK-NEXT:   9: [B4.7]
// CHECK-NEXT:  10: [B4.9] (ImplicitCastExpr, UserDefinedConversion, int)
// CHECK-NEXT:  11: [B4.10] (ImplicitCastExpr, IntegralToBoolean, _Bool)
// CHECK-NEXT:   T: while [B4.11]
// CHECK-NEXT:   Preds (2): B2 B5
// CHECK-NEXT:   Succs (2): B3 B1
// CHECK:      [B5]
// CHECK-NEXT:   1: CFGScopeBegin(a)
// CHECK-NEXT:   2:  (CXXConstructExpr, [B5.3], class A)
// CHECK-NEXT:   3: A a;
// CHECK-NEXT:   Preds (1): B6
// CHECK-NEXT:   Succs (1): B4
// CHECK:      [B0 (EXIT)]
// CHECK-NEXT:   Preds (1): B1
void test_while_implicit_scope() {
  A a;
  while (A b = a)
    A c;
}

// CHECK:      [B12 (ENTRY)]
// CHECK-NEXT:   Succs (1): B11
// CHECK:      [B1]
// CHECK-NEXT:   1: [B10.5].~A() (Implicit destructor)
// CHECK-NEXT:   2: CFGScopeEnd(b)
// CHECK-NEXT:   3:  (CXXConstructExpr, [B1.4], class A)
// CHECK-NEXT:   4: A e;
// CHECK-NEXT:   5: [B1.4].~A() (Implicit destructor)
// CHECK-NEXT:   6: [B11.3].~A() (Implicit destructor)
// CHECK-NEXT:   7: CFGScopeEnd(a)
// CHECK-NEXT:   Preds (2): B8 B10
// CHECK-NEXT:   Succs (1): B0
// CHECK:      [B2]
// CHECK-NEXT:   Preds (2): B3 B6
// CHECK-NEXT:   Succs (1): B10
// CHECK:      [B3]
// CHECK-NEXT:   1:  (CXXConstructExpr, [B3.2], class A)
// CHECK-NEXT:   2: A d;
// CHECK-NEXT:   3: [B3.2].~A() (Implicit destructor)
// CHECK-NEXT:   4: [B9.3].~A() (Implicit destructor)
// CHECK-NEXT:   5: CFGScopeEnd(c)
// CHECK-NEXT:   6: [B10.5].~A() (Implicit destructor)
// CHECK-NEXT:   7: CFGScopeEnd(b)
// CHECK-NEXT:   Preds (1): B5
// CHECK-NEXT:   Succs (1): B2
// CHECK:      [B4]
// CHECK-NEXT:   1: return;
// CHECK-NEXT:   2: [B9.3].~A() (Implicit destructor)
// CHECK-NEXT:   3: CFGScopeEnd(c)
// CHECK-NEXT:   4: [B10.5].~A() (Implicit destructor)
// CHECK-NEXT:   5: CFGScopeEnd(b)
// CHECK-NEXT:   6: [B11.3].~A() (Implicit destructor)
// CHECK-NEXT:   7: CFGScopeEnd(a)
// CHECK-NEXT:   Preds (1): B5
// CHECK-NEXT:   Succs (1): B0
// CHECK:      [B5]
// CHECK-NEXT:   1: UV
// CHECK-NEXT:   2: [B5.1] (ImplicitCastExpr, LValueToRValue, _Bool)
// CHECK-NEXT:   T: if [B5.2]
// CHECK-NEXT:   Preds (1): B7
// CHECK-NEXT:   Succs (2): B4 B3
// CHECK:      [B6]
// CHECK-NEXT:   1: [B9.3].~A() (Implicit destructor)
// CHECK-NEXT:   2: CFGScopeEnd(c)
// CHECK-NEXT:   3: [B10.5].~A() (Implicit destructor)
// CHECK-NEXT:   4: CFGScopeEnd(b)
// CHECK-NEXT:   T: continue;
// CHECK-NEXT:   Preds (1): B7
// CHECK-NEXT:   Succs (1): B2
// CHECK:      [B7]
// CHECK-NEXT:   1: UV
// CHECK-NEXT:   2: [B7.1] (ImplicitCastExpr, LValueToRValue, _Bool)
// CHECK-NEXT:   T: if [B7.2]
// CHECK-NEXT:   Preds (1): B9
// CHECK-NEXT:   Succs (2): B6 B5
// CHECK:      [B8]
// CHECK-NEXT:   1: [B9.3].~A() (Implicit destructor)
// CHECK-NEXT:   2: CFGScopeEnd(c)
// CHECK-NEXT:   T: break;
// CHECK-NEXT:   Preds (1): B9
// CHECK-NEXT:   Succs (1): B1
// CHECK:      [B9]
// CHECK-NEXT:   1: CFGScopeBegin(c)
// CHECK-NEXT:   2:  (CXXConstructExpr, [B9.3], class A)
// CHECK-NEXT:   3: A c;
// CHECK-NEXT:   4: UV
// CHECK-NEXT:   5: [B9.4] (ImplicitCastExpr, LValueToRValue, _Bool)
// CHECK-NEXT:   T: if [B9.5]
// CHECK-NEXT:   Preds (1): B10
// CHECK-NEXT:   Succs (2): B8 B7
// CHECK:      [B10]
// CHECK-NEXT:   1: CFGScopeBegin(b)
// CHECK-NEXT:   2: a
// CHECK-NEXT:   3: [B10.2] (ImplicitCastExpr, NoOp, const class A)
// CHECK-NEXT:   4: [B10.3] (CXXConstructExpr, [B10.5], class A)
// CHECK-NEXT:   5: A b = a;
// CHECK-NEXT:   6: b
// CHECK-NEXT:   7: [B10.6] (ImplicitCastExpr, NoOp, const class A)
// CHECK-NEXT:   8: [B10.7].operator int
// CHECK-NEXT:   9: [B10.7]
// CHECK-NEXT:  10: [B10.9] (ImplicitCastExpr, UserDefinedConversion, int)
// CHECK-NEXT:  11: [B10.10] (ImplicitCastExpr, IntegralToBoolean, _Bool)
// CHECK-NEXT:   T: while [B10.11]
// CHECK-NEXT:   Preds (2): B2 B11
// CHECK-NEXT:   Succs (2): B9 B1
// CHECK:      [B11]
// CHECK-NEXT:   1: CFGScopeBegin(a)
// CHECK-NEXT:   2:  (CXXConstructExpr, [B11.3], class A)
// CHECK-NEXT:   3: A a;
// CHECK-NEXT:   Preds (1): B12
// CHECK-NEXT:   Succs (1): B10
// CHECK:      [B0 (EXIT)]
// CHECK-NEXT:   Preds (2): B1 B4
void test_while_jumps() {
  A a;
  while (A b = a) {
    A c;
    if (UV) break;
    if (UV) continue;
    if (UV) return;
    A d;
  }
  A e;
}

// CHECK:      [B12 (ENTRY)]
// CHECK-NEXT:   Succs (1): B11
// CHECK:      [B1]
// CHECK-NEXT:   1:  (CXXConstructExpr, [B1.2], class A)
// CHECK-NEXT:   2: A d;
// CHECK-NEXT:   3: [B1.2].~A() (Implicit destructor)
// CHECK-NEXT:   4: [B11.3].~A() (Implicit destructor)
// CHECK-NEXT:   5: CFGScopeEnd(a)
// CHECK-NEXT:   Preds (2): B8 B2
// CHECK-NEXT:   Succs (1): B0
// CHECK:      [B2]
// CHECK-NEXT:   1: UV
// CHECK-NEXT:   2: [B2.1] (ImplicitCastExpr, LValueToRValue, _Bool)
// CHECK-NEXT:   T: do ... while [B2.2]
// CHECK-NEXT:   Preds (2): B3 B6
// CHECK-NEXT:   Succs (2): B10 B1
// CHECK:      [B3]
// CHECK-NEXT:   1:  (CXXConstructExpr, [B3.2], class A)
// CHECK-NEXT:   2: A c;
// CHECK-NEXT:   3: [B3.2].~A() (Implicit destructor)
// CHECK-NEXT:   4: [B9.3].~A() (Implicit destructor)
// CHECK-NEXT:   5: CFGScopeEnd(b)
// CHECK-NEXT:   Preds (1): B5
// CHECK-NEXT:   Succs (1): B2
// CHECK:      [B4]
// CHECK-NEXT:   1: return;
// CHECK-NEXT:   2: [B9.3].~A() (Implicit destructor)
// CHECK-NEXT:   3: CFGScopeEnd(b)
// CHECK-NEXT:   4: [B11.3].~A() (Implicit destructor)
// CHECK-NEXT:   5: CFGScopeEnd(a)
// CHECK-NEXT:   Preds (1): B5
// CHECK-NEXT:   Succs (1): B0
// CHECK:      [B5]
// CHECK-NEXT:   1: UV
// CHECK-NEXT:   2: [B5.1] (ImplicitCastExpr, LValueToRValue, _Bool)
// CHECK-NEXT:   T: if [B5.2]
// CHECK-NEXT:   Preds (1): B7
// CHECK-NEXT:   Succs (2): B4 B3
// CHECK:      [B6]
// CHECK-NEXT:   1: [B9.3].~A() (Implicit destructor)
// CHECK-NEXT:   2: CFGScopeEnd(b)
// CHECK-NEXT:   T: continue;
// CHECK-NEXT:   Preds (1): B7
// CHECK-NEXT:   Succs (1): B2
// CHECK:      [B7]
// CHECK-NEXT:   1: UV
// CHECK-NEXT:   2: [B7.1] (ImplicitCastExpr, LValueToRValue, _Bool)
// CHECK-NEXT:   T: if [B7.2]
// CHECK-NEXT:   Preds (1): B9
// CHECK-NEXT:   Succs (2): B6 B5
// CHECK:      [B8]
// CHECK-NEXT:   1: [B9.3].~A() (Implicit destructor)
// CHECK-NEXT:   2: CFGScopeEnd(b)
// CHECK-NEXT:   T: break;
// CHECK-NEXT:   Preds (1): B9
// CHECK-NEXT:   Succs (1): B1
// CHECK:      [B9]
// CHECK-NEXT:   1: CFGScopeBegin(b)
// CHECK-NEXT:   2:  (CXXConstructExpr, [B9.3], class A)
// CHECK-NEXT:   3: A b;
// CHECK-NEXT:   4: UV
// CHECK-NEXT:   5: [B9.4] (ImplicitCastExpr, LValueToRValue, _Bool)
// CHECK-NEXT:   T: if [B9.5]
// CHECK-NEXT:   Preds (2): B10 B11
// CHECK-NEXT:   Succs (2): B8 B7
// CHECK:      [B10]
// CHECK-NEXT:   Preds (1): B2
// CHECK-NEXT:   Succs (1): B9
// CHECK:      [B11]
// CHECK-NEXT:   1: CFGScopeBegin(a)
// CHECK-NEXT:   2:  (CXXConstructExpr, [B11.3], class A)
// CHECK-NEXT:   3: A a;
// CHECK-NEXT:   Preds (1): B12
// CHECK-NEXT:   Succs (1): B9
// CHECK:      [B0 (EXIT)]
// CHECK-NEXT:   Preds (2): B1 B4
void test_do_jumps() {
  A a;
  do {
    A b;
    if (UV) break;
    if (UV) continue;
    if (UV) return;
    A c;
  } while (UV);
  A d;
}

// CHECK:      [B6 (ENTRY)]
// CHECK-NEXT:   Succs (1): B5
// CHECK:      [B1]
// CHECK-NEXT:   1: [B4.5].~A() (Implicit destructor)
// CHECK-NEXT:   2: CFGScopeEnd(b)
// CHECK-NEXT:   3: [B5.3].~A() (Implicit destructor)
// CHECK-NEXT:   4: CFGScopeEnd(a)
// CHECK-NEXT:   Preds (1): B4
// CHECK-NEXT:   Succs (1): B0
// CHECK:      [B2]
// CHECK-NEXT:   Preds (1): B3
// CHECK-NEXT:   Succs (1): B4
// CHECK:      [B3]
// CHECK-NEXT:   1: CFGScopeBegin(c)
// CHECK-NEXT:   2:  (CXXConstructExpr, [B3.3], class A)
// CHECK-NEXT:   3: A c;
// CHECK-NEXT:   4: [B3.3].~A() (Implicit destructor)
// CHECK-NEXT:   5: CFGScopeEnd(c)
// CHECK-NEXT:   6: [B4.5].~A() (Implicit destructor)
// CHECK-NEXT:   7: CFGScopeEnd(b)
// CHECK-NEXT:   Preds (1): B4
// CHECK-NEXT:   Succs (1): B2
// CHECK:      [B4]
// CHECK-NEXT:   1: CFGScopeBegin(b)
// CHECK-NEXT:   2: a
// CHECK-NEXT:   3: [B4.2] (ImplicitCastExpr, NoOp, const class A)
// CHECK-NEXT:   4: [B4.3] (CXXConstructExpr, [B4.5], class A)
// CHECK-NEXT:   5: A b = a;
// CHECK-NEXT:   6: b
// CHECK-NEXT:   7: [B4.6] (ImplicitCastExpr, NoOp, const class A)
// CHECK-NEXT:   8: [B4.7].operator int
// CHECK-NEXT:   9: [B4.7]
// CHECK-NEXT:  10: [B4.9] (ImplicitCastExpr, UserDefinedConversion, int)
// CHECK-NEXT:  11: [B4.10] (ImplicitCastExpr, IntegralToBoolean, _Bool)
// CHECK-NEXT:   T: for (...; [B4.11]; )
// CHECK-NEXT:   Preds (2): B2 B5
// CHECK-NEXT:   Succs (2): B3 B1
// CHECK:      [B5]
// CHECK-NEXT:   1: CFGScopeBegin(a)
// CHECK-NEXT:   2:  (CXXConstructExpr, [B5.3], class A)
// CHECK-NEXT:   3: A a;
// CHECK-NEXT:   Preds (1): B6
// CHECK-NEXT:   Succs (1): B4
// CHECK:      [B0 (EXIT)]
// CHECK-NEXT:   Preds (1): B1
void test_for_implicit_scope() {
  for (A a; A b = a; )
    A c;
}

// CHECK:      [B12 (ENTRY)]
// CHECK-NEXT:   Succs (1): B11
// CHECK:      [B1]
// CHECK-NEXT:   1: [B10.5].~A() (Implicit destructor)
// CHECK-NEXT:   2: CFGScopeEnd(c)
// CHECK-NEXT:   3: [B11.6].~A() (Implicit destructor)
// CHECK-NEXT:   4: CFGScopeEnd(b)
// CHECK-NEXT:   5:  (CXXConstructExpr, [B1.6], class A)
// CHECK-NEXT:   6: A f;
// CHECK-NEXT:   7: [B1.6].~A() (Implicit destructor)
// CHECK-NEXT:   8: [B11.3].~A() (Implicit destructor)
// CHECK-NEXT:   9: CFGScopeEnd(a)
// CHECK-NEXT:   Preds (2): B8 B10
// CHECK-NEXT:   Succs (1): B0
// CHECK:      [B2]
// CHECK-NEXT:   Preds (2): B3 B6
// CHECK-NEXT:   Succs (1): B10
// CHECK:      [B3]
// CHECK-NEXT:   1:  (CXXConstructExpr, [B3.2], class A)
// CHECK-NEXT:   2: A e;
// CHECK-NEXT:   3: [B3.2].~A() (Implicit destructor)
// CHECK-NEXT:   4: [B9.3].~A() (Implicit destructor)
// CHECK-NEXT:   5: CFGScopeEnd(d)
// CHECK-NEXT:   6: [B10.5].~A() (Implicit destructor)
// CHECK-NEXT:   7: CFGScopeEnd(c)
// CHECK-NEXT:   Preds (1): B5
// CHECK-NEXT:   Succs (1): B2
// CHECK:      [B4]
// CHECK-NEXT:   1: return;
// CHECK-NEXT:   2: [B9.3].~A() (Implicit destructor)
// CHECK-NEXT:   3: CFGScopeEnd(d)
// CHECK-NEXT:   4: [B10.5].~A() (Implicit destructor)
// CHECK-NEXT:   5: CFGScopeEnd(c)
// CHECK-NEXT:   6: [B11.6].~A() (Implicit destructor)
// CHECK-NEXT:   7: CFGScopeEnd(b)
// CHECK-NEXT:   8: [B11.3].~A() (Implicit destructor)
// CHECK-NEXT:   9: CFGScopeEnd(a)
// CHECK-NEXT:   Preds (1): B5
// CHECK-NEXT:   Succs (1): B0
// CHECK:      [B5]
// CHECK-NEXT:   1: UV
// CHECK-NEXT:   2: [B5.1] (ImplicitCastExpr, LValueToRValue, _Bool)
// CHECK-NEXT:   T: if [B5.2]
// CHECK-NEXT:   Preds (1): B7
// CHECK-NEXT:   Succs (2): B4 B3
// CHECK:      [B6]
// CHECK-NEXT:   1: [B9.3].~A() (Implicit destructor)
// CHECK-NEXT:   2: CFGScopeEnd(d)
// CHECK-NEXT:   T: continue;
// CHECK-NEXT:   Preds (1): B7
// CHECK-NEXT:   Succs (1): B2
// CHECK:      [B7]
// CHECK-NEXT:   1: UV
// CHECK-NEXT:   2: [B7.1] (ImplicitCastExpr, LValueToRValue, _Bool)
// CHECK-NEXT:   T: if [B7.2]
// CHECK-NEXT:   Preds (1): B9
// CHECK-NEXT:   Succs (2): B6 B5
// CHECK:      [B8]
// CHECK-NEXT:   1: [B9.3].~A() (Implicit destructor)
// CHECK-NEXT:   2: CFGScopeEnd(d)
// CHECK-NEXT:   T: break;
// CHECK-NEXT:   Preds (1): B9
// CHECK-NEXT:   Succs (1): B1
// CHECK:      [B9]
// CHECK-NEXT:   1: CFGScopeBegin(d)
// CHECK-NEXT:   2:  (CXXConstructExpr, [B9.3], class A)
// CHECK-NEXT:   3: A d;
// CHECK-NEXT:   4: UV
// CHECK-NEXT:   5: [B9.4] (ImplicitCastExpr, LValueToRValue, _Bool)
// CHECK-NEXT:   T: if [B9.5]
// CHECK-NEXT:   Preds (1): B10
// CHECK-NEXT:   Succs (2): B8 B7
// CHECK:      [B10]
// CHECK-NEXT:   1: CFGScopeBegin(c)
// CHECK-NEXT:   2: b
// CHECK-NEXT:   3: [B10.2] (ImplicitCastExpr, NoOp, const class A)
// CHECK-NEXT:   4: [B10.3] (CXXConstructExpr, [B10.5], class A)
// CHECK-NEXT:   5: A c = b;
// CHECK-NEXT:   6: c
// CHECK-NEXT:   7: [B10.6] (ImplicitCastExpr, NoOp, const class A)
// CHECK-NEXT:   8: [B10.7].operator int
// CHECK-NEXT:   9: [B10.7]
// CHECK-NEXT:  10: [B10.9] (ImplicitCastExpr, UserDefinedConversion, int)
// CHECK-NEXT:  11: [B10.10] (ImplicitCastExpr, IntegralToBoolean, _Bool)
// CHECK-NEXT:   T: for (...; [B10.11]; )
// CHECK-NEXT:   Preds (2): B2 B11
// CHECK-NEXT:   Succs (2): B9 B1
// CHECK:      [B11]
// CHECK-NEXT:   1: CFGScopeBegin(a)
// CHECK-NEXT:   2:  (CXXConstructExpr, [B11.3], class A)
// CHECK-NEXT:   3: A a;
// CHECK-NEXT:   4: CFGScopeBegin(b)
// CHECK-NEXT:   5:  (CXXConstructExpr, [B11.6], class A)
// CHECK-NEXT:   6: A b;
// CHECK-NEXT:   Preds (1): B12
// CHECK-NEXT:   Succs (1): B10
// CHECK:      [B0 (EXIT)]
// CHECK-NEXT:   Preds (2): B1 B4
void test_for_jumps() {
  A a;
  for (A b; A c = b; ) {
    A d;
    if (UV) break;
    if (UV) continue;
    if (UV) return;
    A e;
  }
  A f;
}

// CHECK:      [B8 (ENTRY)]
// CHECK-NEXT:   Succs (1): B7
// CHECK:      [B1]
// CHECK-NEXT:  l1:
// CHECK-NEXT:   1:  (CXXConstructExpr, [B1.2], class A)
// CHECK-NEXT:   2: A c;
// CHECK-NEXT:   3: [B1.2].~A() (Implicit destructor)
// CHECK-NEXT:   4: [B6.5].~A() (Implicit destructor)
// CHECK-NEXT:   5: [B6.3].~A() (Implicit destructor)
// CHECK-NEXT:   6: [B7.3].~A() (Implicit destructor)
// CHECK-NEXT:   7: CFGScopeEnd(a)
// CHECK-NEXT:   Preds (2): B2 B3
// CHECK-NEXT:   Succs (1): B0
// CHECK:      [B2]
// CHECK-NEXT:   1:  (CXXConstructExpr, [B2.2], class A)
// CHECK-NEXT:   2: A b;
// CHECK-NEXT:   3: [B2.2].~A() (Implicit destructor)
// CHECK-NEXT:   4: [B6.8].~A() (Implicit destructor)
// CHECK-NEXT:   5: CFGScopeEnd(a)
// CHECK-NEXT:   Preds (1): B4
// CHECK-NEXT:   Succs (1): B1
// CHECK:      [B3]
// CHECK-NEXT:   1: [B6.8].~A() (Implicit destructor)
// CHECK-NEXT:   2: CFGScopeEnd(a)
// CHECK-NEXT:   T: goto l1;
// CHECK-NEXT:   Preds (1): B4
// CHECK-NEXT:   Succs (1): B1
// CHECK:      [B4]
// CHECK-NEXT:   1: UV
// CHECK-NEXT:   2: [B4.1] (ImplicitCastExpr, LValueToRValue, _Bool)
// CHECK-NEXT:   T: if [B4.2]
// CHECK-NEXT:   Preds (1): B6
// CHECK-NEXT:   Succs (2): B3 B2
// CHECK:      [B5]
// CHECK-NEXT:   1: [B6.8].~A() (Implicit destructor)
// CHECK-NEXT:   2: [B6.5].~A() (Implicit destructor)
// CHECK-NEXT:   3: [B6.3].~A() (Implicit destructor)
// CHECK-NEXT:   4: CFGScopeEnd(cb)
// CHECK-NEXT:   T: goto l0;
// CHECK-NEXT:   Preds (1): B6
// CHECK-NEXT:   Succs (1): B6
// CHECK:      [B6]
// CHECK-NEXT:  l0:
// CHECK-NEXT:   1: CFGScopeBegin(cb)
// CHECK-NEXT:   2:  (CXXConstructExpr, [B6.3], class A)
// CHECK-NEXT:   3: A cb;
// CHECK-NEXT:   4:  (CXXConstructExpr, [B6.5], class A)
// CHECK-NEXT:   5: A b;
// CHECK-NEXT:   6: CFGScopeBegin(a)
// CHECK-NEXT:   7:  (CXXConstructExpr, [B6.8], class A)
// CHECK-NEXT:   8: A a;
// CHECK-NEXT:   9: UV
// CHECK-NEXT:  10: [B6.9] (ImplicitCastExpr, LValueToRValue, _Bool)
// CHECK-NEXT:   T: if [B6.10]
// CHECK-NEXT:   Preds (2): B7 B5
// CHECK-NEXT:   Succs (2): B5 B4
// CHECK:      [B7]
// CHECK-NEXT:   1: CFGScopeBegin(a)
// CHECK-NEXT:   2:  (CXXConstructExpr, [B7.3], class A)
// CHECK-NEXT:   3: A a;
// CHECK-NEXT:   Preds (1): B8
// CHECK-NEXT:   Succs (1): B6
// CHECK:      [B0 (EXIT)]
// CHECK-NEXT:   Preds (1): B1
void test_goto() {
  A a;
l0:
  A cb;
  A b;
  { A a;
    if (UV) goto l0;
    if (UV) goto l1;
    A b;
  }
l1:
  A c;
}

// CHECK:      [B7 (ENTRY)]
// CHECK-NEXT:   Succs (1): B6
// CHECK:      [B1]
// CHECK-NEXT:   1: CFGScopeEnd(i)
// CHECK-NEXT:   2: CFGScopeBegin(unused2)
// CHECK-NEXT:   3: int unused2;
// CHECK-NEXT:   4: CFGScopeEnd(unused2)
// CHECK-NEXT:   Preds (2): B4 B5
// CHECK-NEXT:   Succs (1): B0
// CHECK:      [B2]
// CHECK-NEXT:   1: i
// CHECK-NEXT:   2: ++[B2.1]
// CHECK-NEXT:   Preds (1): B3
// CHECK-NEXT:   Succs (1): B5
// CHECK:      [B3]
// CHECK-NEXT:   1: CFGScopeEnd(unused1)
// CHECK-NEXT:   Succs (1): B2
// CHECK:      [B4]
// CHECK-NEXT:   1: CFGScopeBegin(unused1)
// CHECK-NEXT:   2: int unused1;
// CHECK-NEXT:   3: CFGScopeEnd(unused1)
// CHECK-NEXT:   T: break;
// CHECK-NEXT:   Preds (1): B5
// CHECK-NEXT:   Succs (1): B1
// CHECK:      [B5]
// CHECK-NEXT:   1: i
// CHECK-NEXT:   2: [B5.1] (ImplicitCastExpr, LValueToRValue, int)
// CHECK-NEXT:   3: 3
// CHECK-NEXT:   4: [B5.2] < [B5.3]
// CHECK-NEXT:   T: for (...; [B5.4]; ...)
// CHECK-NEXT:   Preds (2): B2 B6
// CHECK-NEXT:   Succs (2): B4 B1
// CHECK:      [B6]
// CHECK-NEXT:   1: CFGScopeBegin(i)
// CHECK-NEXT:   2: 0
// CHECK-NEXT:   3: int i = 0;
// CHECK-NEXT:   Preds (1): B7
// CHECK-NEXT:   Succs (1): B5
// CHECK:      [B0 (EXIT)]
// CHECK-NEXT:   Preds (1): B1
void test_for_compound_and_break() {
  for (int i = 0; i < 3; ++i) {
    {
      int unused1;
      break;
    }
  }
  {
    int unused2;
  }
}

// CHECK:      [B6 (ENTRY)]
// CHECK-NEXT:   Succs (1): B5
// CHECK:      [B1]
// CHECK-NEXT:   1: CFGScopeEnd(__end1)
// CHECK-NEXT:   2: CFGScopeEnd(__begin1)
// CHECK-NEXT:   3: CFGScopeEnd(__range1)
// CHECK-NEXT:   4: [B5.3].~A [10]() (Implicit destructor)
// CHECK-NEXT:   5: CFGScopeEnd(a)
// CHECK-NEXT:   Preds (1): B2
// CHECK-NEXT:   Succs (1): B0
// CHECK:      [B2]
// CHECK-NEXT:   1: __begin1
// CHECK-NEXT:   2: [B2.1] (ImplicitCastExpr, LValueToRValue, class A *)
// CHECK-NEXT:   3: __end1
// CHECK-NEXT:   4: [B2.3] (ImplicitCastExpr, LValueToRValue, class A *)
// CHECK-NEXT:   5: [B2.2] != [B2.4]
// CHECK-NEXT:   T: for (auto &i : [B5.4])
// CHECK:         [B4.11];
// CHECK:        Preds (2): B3 B5
// CHECK-NEXT:   Succs (2): B4 B1
// CHECK:      [B3]
// CHECK-NEXT:   1: __begin1
// CHECK-NEXT:   2: ++[B3.1]
// CHECK-NEXT:   Preds (1): B4
// CHECK-NEXT:   Succs (1): B2
// CHECK:      [B4]
// CHECK-NEXT:   1: CFGScopeBegin(i)
// CHECK-NEXT:   2: __begin1
// CHECK-NEXT:   3: [B4.2] (ImplicitCastExpr, LValueToRValue, class A *)
// CHECK-NEXT:   4: *[B4.3]
// CHECK-NEXT:   5: auto &i = *__begin1;
// CHECK-NEXT:   6: operator=
// CHECK-NEXT:   7: [B4.6] (ImplicitCastExpr, FunctionToPointerDecay, class A &(*)(const class A &)
// CHECK-NEXT:   8: i
// CHECK-NEXT:   9: b
// CHECK-NEXT:  10: [B4.9] (ImplicitCastExpr, NoOp, const class A)
// CHECK-NEXT:  11: [B4.8] = [B4.10] (OperatorCall)
// CHECK-NEXT:  12: CFGScopeEnd(i)
// CHECK-NEXT:   Preds (1): B2
// CHECK-NEXT:   Succs (1): B3
// CHECK:      [B5]
// CHECK-NEXT:   1: CFGScopeBegin(a)
// CHECK-NEXT:   2:  (CXXConstructExpr, [B5.3], class A [10])
// CHECK-NEXT:   3: A a[10];
// CHECK-NEXT:   4: a
// CHECK-NEXT:   5: auto &&__range1 = a;
// CHECK-NEXT:   6: CFGScopeBegin(__end1)
// CHECK-NEXT:   7: __range1
// CHECK-NEXT:   8: [B5.7] (ImplicitCastExpr, ArrayToPointerDecay, class A *)
// CHECK-NEXT:   9: 10
// CHECK-NEXT:  10: [B5.8] + [B5.9]
// CHECK-NEXT:  11: auto __end1 = __range1 + 10
// CHECK-NEXT:  12: __range1
// CHECK-NEXT:  13: [B5.12] (ImplicitCastExpr, ArrayToPointerDecay, class A *)
// CHECK-NEXT:  14: auto __begin1 = __range1;
// CHECK-NEXT:   Preds (1): B6
// CHECK-NEXT:   Succs (1): B2
// CHECK:      [B0 (EXIT)]
// CHECK-NEXT:   Preds (1): B1
void test_range_for(A &b) {
  A a[10];
  for (auto &i : a)
    i = b;
}

// CHECK:      [B8 (ENTRY)]
// CHECK-NEXT:   Succs (1): B2
// CHECK:      [B1]
// CHECK-NEXT:   1: CFGScopeEnd(i)
// CHECK-NEXT:   2: 1
// CHECK-NEXT:   3: int k = 1;
// CHECK-NEXT:   4: CFGScopeEnd(c)
// CHECK-NEXT:   Preds (3): B3 B5 B6
// CHECK-NEXT:   Succs (1): B0
// CHECK:      [B2]
// CHECK-NEXT:   1: CFGScopeBegin(c)
// CHECK-NEXT:   2: '1'
// CHECK-NEXT:   3: char c = '1';
// CHECK-NEXT:   4: CFGScopeBegin(i)
// CHECK-NEXT:   5: getX
// CHECK-NEXT:   6: [B2.5] (ImplicitCastExpr, FunctionToPointerDecay, int (*)(void))
// CHECK-NEXT:   7: [B2.6]()
// CHECK-NEXT:   8: int i = getX();
// CHECK-NEXT:   9: i
// CHECK-NEXT:  10: [B2.9] (ImplicitCastExpr, LValueToRValue, int)
// CHECK-NEXT:   T: switch [B2.10]
// CHECK-NEXT:   Preds (1): B8
// CHECK-NEXT:   Succs (5): B4 B5 B6 B7 B3
// CHECK:      [B3]
// CHECK-NEXT:  default:
// CHECK-NEXT:   1: CFGScopeBegin(a)
// CHECK-NEXT:   2: 0
// CHECK-NEXT:   3: int a = 0;
// CHECK-NEXT:   4: i
// CHECK-NEXT:   5: ++[B3.4]
// CHECK-NEXT:   6: CFGScopeEnd(a)
// CHECK-NEXT:   Preds (2): B4 B2
// CHECK-NEXT:   Succs (1): B1
// CHECK:      [B4]
// CHECK-NEXT:  case 3:
// CHECK-NEXT:   1: '2'
// CHECK-NEXT:   2: c
// CHECK-NEXT:   3: [B4.2] = [B4.1]
// CHECK-NEXT:   Preds (1): B2
// CHECK-NEXT:   Succs (1): B3
// CHECK:      [B5]
// CHECK-NEXT:  case 2:
// CHECK-NEXT:   1: '2'
// CHECK-NEXT:   2: c
// CHECK-NEXT:   3: [B5.2] = [B5.1]
// CHECK-NEXT:   T: break;
// CHECK-NEXT:   Preds (1): B2
// CHECK-NEXT:   Succs (1): B1
// CHECK:      [B6]
// CHECK-NEXT:  case 1:
// CHECK-NEXT:   1: '3'
// CHECK-NEXT:   2: c
// CHECK-NEXT:   3: [B6.2] = [B6.1]
// CHECK-NEXT:   T: break;
// CHECK-NEXT:   Preds (2): B2 B7
// CHECK-NEXT:   Succs (1): B1
// CHECK:      [B7]
// CHECK-NEXT:  case 0:
// CHECK-NEXT:   1: '2'
// CHECK-NEXT:   2: c
// CHECK-NEXT:   3: [B7.2] = [B7.1]
// CHECK-NEXT:   Preds (1): B2
// CHECK-NEXT:   Succs (1): B6
// CHECK:      [B0 (EXIT)]
// CHECK-NEXT:   Preds (1): B1
void test_switch_with_compound_with_default() {
  char c = '1';
  switch (int i = getX()) {
    case 0:
      c = '2';
    case 1:
      c = '3';
      break;
    case 2: {
      c = '2';
      break;
    }
    case 3:
      c = '2';
    default: {
      int a = 0;
      ++i;
    }
    }
  int k = 1;
}

// CHECK:      [B6 (ENTRY)]
// CHECK-NEXT:   Succs (1): B2
// CHECK:      [B1]
// CHECK-NEXT:   1: CFGScopeEnd(i)
// CHECK-NEXT:   2: 3
// CHECK-NEXT:   3: int k = 3;
// CHECK-NEXT:   4: CFGScopeEnd(c)
// CHECK-NEXT:   Preds (3): B3 B4 B2
// CHECK-NEXT:   Succs (1): B0
// CHECK:      [B2]
// CHECK-NEXT:   1: CFGScopeBegin(c)
// CHECK-NEXT:   2: '1'
// CHECK-NEXT:   3: char c = '1';
// CHECK-NEXT:   4: CFGScopeBegin(i)
// CHECK-NEXT:   5: getX
// CHECK-NEXT:   6: [B2.5] (ImplicitCastExpr, FunctionToPointerDecay, int (*)(void))
// CHECK-NEXT:   7: [B2.6]()
// CHECK-NEXT:   8: int i = getX();
// CHECK-NEXT:   9: i
// CHECK-NEXT:  10: [B2.9] (ImplicitCastExpr, LValueToRValue, int)
// CHECK-NEXT:   T: switch [B2.10]
// CHECK-NEXT:   Preds (1): B6
// CHECK-NEXT:   Succs (4): B3 B4 B5 B1
// CHECK:      [B3]
// CHECK-NEXT:  case 2:
// CHECK-NEXT:   1: '3'
// CHECK-NEXT:   2: c
// CHECK-NEXT:   3: [B3.2] = [B3.1]
// CHECK-NEXT:   T: break;
// CHECK-NEXT:   Preds (1): B2
// CHECK-NEXT:   Succs (1): B1
// CHECK:      [B4]
// CHECK-NEXT:  case 1:
// CHECK-NEXT:   1: '1'
// CHECK-NEXT:   2: c
// CHECK-NEXT:   3: [B4.2] = [B4.1]
// CHECK-NEXT:   T: break;
// CHECK-NEXT:   Preds (2): B2 B5
// CHECK-NEXT:   Succs (1): B1
// CHECK:      [B5]
// CHECK-NEXT:  case 0:
// CHECK-NEXT:   1: '2'
// CHECK-NEXT:   2: c
// CHECK-NEXT:   3: [B5.2] = [B5.1]
// CHECK-NEXT:   Preds (1): B2
// CHECK-NEXT:   Succs (1): B4
// CHECK:      [B0 (EXIT)]
// CHECK-NEXT:   Preds (1): B1
int test_switch_with_compound_without_default() {
  char c = '1';
  switch (int i = getX()) {
    case 0:
      c = '2';
    case 1:
      c = '1';
      break;
    case 2:
      c = '3';
      break;
   }
  int k = 3;
}

// CHECK:      [B5 (ENTRY)]
// CHECK-NEXT:   Succs (1): B2
// CHECK:      [B1]
// CHECK-NEXT:   1: CFGScopeEnd(i)
// CHECK-NEXT:   2: 1
// CHECK-NEXT:   3: int k = 1;
// CHECK-NEXT:   4: CFGScopeEnd(s)
// CHECK-NEXT:   Preds (1): B3
// CHECK-NEXT:   Succs (1): B0
// CHECK:      [B2]
// CHECK-NEXT:   1: CFGScopeBegin(s)
// CHECK-NEXT:   2: '1'
// CHECK-NEXT:   3: char s = '1';
// CHECK-NEXT:   4: CFGScopeBegin(i)
// CHECK-NEXT:   5: getX
// CHECK-NEXT:   6: [B2.5] (ImplicitCastExpr, FunctionToPointerDecay, int (*)(void))
// CHECK-NEXT:   7: [B2.6]()
// CHECK-NEXT:   8: int i = getX();
// CHECK-NEXT:   9: i
// CHECK-NEXT:  10: [B2.9] (ImplicitCastExpr, LValueToRValue, int)
// CHECK-NEXT:   T: switch [B2.10]
// CHECK-NEXT:   Preds (1): B5
// CHECK-NEXT:   Succs (2): B4 B3
// CHECK:      [B3]
// CHECK-NEXT:  default:
// CHECK-NEXT:   1: CFGScopeBegin(a)
// CHECK-NEXT:   2: 0
// CHECK-NEXT:   3: int a = 0;
// CHECK-NEXT:   4: i
// CHECK-NEXT:   5: ++[B3.4]
// CHECK-NEXT:   6: CFGScopeEnd(a)
// CHECK-NEXT:   Preds (2): B4 B2
// CHECK-NEXT:   Succs (1): B1
// CHECK:      [B4]
// CHECK-NEXT:  case 0:
// CHECK-NEXT:   Preds (1): B2
// CHECK-NEXT:   Succs (1): B3
// CHECK:      [B0 (EXIT)]
// CHECK-NEXT:   Preds (1): B1
void test_without_compound() {
  char s = '1';
  switch (int i = getX())
    case 0:
    default: {
      int a = 0;
      ++i;
    }
  int k = 1;
}

// CHECK:      [B12 (ENTRY)]
// CHECK-NEXT:   Succs (1): B11
// CHECK:      [B1]
// CHECK-NEXT:   1: CFGScopeEnd(i)
// CHECK-NEXT:   Preds (2): B4 B10
// CHECK-NEXT:   Succs (1): B0
// CHECK:      [B2]
// CHECK-NEXT:   1: i
// CHECK-NEXT:   2: ++[B2.1]
// CHECK-NEXT:   Preds (2): B3 B7
// CHECK-NEXT:   Succs (1): B10
// CHECK:      [B3]
// CHECK-NEXT:   1: CFGScopeEnd(z)
// CHECK-NEXT:   Succs (1): B2
// CHECK:      [B4]
// CHECK-NEXT:   1: CFGScopeBegin(z)
// CHECK-NEXT:   2: 5
// CHECK-NEXT:   3: int z = 5;
// CHECK-NEXT:   4: CFGScopeEnd(z)
// CHECK-NEXT:   T: break;
// CHECK-NEXT:   Preds (2): B6 B8
// CHECK-NEXT:   Succs (1): B1
// CHECK:      [B5]
// CHECK-NEXT:   1: x
// CHECK-NEXT:   2: [B5.1] (ImplicitCastExpr, LValueToRValue, int)
// CHECK-NEXT:   T: switch [B5.2]
// CHECK-NEXT:   Preds (1): B10
// CHECK-NEXT:   Succs (4): B7 B8 B9 B6
// CHECK:      [B6]
// CHECK-NEXT:  default:
// CHECK-NEXT:   1: 3
// CHECK-NEXT:   2: y
// CHECK-NEXT:   3: [B6.2] = [B6.1]
// CHECK-NEXT:   Preds (1): B5
// CHECK-NEXT:   Succs (1): B4
// CHECK:      [B7]
// CHECK-NEXT:  case 2:
// CHECK-NEXT:   1: 4
// CHECK-NEXT:   2: y
// CHECK-NEXT:   3: [B7.2] = [B7.1]
// CHECK-NEXT:   T: continue;
// CHECK-NEXT:   Preds (1): B5
// CHECK-NEXT:   Succs (1): B2
// CHECK:      [B8]
// CHECK-NEXT:  case 1:
// CHECK-NEXT:   1: 2
// CHECK-NEXT:   2: y
// CHECK-NEXT:   3: [B8.2] = [B8.1]
// CHECK-NEXT:   T: break;
// CHECK-NEXT:   Preds (2): B5 B9
// CHECK-NEXT:   Succs (1): B4
// CHECK:      [B9]
// CHECK-NEXT:  case 0:
// CHECK-NEXT:   1: 1
// CHECK-NEXT:   2: y
// CHECK-NEXT:   3: [B9.2] = [B9.1]
// CHECK-NEXT:   Preds (1): B5
// CHECK-NEXT:   Succs (1): B8
// CHECK:      [B10]
// CHECK-NEXT:   1: i
// CHECK-NEXT:   2: [B10.1] (ImplicitCastExpr, LValueToRValue, int)
// CHECK-NEXT:   3: 1000
// CHECK-NEXT:   4: [B10.2] < [B10.3]
// CHECK-NEXT:   T: for (...; [B10.4]; ...)
// CHECK-NEXT:   Preds (2): B2 B11
// CHECK-NEXT:   Succs (2): B5 B1
// CHECK:      [B11]
// CHECK-NEXT:   1: CFGScopeBegin(i)
// CHECK-NEXT:   2: int i;
// CHECK-NEXT:   3: int x;
// CHECK-NEXT:   4: int y;
// CHECK-NEXT:   5: 0
// CHECK-NEXT:   6: i
// CHECK-NEXT:   7: [B11.6] = [B11.5]
// CHECK-NEXT:   Preds (1): B12
// CHECK-NEXT:   Succs (1): B10
// CHECK:      [B0 (EXIT)]
// CHECK-NEXT:   Preds (1): B1
void test_for_switch_in_for() {
  int i, x, y;
  for (i = 0; i < 1000; ++i) {
    switch (x) {
    case 0:
      y = 1;
    case 1:
      y = 2;
      break; // break from switch
    case 2:
      y = 4;
      continue; // continue in loop
    default:
      y = 3;
    }
    {
      int z = 5;
      break; // break from loop
    }
  }
}
