// RUN: %clang_cc1 -ast-print -triple i386-linux-gnu %s -o - -std=c++20 | FileCheck %s

// CHECK: struct DelegatingCtor1 {
struct DelegatingCtor1 {
  // CHECK-NEXT: DelegatingCtor1();
  DelegatingCtor1();

  // CHECK-NEXT: DelegatingCtor1(int) : DelegatingCtor1() {
  DelegatingCtor1(int) : DelegatingCtor1() {
    // CHECK-NEXT: }
  }

  // CHECK-NEXT: };
};


// CHECK: struct DelegatingCtor2 {
struct DelegatingCtor2 {
  // CHECK-NEXT: template <typename Ty> DelegatingCtor2(Ty);
  template <typename Ty> DelegatingCtor2(Ty);

  // FIXME: Implicitly specialized method should not be output
  // CHECK-NEXT: template<> DelegatingCtor2<float>(float);

  // CHECK-NEXT: DelegatingCtor2(int X) : DelegatingCtor2((float)X) {
  DelegatingCtor2(int X) : DelegatingCtor2((float)X) {
  // CHECK-NEXT: }
  }

  // CHECK-NEXT: };
};

// CHECK: struct DelegatingCtor3 {
struct DelegatingCtor3 {
  // CHECK: DelegatingCtor3(auto);
  DelegatingCtor3(auto);

  // FIXME: Implicitly specialized method should not be output
  // CHECK: template<> DelegatingCtor3<const char *>(const char *);

  // CHECK: DelegatingCtor3(int) : DelegatingCtor3("") {
  DelegatingCtor3(int) : DelegatingCtor3("") {
  // CHECK-NEXT: }
  }

  // CHECK-NEXT: };
};

// CHECK: struct CurlyCtorInit {
struct CurlyCtorInit {
  // CHECK-NEXT: struct A {
  struct A {
    // CHECK-NEXT: int x;
    int x;
  // CHECK-NEXT: };
  };

  // CHECK-NEXT: A a;
  A a;
  // CHECK-NEXT: int i;
  int i;

  // FIXME: /*implicit*/(int)0 should not be output
  // CHECK-NEXT: CurlyCtorInit(int *) : a(), i(/*implicit*/(int)0) {
  CurlyCtorInit(int *) : a(), i() {
  // CHECK-NEXT: }
  }

  // CHECK-NEXT: CurlyCtorInit(int **) : a{}, i{} {
  CurlyCtorInit(int **) : a{}, i{} {
  // CHECK-NEXT: }
  }

  // CHECK-NEXT: CurlyCtorInit(int ***) : a({}), i(0) {
  CurlyCtorInit(int ***) : a({}), i(0) {
  // CHECK-NEXT: }
  }

  // FIXME: Implicit this should not be output
  // CHECK-NEXT: CurlyCtorInit(int ****) : a({.x = 0}), i(this->a.x) {
  CurlyCtorInit(int ****) : a({.x = 0}), i(a.x) {
  // CHECK-NEXT: }
  }

  // CHECK-NEXT: };
};


// CHECK: struct DefMethodsWithoutBody {
struct DefMethodsWithoutBody {
  // CHECK-NEXT: DefMethodsWithoutBody() = delete;
  DefMethodsWithoutBody() = delete;

  // CHECK-NEXT: DefMethodsWithoutBody() = default;
  ~DefMethodsWithoutBody() = default;

  // CHECK-NEXT: void m1() __attribute__((alias("X")));
  void m1() __attribute__((alias("X")));

  // CHECK-NEXT: };
};


// ---- Check that implict (non-written) constructor initializers are not output

struct ImplicitCtorInit1 {
  int a;
};

// CHECK: struct ImplicitCtorInit2 : ImplicitCtorInit1 {
struct ImplicitCtorInit2 : ImplicitCtorInit1 {

  // CHECK-NEXT: ImplicitCtorInit2(int *) {
  ImplicitCtorInit2(int *) {
  // CHECK-NEXT: }
  }

  // CHECK-NEXT: ImplicitCtorInit2(int **) : ImplicitCtorInit1() {
  ImplicitCtorInit2(int **) : ImplicitCtorInit1() {
  // CHECK-NEXT: }
  }

  // CHECK-NEXT: };
};
