diff options
Diffstat (limited to 'gcc/testsuite/g++.dg/init')
-rw-r--r-- | gcc/testsuite/g++.dg/init/array11.C | 28 | ||||
-rw-r--r-- | gcc/testsuite/g++.dg/init/enum2.C | 9 | ||||
-rw-r--r-- | gcc/testsuite/g++.dg/init/init-ref4.C | 22 | ||||
-rw-r--r-- | gcc/testsuite/g++.dg/init/new8.C | 17 | ||||
-rw-r--r-- | gcc/testsuite/g++.dg/init/ref8.C | 10 | ||||
-rw-r--r-- | gcc/testsuite/g++.dg/init/ref9.C | 36 | ||||
-rw-r--r-- | gcc/testsuite/g++.dg/init/struct1.C | 6 |
7 files changed, 128 insertions, 0 deletions
diff --git a/gcc/testsuite/g++.dg/init/array11.C b/gcc/testsuite/g++.dg/init/array11.C new file mode 100644 index 00000000000..e52effe9ff7 --- /dev/null +++ b/gcc/testsuite/g++.dg/init/array11.C @@ -0,0 +1,28 @@ +/* PR 11665 + Orgin: jwhite@cse.unl.edu + The problem was in initializer_constant_valid_p, + "for a CONSTRUCTOR, only the last element + of the CONSTRUCTOR was being checked" + (from the email of the patch which fixed this). + This used to ICE because GCC thought gdt_table was a + constant value when it is not. */ + +int x; + +typedef __SIZE_TYPE__ size_t; + +struct gdt +{ +size_t a,b,c,d,e,f; +}; +void f() +{ +struct gdt gdt_table[2]= +{ + { + 0, + ( (((size_t)(&x))<<(24))&(-1<<(8)) ), + }, +}; +} + diff --git a/gcc/testsuite/g++.dg/init/enum2.C b/gcc/testsuite/g++.dg/init/enum2.C new file mode 100644 index 00000000000..dea7dc17be0 --- /dev/null +++ b/gcc/testsuite/g++.dg/init/enum2.C @@ -0,0 +1,9 @@ +#include <limits.h> +enum test { + z = 0, + c = UINT_MAX + 1LL +} x = z; + +int main() { + return x != z; +} diff --git a/gcc/testsuite/g++.dg/init/init-ref4.C b/gcc/testsuite/g++.dg/init/init-ref4.C new file mode 100644 index 00000000000..26d2e97562c --- /dev/null +++ b/gcc/testsuite/g++.dg/init/init-ref4.C @@ -0,0 +1,22 @@ +// Origin: dgregor@gcc.gnu.org +// PR c++/11384 +// foo<int>::_S_something was not being emitted. + +// { dg-do run { xfail *-*-aout *-*-coff *-*-hpux* *-*-hms } } +// On targets that don't support weak symbols, we require an explicit + +template<typename T> + struct foo + { + static const T _S_something; + }; + +template<typename T> + const T foo<T>::_S_something = T(); + +int main() +{ + const int* p = &foo<int>::_S_something; + return 0; +} + diff --git a/gcc/testsuite/g++.dg/init/new8.C b/gcc/testsuite/g++.dg/init/new8.C new file mode 100644 index 00000000000..1fefc366ba8 --- /dev/null +++ b/gcc/testsuite/g++.dg/init/new8.C @@ -0,0 +1,17 @@ +typedef __SIZE_TYPE__ size_t; + +enum Refcount_Type { + NO_REFCOUNT +}; + +struct d0_Unknown_Object +{ + void* operator new (size_t, size_t, Refcount_Type type); + void operator delete (void*, size_t, Refcount_Type); + d0_Unknown_Object (); +}; + +void make () +{ + new (10, NO_REFCOUNT) d0_Unknown_Object; +} diff --git a/gcc/testsuite/g++.dg/init/ref8.C b/gcc/testsuite/g++.dg/init/ref8.C new file mode 100644 index 00000000000..406cc10401d --- /dev/null +++ b/gcc/testsuite/g++.dg/init/ref8.C @@ -0,0 +1,10 @@ +struct A { + A operator=(const A&); +}; + +A operator*(A, A); + +A& operator+=(A& a, const A& b) +{ + return a = a * b; // { dg-error "non-const reference" } +} diff --git a/gcc/testsuite/g++.dg/init/ref9.C b/gcc/testsuite/g++.dg/init/ref9.C new file mode 100644 index 00000000000..127b7d8e1fd --- /dev/null +++ b/gcc/testsuite/g++.dg/init/ref9.C @@ -0,0 +1,36 @@ +// { dg-do run } + +struct ex; +struct basic { + int refcount; + ex eval() const; + basic() : refcount(0) {} +}; + +struct ex { + basic *bp; + ex() : bp(0) { } + ex(const basic &); + virtual ~ex(); + void construct_from_basic(const basic &); +}; + +ex basic::eval() const { + throw 1; +} + +inline ex::ex(const basic &b) { construct_from_basic (b); } +inline ex::~ex() { if (--bp->refcount == 0) delete bp; } +void ex::construct_from_basic(const basic &b) { + const ex & tmpex = b.eval(); + bp = tmpex.bp; + bp->refcount++; +} + +ex pow() { return basic(); } + +int main() +{ + try { pow (); } catch (int) {} + return 0; +} diff --git a/gcc/testsuite/g++.dg/init/struct1.C b/gcc/testsuite/g++.dg/init/struct1.C new file mode 100644 index 00000000000..4cabc99e0e2 --- /dev/null +++ b/gcc/testsuite/g++.dg/init/struct1.C @@ -0,0 +1,6 @@ +struct bug { + const char *name; + unsigned long type; +}; + +struct bug s = { 0, (unsigned long) &s | 1 }; |