Viewing file: new46.C (1.54 KB) -rw-r--r-- Select action/file-type: (+) | (+) | (+) | Code (+) | Session (+) | (+) | SDB (+) | (+) | (+) | (+) | (+) | (+) |
// { 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>(); }
|