aboutsummaryrefslogtreecommitdiff
path: root/gcc/testsuite/g++.dg/init
diff options
context:
space:
mode:
Diffstat (limited to 'gcc/testsuite/g++.dg/init')
-rw-r--r--gcc/testsuite/g++.dg/init/array11.C28
-rw-r--r--gcc/testsuite/g++.dg/init/enum2.C9
-rw-r--r--gcc/testsuite/g++.dg/init/init-ref4.C22
-rw-r--r--gcc/testsuite/g++.dg/init/new8.C17
-rw-r--r--gcc/testsuite/g++.dg/init/ref8.C10
-rw-r--r--gcc/testsuite/g++.dg/init/ref9.C36
-rw-r--r--gcc/testsuite/g++.dg/init/struct1.C6
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 };