// RUN: %clang_cc1 %s -emit-llvm -o - | FileCheck %s

// CHECK: @_ZTVZZ1HvEN1S1IEvE1S = 

// CHECK: define {{.*}} @_Z2L1v(
// CHECK: define {{.*}} @_ZZ2L1vEN1S2L2Ev(
// CHECK: define {{.*}} @_ZZ2L1vEN1S2L2E_0v(
// CHECK: define {{.*}} @_ZZ1FvEN1S1T1S1T1GEv(
// CHECK: define {{.*}} @_ZZZ2L1vEN1S2L2E_0vEN1S3L3cEv(
// CHECK: define {{.*}} @_ZZZ2L1vEN1S2L2E_0vEN1S3L3dE_0v(
// CHECK: define {{.*}} @_ZZZ2L1vEN1S2L2EvEN1S3L3aEv(
// CHECK: define {{.*}} @_ZZZ2L1vEN1S2L2EvEN1S3L3bE_0v(

void L1() {
  {
    struct S {
      void L2() {
        {
          struct S {
            void L3a() {}
          };
          S().L3a();
        }
        {
          struct S {
            void L3b() {}
          };
          S().L3b();
        }
      }
    };
    S().L2();
  }
  {
    struct S {
      void L2() {
        {
          struct S {
            void L3c() {}
          };
          S().L3c();
        }
        {
          struct S {
            void L3d() {}
          };
          S().L3d();
        }
      }
    };
    S().L2();
  }
}

void F() {
  struct S {
    struct T {
      struct S {
        struct T {
          void G() {}
        };
      };
    };
  };
  S::T::S::T().G();
}

struct B { virtual void Foo() = 0; };
void G(const B &);

void H() {
  struct S {
    void I() {
      struct S : B {
        virtual void Foo() {}
      };
      G(S());
    }
  };
  S().I();
}
