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/addr-const1.C38
-rw-r--r--gcc/testsuite/g++.dg/init/attrib1.C10
-rw-r--r--gcc/testsuite/g++.dg/init/ctor2.C34
-rw-r--r--gcc/testsuite/g++.dg/init/enum1.C10
-rw-r--r--gcc/testsuite/g++.dg/init/enum2.C8
-rw-r--r--gcc/testsuite/g++.dg/init/new1.C20
-rw-r--r--gcc/testsuite/g++.dg/init/new4.C1
-rw-r--r--gcc/testsuite/g++.dg/init/new5.C18
-rw-r--r--gcc/testsuite/g++.dg/init/new6.C8
-rw-r--r--gcc/testsuite/g++.dg/init/new7.C7
-rw-r--r--gcc/testsuite/g++.dg/init/ref1.C5
-rw-r--r--gcc/testsuite/g++.dg/init/ref2.C10
-rw-r--r--gcc/testsuite/g++.dg/init/ref3.C12
-rw-r--r--gcc/testsuite/g++.dg/init/ref5.C12
-rw-r--r--gcc/testsuite/g++.dg/init/ref6.C12
-rw-r--r--gcc/testsuite/g++.dg/init/ref7.C9
-rw-r--r--gcc/testsuite/g++.dg/init/static1.C4
17 files changed, 218 insertions, 0 deletions
diff --git a/gcc/testsuite/g++.dg/init/addr-const1.C b/gcc/testsuite/g++.dg/init/addr-const1.C
new file mode 100644
index 00000000000..3b4637a4144
--- /dev/null
+++ b/gcc/testsuite/g++.dg/init/addr-const1.C
@@ -0,0 +1,38 @@
+// { dg-do run }
+
+// Copyright (C) 2003 Free Software Foundation, Inc.
+// Contributed by Nathan Sidwell 19 Apr 2003 <nathan@codesourcery.com>
+
+// PR 9881. address-constant-expression not static initialized
+
+struct bar {
+ double p;
+}; // bar
+
+bar v;
+static bool error = false;
+
+struct foo {
+ static double *a;
+ static double *b;
+ static double storage;
+};
+
+struct baz {
+ baz () {
+ if (foo::a != &v.p)
+ error = true;
+ if (foo::b != &foo::storage)
+ error = true;
+ }
+};
+
+baz f; // Get constructor to run before any other non-static initializers
+
+double *foo::a = &(((bar *)(&v))->p);
+double *foo::b = &(((bar *)(&foo::storage))->p);
+double foo::storage = 0.0;
+
+int main() {
+ return error;
+}
diff --git a/gcc/testsuite/g++.dg/init/attrib1.C b/gcc/testsuite/g++.dg/init/attrib1.C
new file mode 100644
index 00000000000..839e4ce215d
--- /dev/null
+++ b/gcc/testsuite/g++.dg/init/attrib1.C
@@ -0,0 +1,10 @@
+// { dg-do run }
+
+void f() __attribute((__constructor__));
+int i;
+void f() { i = 1; }
+
+int main(int, char **)
+{
+ return 1-i;
+}
diff --git a/gcc/testsuite/g++.dg/init/ctor2.C b/gcc/testsuite/g++.dg/init/ctor2.C
new file mode 100644
index 00000000000..cf426f2bf16
--- /dev/null
+++ b/gcc/testsuite/g++.dg/init/ctor2.C
@@ -0,0 +1,34 @@
+// { dg-do run }
+
+// Copyright (C) 2003 Free Software Foundation, Inc.
+// Contributed by Nathan Sidwell 14 Mar 2003 <nathan@codesourcery.com>
+
+// PR 9629. The vtable is not set up until the base initializers have
+// run.
+
+struct A {
+ static A *a;
+ A ();
+};
+A *A::a;
+A::A () {a = this;}
+
+struct B {
+ static A *a;
+ B (A *);
+};
+A *B::a;
+B::B(A *a_) {a = a_;}
+
+struct C : virtual public A, public B {
+ C();
+};
+C::C () : B(this) {}
+
+struct D : virtual public C {};
+
+int main()
+{
+ new D();
+ return A::a != B::a;
+}
diff --git a/gcc/testsuite/g++.dg/init/enum1.C b/gcc/testsuite/g++.dg/init/enum1.C
new file mode 100644
index 00000000000..f74a5ad2b55
--- /dev/null
+++ b/gcc/testsuite/g++.dg/init/enum1.C
@@ -0,0 +1,10 @@
+enum test {
+ acceptable = -1,
+ unacceptable = 0xffffffffffffffffLL
+}; // { dg-error "" }
+
+enum test t = acceptable, u = unacceptable;
+
+int main() {
+ return 0;
+}
diff --git a/gcc/testsuite/g++.dg/init/enum2.C b/gcc/testsuite/g++.dg/init/enum2.C
new file mode 100644
index 00000000000..3dfa346a8a5
--- /dev/null
+++ b/gcc/testsuite/g++.dg/init/enum2.C
@@ -0,0 +1,8 @@
+#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/new1.C b/gcc/testsuite/g++.dg/init/new1.C
new file mode 100644
index 00000000000..24b60d3c409
--- /dev/null
+++ b/gcc/testsuite/g++.dg/init/new1.C
@@ -0,0 +1,20 @@
+// Origin: asharji@uwaterloo.ca
+
+// { dg-do compile }
+// { dg-options "-fvolatile" }
+
+typedef __SIZE_TYPE__ size_t;
+
+class bar {
+ int i;
+ public :
+ void * operator new ( size_t , void * storage );
+};
+
+class foo {
+ int storage[ 5 ];
+ public:
+ void mem ( ) {
+ bar *s = new ( ( void * ) & storage ) bar;
+ }
+};
diff --git a/gcc/testsuite/g++.dg/init/new4.C b/gcc/testsuite/g++.dg/init/new4.C
new file mode 100644
index 00000000000..ab2fe31314d
--- /dev/null
+++ b/gcc/testsuite/g++.dg/init/new4.C
@@ -0,0 +1 @@
+int *x = new int [2] ();
diff --git a/gcc/testsuite/g++.dg/init/new5.C b/gcc/testsuite/g++.dg/init/new5.C
new file mode 100644
index 00000000000..3a5981e075c
--- /dev/null
+++ b/gcc/testsuite/g++.dg/init/new5.C
@@ -0,0 +1,18 @@
+// { dg-do run }
+
+#include <new>
+
+void * operator new[](size_t, std::nothrow_t const &) throw()
+{ return NULL; }
+
+struct X {
+ struct Inner { ~Inner() {} };
+
+ X() {
+ Inner * ic = new (std::nothrow) Inner[1]; // SegFault here
+ }
+};
+
+int main() {
+ X table;
+}
diff --git a/gcc/testsuite/g++.dg/init/new6.C b/gcc/testsuite/g++.dg/init/new6.C
new file mode 100644
index 00000000000..ecbafd13e6c
--- /dev/null
+++ b/gcc/testsuite/g++.dg/init/new6.C
@@ -0,0 +1,8 @@
+// { dg-options "-fkeep-inline-functions" }
+
+struct B1 { virtual ~B1(); };
+struct B2 { virtual ~B2(); };
+struct D : B1, B2 {};
+struct X : D { X (); };
+
+X::X () { new int; }
diff --git a/gcc/testsuite/g++.dg/init/new7.C b/gcc/testsuite/g++.dg/init/new7.C
new file mode 100644
index 00000000000..e07d2261738
--- /dev/null
+++ b/gcc/testsuite/g++.dg/init/new7.C
@@ -0,0 +1,7 @@
+template <class T>
+ struct Foo
+ {};
+
+ template <class T>
+ void Foo<T>::NON_EXISTENT(int* val = new int()) {} // { dg-error "" }
+
diff --git a/gcc/testsuite/g++.dg/init/ref1.C b/gcc/testsuite/g++.dg/init/ref1.C
new file mode 100644
index 00000000000..12caff2d0ed
--- /dev/null
+++ b/gcc/testsuite/g++.dg/init/ref1.C
@@ -0,0 +1,5 @@
+void f(void)
+{
+ short x = 0;
+ const int &y = x;
+}
diff --git a/gcc/testsuite/g++.dg/init/ref2.C b/gcc/testsuite/g++.dg/init/ref2.C
new file mode 100644
index 00000000000..231ea047fff
--- /dev/null
+++ b/gcc/testsuite/g++.dg/init/ref2.C
@@ -0,0 +1,10 @@
+struct Base {
+ Base();
+ Base(const Base &);
+ Base & operator = (const Base &);
+};
+
+struct Derived : public Base {};
+
+Derived derived();
+const Base &b = derived();
diff --git a/gcc/testsuite/g++.dg/init/ref3.C b/gcc/testsuite/g++.dg/init/ref3.C
new file mode 100644
index 00000000000..776f2d0c5d2
--- /dev/null
+++ b/gcc/testsuite/g++.dg/init/ref3.C
@@ -0,0 +1,12 @@
+struct Base { };
+struct Derived : public Base { };
+struct Choose {
+ operator Base&();
+ operator Derived&();
+};
+
+void f()
+{
+ Choose c;
+ Base& ref = c;
+}
diff --git a/gcc/testsuite/g++.dg/init/ref5.C b/gcc/testsuite/g++.dg/init/ref5.C
new file mode 100644
index 00000000000..ad1c30c36f8
--- /dev/null
+++ b/gcc/testsuite/g++.dg/init/ref5.C
@@ -0,0 +1,12 @@
+struct A { };
+struct B : public A { };
+struct X {
+ operator B();
+};
+X x;
+
+int main()
+{
+ const A& r = x;
+ return 0;
+}
diff --git a/gcc/testsuite/g++.dg/init/ref6.C b/gcc/testsuite/g++.dg/init/ref6.C
new file mode 100644
index 00000000000..50a96360366
--- /dev/null
+++ b/gcc/testsuite/g++.dg/init/ref6.C
@@ -0,0 +1,12 @@
+struct B {
+ void g() { }
+};
+
+struct A {
+ void f() {
+ B &b = b;
+ b.g();
+ }
+};
+
+int main(void) { }
diff --git a/gcc/testsuite/g++.dg/init/ref7.C b/gcc/testsuite/g++.dg/init/ref7.C
new file mode 100644
index 00000000000..0832069e32c
--- /dev/null
+++ b/gcc/testsuite/g++.dg/init/ref7.C
@@ -0,0 +1,9 @@
+class hop
+{
+public:
+ hop operator* () const;
+};
+int main(void)
+{
+ const hop &x = *x;
+}
diff --git a/gcc/testsuite/g++.dg/init/static1.C b/gcc/testsuite/g++.dg/init/static1.C
new file mode 100644
index 00000000000..7609215dd4c
--- /dev/null
+++ b/gcc/testsuite/g++.dg/init/static1.C
@@ -0,0 +1,4 @@
+struct A {
+ static const int size = BOGUS; // { dg-error "" }
+};
+const int A::size;