// RUN: %clang_cc1 -fsyntax-only -Wself-assign -verify %s

void f() {
  int a = 42, b = 42;
  a = a; // expected-warning{{explicitly assigning}}
  b = b; // expected-warning{{explicitly assigning}}
  a = b;
  b = a = b;
  a = a = a; // expected-warning{{explicitly assigning}}
  a = b = b = a;

  a *= a;
  a /= a;
  a %= a;
  a += a;
  a -= a;
  a <<= a;
  a >>= a;
  a &= a; // expected-warning {{explicitly assigning}}
  a |= a; // expected-warning {{explicitly assigning}}
  a ^= a;
}

// Dummy type.
struct S {};

void false_positives() {
#define OP =
#define LHS a
#define RHS a
  int a = 42;
  // These shouldn't warn due to the use of the preprocessor.
  a OP a;
  LHS = a;
  a = RHS;
  LHS OP RHS;
#undef OP
#undef LHS
#undef RHS

  // A way to silence the warning.
  a = (int &)a;

  // Volatile stores aren't side-effect free.
  volatile int vol_a;
  vol_a = vol_a;
  volatile int &vol_a_ref = vol_a;
  vol_a_ref = vol_a_ref;
}

// Do not diagnose self-assigment in an unevaluated context
void false_positives_unevaluated_ctx(int a) noexcept(noexcept(a = a)) // expected-warning {{expression with side effects has no effect in an unevaluated context}}
{
  decltype(a = a) b = a;              // expected-warning {{expression with side effects has no effect in an unevaluated context}}
  static_assert(noexcept(a = a), ""); // expected-warning {{expression with side effects has no effect in an unevaluated context}}
  static_assert(sizeof(a = a), "");   // expected-warning {{expression with side effects has no effect in an unevaluated context}}
}

template <typename T>
void g() {
  T a;
  a = a; // expected-warning{{explicitly assigning}}
}
void instantiate() {
  g<int>();
  g<S>();
}
