// { dg-do compile }
// { dg-options "-Wall" }

// Test for c++/68308 - [6 Regression] ICE: tree check: expected integer_cst,
//                      have var_decl in decompose, at tree.h:5105

typedef __typeof__ (sizeof 0) size_t;

// Not defined, only referenced in templates that aren't expected
// to be instantiated to make sure they really aren't to verify
// verify c++/68308.
template <class T> void inst_check ();

// Not instantiated (must not be diagnosed).
template <class T>
char* fn1_x () {
    const size_t a = sizeof (T);
    return inst_check<T>() ? new char [a] : 0;
}

// Not instantiated (must not be diagnosed).
template <size_t N>
char* fn2_1_x () {
    return inst_check<char [N]>() ? new char [N] : 0;
}

template <size_t N>
char* fn2_1 () {
    return new char [N];
}

// Not instantiated (must not be diagnosed).
template <size_t M, size_t N>
char* fn2_2_x () {
    return inst_check<char [M][N]>() ? new char [M][N] : 0;
}

template <size_t M, size_t N>
char* fn2_2 () {
    return new char [M][N];   // { dg-error "size .\[0-9\]+. of array exceeds maximum object size" }
}

// Not instantiated (must not be diagnosed).
template <class T>
T* fn3_x () {
    const size_t a = sizeof (T);
    return inst_check<T>() ? new T [a] : 0;
}

template <class T>
T* fn3 () {
    const size_t a = sizeof (T);
    return new T [a];         // { dg-error "size .\[0-9\]+. of array exceeds maximum object size" }
}


struct S { char a [__SIZE_MAX__ / 8]; };

void foo ()
{
    fn2_1<1>();
    fn2_1<__SIZE_MAX__ / 4>();
    fn2_2<__SIZE_MAX__ / 4, 4>();
    fn3<S>();
}
