// RUN: %clang -cc1 -fsyntax-only -verify -std=c++2c -Wunused-parameter -Wunused -Wpre-c++26-compat %s

void static_var() {
    static int _; // expected-note {{previous definition is here}} \
                  // expected-note {{candidate}}
    static int _; // expected-error {{redefinition of '_'}}
    int _;        // expected-warning {{placeholder variables are incompatible with C++ standards before C++2c}} \
                  // expected-note {{candidate}}
    _++; // expected-error{{reference to '_' is ambiguous}}
}

void static_var_2() {
    int _; // expected-note {{previous definition is here}}
    static int _; // expected-error {{redefinition of '_'}}
}

void bindings() {
    int arr[4] = {0, 1, 2, 3};
    auto [_, _, _, _] = arr; // expected-warning 3{{placeholder variables are incompatible with C++ standards before C++2c}} \
                             // expected-note 4{{placeholder declared here}}
    _ == 42; // expected-error {{ambiguous reference to placeholder '_', which is defined multiple times}}
    {
        // no extension warning as we only introduce a single placeholder.
        auto [_, a, b, c] = arr; // expected-warning {{unused variable '[_, a, b, c]'}}
    }
    {
        auto [_, _, b, c] = arr; // expected-warning {{unused variable '[_, _, b, c]'}} \
                                 // expected-warning {{placeholder variables are incompatible with C++ standards before C++2c}}
    }
    {
        // There are only 3 extension warnings because the first
        // introduction of `_` is valid in all C++ standards
        auto [_, _, _, _] = arr; // expected-warning 3{{placeholder variables are incompatible with C++ standards before C++2c}}
    }
}

namespace StaticBindings {

int arr[2] = {0, 1};
static auto [_, _] = arr; // expected-error {{redefinition of '_'}} \
                          // expected-note  {{previous definition is here}}

void f() {
    int arr[2] = {0, 1};
    static auto [_, _] = arr; // expected-error {{redefinition of '_'}} \
                            // expected-note  {{previous definition is here}}
}

}

void lambda() {
    (void)[_ = 0, _ = 1] { // expected-warning {{placeholder variables are incompatible with C++ standards before C++2c}} \
                           // expected-note 4{{placeholder declared here}}
        (void)_++; // expected-error {{ambiguous reference to placeholder '_', which is defined multiple times}}
    };

    {
        int _ = 12;
        (void)[_ = 0]{}; // no warning (different scope)
    }
}

namespace global_var {
    int _; // expected-note {{previous definition is here}}
    int _; // expected-error {{redefinition of '_'}}
}

namespace {
    int _; // expected-note {{previous definition is here}}
    int _; // expected-error {{redefinition of '_'}}
}


namespace global_fun {
void _();
void _();

void _() {} // expected-note {{previous definition is here}}
void _() {} // expected-error {{redefinition of '_'}}
void _(int){}
}

typedef int _;
typedef int _; // Type redeclaration, nothing to do with placeholders

void extern_test() {
    extern int _;
    extern int _; // expected-note {{candidate}}
    int _; //expected-note {{candidate}}
    _++; // expected-error {{reference to '_' is ambiguous}}
}


struct Members {
    int _; // expected-note 2{{placeholder declared here}}
    int _; // expected-warning{{placeholder variables are incompatible with C++ standards before C++2c}} \
           // expected-note 2{{placeholder declared here}}
    void f() {
        _++; // expected-error {{ambiguous reference to placeholder '_', which is defined multiple times}}
    }
    void attributes() __attribute__((diagnose_if(_ != 0, "oh no!", "warning"))); // expected-error{{ambiguous reference to placeholder '_', which is defined multiple times}}
};

namespace using_ {
int _; // expected-note {{target of using declaration}}
void f() {
    int _; // expected-note {{conflicting declaration}}
    _ = 0;
    using using_::_; // expected-error {{target of using declaration conflicts with declaration already in scope}}
}
}


void call(int);
void test_param(int _) {}
void test_params(int _, int _); // expected-error {{redefinition of parameter '_'}} \
                                // expected-note {{previous declaration is here}}

template <auto _, auto _> // expected-error {{declaration of '_' shadows template parameter}} \
                          // expected-note  {{template parameter is declared here}}
auto i = 0;

template <typename T>
concept C = requires(T _, T _) {  // expected-error {{redefinition of parameter '_'}} \
                                // expected-note {{previous declaration is here}}
    T{};
};

struct S {
    int a;
};

void f(S a, S _) { // expected-warning {{unused parameter 'a'}}

}

