diff options
Diffstat (limited to 'gcc/testsuite/g++.dg/init')
-rw-r--r-- | gcc/testsuite/g++.dg/init/addr-const1.C | 38 | ||||
-rw-r--r-- | gcc/testsuite/g++.dg/init/attrib1.C | 10 | ||||
-rw-r--r-- | gcc/testsuite/g++.dg/init/ctor2.C | 34 | ||||
-rw-r--r-- | gcc/testsuite/g++.dg/init/enum1.C | 10 | ||||
-rw-r--r-- | gcc/testsuite/g++.dg/init/enum2.C | 8 | ||||
-rw-r--r-- | gcc/testsuite/g++.dg/init/new1.C | 20 | ||||
-rw-r--r-- | gcc/testsuite/g++.dg/init/new4.C | 1 | ||||
-rw-r--r-- | gcc/testsuite/g++.dg/init/new5.C | 18 | ||||
-rw-r--r-- | gcc/testsuite/g++.dg/init/new6.C | 8 | ||||
-rw-r--r-- | gcc/testsuite/g++.dg/init/new7.C | 7 | ||||
-rw-r--r-- | gcc/testsuite/g++.dg/init/ref1.C | 5 | ||||
-rw-r--r-- | gcc/testsuite/g++.dg/init/ref2.C | 10 | ||||
-rw-r--r-- | gcc/testsuite/g++.dg/init/ref3.C | 12 | ||||
-rw-r--r-- | gcc/testsuite/g++.dg/init/ref5.C | 12 | ||||
-rw-r--r-- | gcc/testsuite/g++.dg/init/ref6.C | 12 | ||||
-rw-r--r-- | gcc/testsuite/g++.dg/init/ref7.C | 9 | ||||
-rw-r--r-- | gcc/testsuite/g++.dg/init/static1.C | 4 |
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; |