// RUN: %check_clang_tidy %s readability-redundant-member-init %t

struct S {
  S() = default;
  S(int i) : i(i) {}
  int i = 1;
};

struct T {
  T(int i = 1) : i(i) {}
  int i;
};

struct U {
  int i;
};

union V {
  int i;
  double f;
};

// Initializer calls default constructor
struct F1 {
  F1() : f() {}
  // CHECK-MESSAGES: :[[@LINE-1]]:10: warning: initializer for member 'f' is redundant
  // CHECK-FIXES: F1()  {}
  S f;
};

// Initializer calls default constructor with default argument
struct F2 {
  F2() : f() {}
  // CHECK-MESSAGES: :[[@LINE-1]]:10: warning: initializer for member 'f' is redundant
  // CHECK-FIXES: F2()  {}
  T f;
};

// Multiple redundant initializers for same constructor
struct F3 {
  F3() : f(), g(1), h() {}
  // CHECK-MESSAGES: :[[@LINE-1]]:10: warning: initializer for member 'f' is redundant
  // CHECK-MESSAGES: :[[@LINE-2]]:21: warning: initializer for member 'h' is redundant
  // CHECK-FIXES: F3() :  g(1) {}
  S f, g, h;
};

// Templated class independent type
template <class V>
struct F4 {
  F4() : f() {}
  // CHECK-MESSAGES: :[[@LINE-1]]:10: warning: initializer for member 'f' is redundant
  // CHECK-FIXES: F4()  {}
  S f;
};
F4<int> f4i;
F4<S> f4s;

// Base class
struct F5 : S {
  F5() : S() {}
  // CHECK-MESSAGES: :[[@LINE-1]]:10: warning: initializer for base class 'S' is redundant
  // CHECK-FIXES: F5()  {}
};

// Constructor call requires cleanup
struct Cleanup {
  ~Cleanup() {}
};

struct UsesCleanup {
  UsesCleanup(const Cleanup &c = Cleanup()) {}
};

struct F6 {
  F6() : uc() {}
  // CHECK-MESSAGES: :[[@LINE-1]]:10: warning: initializer for member 'uc' is redundant
  // CHECK-FIXES: F6()  {}
  UsesCleanup uc;
};

// Multiple inheritance
struct F7 : S, T {
  F7() : S(), T() {}
  // CHECK-MESSAGES: :[[@LINE-1]]:10: warning: initializer for base class 'S' is redundant
  // CHECK-MESSAGES: :[[@LINE-2]]:15: warning: initializer for base class 'T' is redundant
  // CHECK-FIXES: F7()  {}
};

namespace Foo {
inline namespace Bar {
template <int N>
struct Template {
  Template() = default;
  int i = N;
};
}
}

enum { N_THINGS = 5 };

struct F8 : Foo::Template<N_THINGS> {
  F8() : Template() {}
  // CHECK-MESSAGES: :[[@LINE-1]]:10: warning: initializer for base class 'Foo::Template<N_THINGS>' is redundant
  // CHECK-FIXES: F8()  {}
};

// Anonymous struct
struct F9 {
  F9() : s1() {}
  // CHECK-MESSAGES: :[[@LINE-1]]:10: warning: initializer for member 's1' is redundant
  // CHECK-FIXES: F9()  {}
  struct {
    S s1;
    S s2;
  };
};

// Initializer not written
struct NF1 {
  NF1() {}
  S f;
};

// Initializer doesn't call default constructor
struct NF2 {
  NF2() : f(1) {}
  S f;
};

// Initializer calls default constructor without using default argument
struct NF3 {
  NF3() : f(1) {}
  T f;
};

// Initializer calls default constructor without using default argument
struct NF4 {
  NF4() : f(2) {}
  T f;
};

// Initializer is zero-initialization
struct NF5 {
  NF5() : i() {}
  int i;
};

// Initializer is direct-initialization
struct NF6 {
  NF6() : i(1) {}
  int i;
};

// Initializer is aggregate initialization of struct
struct NF7 {
  NF7() : f{} {}
  U f;
};

// Initializer is zero-initialization of struct
struct NF7b {
  NF7b() : f() {}
  U f;
};

// Initializer is aggregate initialization of array
struct NF8 {
  NF8() : f{} {}
  int f[2];
};

struct NF9 {
  NF9() : f{} {}
  S f[2];
};

// Initializing member of union
union NF10 {
  NF10() : s() {}
  int i;
  S s;
};

// Templated class dependent type
template <class V>
struct NF11 {
  NF11() : f() {}
  V f;
};
NF11<int> nf11i;
NF11<S> nf11s;

// Delegating constructor
class NF12 {
  NF12() = default;
  NF12(int) : NF12() {}
};

// Const member
struct NF13 {
  NF13() : f() {}
  const S f;
};

// Union member
struct NF14 {
  NF14() : f() {}
  V f;
};

// Anonymous union member
struct NF15 {
  NF15() : s1() {}
  union {
    S s1;
    S s2;
  };
};