void unused_warning() {
  int _ = 12; // placeholder variable, no unused-but-set warning
  int x = 12; // expected-warning {{unused variable 'x'}}
  int _ = 12; // expected-warning {{placeholder variables are incompatible with C++ standards before C++2c}}
}

struct ShadowMembers {
  int _;
  void f() {
    int _;
    _ = 12; // Ok, access the local variable
    (void)({ int _ = 12; _;}); // Ok, inside a different scope
  }
};

struct MemberPtrs {
  int _, _; // expected-warning {{placeholder variables are incompatible with C++ standards before C++2c}} \
            // expected-note 4{{placeholder declared here}}
};
constexpr int oh_no = __builtin_offsetof(MemberPtrs, _); // expected-error {{ambiguous reference to placeholder '_', which is defined multiple times}}
int MemberPtrs::* ref = &MemberPtrs::_; // expected-error{{ambiguous reference to placeholder '_', which is defined multiple times}}


struct MemberInitializer {
  MemberInitializer() : _(0) {}  // expected-error {{ambiguous reference to placeholder '_', which is defined multiple times}}
  int _, _; // expected-note 2{{placeholder declared here}} \
            // expected-warning {{placeholder variables are incompatible with C++ standards before C++2c}}
};

struct MemberAndUnion {
  int _; // expected-note {{placeholder declared here}}
  union { int _; int _; }; // expected-note 2 {{placeholder declared here}} \
                           // expected-warning 2{{placeholder variables are incompatible with C++ standards before C++2c}}


  MemberAndUnion() : _(0) {} // expected-error {{ambiguous reference to placeholder '_', which is defined multiple time}}
};

struct Union { union { int _, _, _; }; };   // expected-note 3{{placeholder declared here}} \
                                            // expected-warning 2{{placeholder variables are incompatible with C++ standards before C++2c}}

void TestUnion() {
   Union c;
   c._ = 0; // expected-error {{ambiguous reference to placeholder '_', which is defined multiple times}}
}

void AnonymousLocals() {
    union  {int _, _;}; // expected-warning {{placeholder variables are incompatible with C++ standards before C++2c}}  \
                        // expected-note 2{{placeholder declared here}}
    union  {int _, _;}; // expected-warning 2{{placeholder variables are incompatible with C++ standards before C++2c}} \
                        // expected-note 2{{placeholder declared here}}
    _. = 0; // expected-error {{ambiguous reference to placeholder '_', which is defined multiple times}}
}

namespace StaticUnions {

static union { int _ = 42; }; // expected-note {{previous declaration is here}}
static union { int _ = 43; }; // expected-error {{member of anonymous union redeclares '_'}}

inline void StaticUnion() {
  static union { int _{}; };  // expected-note {{previous declaration is here}}
  static union { int _{}; }; // expected-error {{member of anonymous union redeclares '_'}}
}

}

namespace TagVariables {

[[maybe_unused]] struct {
    int _, _, _;  // expected-warning 2{{placeholder variables are incompatible with C++ standards before C++2c}}
} a;

[[maybe_unused]] union {
    int _, _, _; // expected-warning 2{{placeholder variables are incompatible with C++ standards before C++2c}}
} b;

}

namespace MemberLookupTests {

struct S {
    int _, _; // expected-warning {{placeholder variables are incompatible with C++ standards before C++2c}} \
              // expected-note 8{{placeholder declared here}}

    void f() {
        _ ++ ; // expected-error {{ambiguous reference to placeholder '_', which is defined multiple times}}
    }
};

struct T : S {

};

void Test() {
    S s{._ =0}; // expected-error {{ambiguous reference to placeholder '_', which is defined multiple times}}
    S{}._; // expected-error {{ambiguous reference to placeholder '_', which is defined multiple times}}
    T{}._; // expected-error {{ambiguous reference to placeholder '_', which is defined multiple times}}
};

};

namespace Bases {
    struct S {
        int _, _; // expected-warning {{placeholder variables are incompatible with C++ standards before C++2c}} \
                  // expected-note   2{{placeholder declared here}}
        int a;
    };
    struct T : S{
        int _, _; // expected-warning {{placeholder variables are incompatible with C++ standards before C++2c}} \
                  // expected-note   2{{placeholder declared here}}
        int a;
        void f() {
            _; // expected-error {{ambiguous reference to placeholder '_', which is defined multiple times}}
            S::_; // expected-error {{ambiguous reference to placeholder '_', which is defined multiple times}} \
                  // expected-error {{a type specifier is required for all declarations}}
        }
    };
}
