struct A;
void ?{}(A *);
void ^?{}(A *);

void f(int i) {
  A x;  // construct x
  {
    A y; // construct y
    {
      A z; // construct z
      {
        if (i == 0) return; // destruct x, y, z
      }
      if (i == 1) return; // destruct x, y, z
      // destruct z
    }
    if (i == 2) return; // destruct x, y
    // destruct y
  }
}
