// PR c++/91360 - Implement C++20 P1143R2: constinit
// { dg-do compile { target c++20 } }

constinit constinit int v1; // { dg-error "duplicate .constinit." }
constexpr constinit int v2 = 1; // { dg-error "can use at most one of the .constinit. and .constexpr. specifiers" }
constinit constexpr int v3 = 1; // { dg-error "an use at most one of the .constinit. and .constexpr. specifiers" }

extern static constinit int v4; // { dg-error "conflicting specifiers" }
extern thread_local constinit int v5;
extern constinit int v6;

constinit typedef int T; // { dg-error ".constinit. cannot appear in a typedef declaration" }

struct S2 {
  constinit int m1; // { dg-error "non-static data member .m1. declared .constinit." }
  constinit unsigned int b : 32; // { dg-error " non-static data member .b. declared .constinit." }
};

struct S3 {
  constinit S3() {} // { dg-error ".constinit. on function return type is not allowed" }
  constinit ~S3() {} // { dg-error ".constinit. on function return type is not allowed" }
};

constinit struct S4 { // { dg-error ".constinit. cannot be used for type declarations" }
};

template<constinit int I> // { dg-error "a parameter cannot be declared .constinit." }
struct X { };

int
fn1 ()
{
  // Not static storage
  constinit int a1 = 42; // { dg-error "17:.constinit. can only be applied to a variable with static or thread storage" }
  constinit int a2 = 42; // { dg-error "17:.constinit. can only be applied to a variable with static or thread storage" }
  extern constinit int e1;

  return 0;
}

constinit int // { dg-error ".constinit. on function return type is not allowed" }
fn3 ()
{
}

void
fn2 (int i, constinit int p) // { dg-error "a parameter cannot be declared .constinit." }
{
  constinit auto l = [i](){ return i; }; // { dg-error "18:.constinit. can only be applied to a variable with static or thread storage" }
}

struct B { int d; };

void
fn3 (B b)
{
  constinit auto [ a ] = b; // { dg-error ".constinit. can only be applied to a variable with static or thread storage" }
}
