diff options
Diffstat (limited to 'gcc/testsuite/g++.dg/cpp0x/regress')
-rw-r--r-- | gcc/testsuite/g++.dg/cpp0x/regress/49290.C | 12 | ||||
-rw-r--r-- | gcc/testsuite/g++.dg/cpp0x/regress/ctor1.C | 21 | ||||
-rw-r--r-- | gcc/testsuite/g++.dg/cpp0x/regress/error-recovery1.C | 4 | ||||
-rw-r--r-- | gcc/testsuite/g++.dg/cpp0x/regress/regress4.C | 62 | ||||
-rw-r--r-- | gcc/testsuite/g++.dg/cpp0x/regress/regress6.C | 11 |
5 files changed, 97 insertions, 13 deletions
diff --git a/gcc/testsuite/g++.dg/cpp0x/regress/49290.C b/gcc/testsuite/g++.dg/cpp0x/regress/49290.C deleted file mode 100644 index 71e46c5796..0000000000 --- a/gcc/testsuite/g++.dg/cpp0x/regress/49290.C +++ /dev/null @@ -1,12 +0,0 @@ -typedef unsigned T; -struct S -{ - T foo (void); - static unsigned s1[16]; -}; -T -S::foo () -{ - T u = *(T *) (s1 + 10); - return u; -} diff --git a/gcc/testsuite/g++.dg/cpp0x/regress/ctor1.C b/gcc/testsuite/g++.dg/cpp0x/regress/ctor1.C new file mode 100644 index 0000000000..c35d6011f3 --- /dev/null +++ b/gcc/testsuite/g++.dg/cpp0x/regress/ctor1.C @@ -0,0 +1,21 @@ +// PR c++/49569 +// { dg-options -std=c++0x } + +struct A +{ + virtual void f() = 0; +}; + +struct B: A +{ + int i; + virtual void f() { } +}; + +struct C +{ + B b; + C(): b() { } + C(const B& b): b(b) { } +}; + diff --git a/gcc/testsuite/g++.dg/cpp0x/regress/error-recovery1.C b/gcc/testsuite/g++.dg/cpp0x/regress/error-recovery1.C index 2094d3e3eb..cdf9940847 100644 --- a/gcc/testsuite/g++.dg/cpp0x/regress/error-recovery1.C +++ b/gcc/testsuite/g++.dg/cpp0x/regress/error-recovery1.C @@ -5,5 +5,7 @@ template < bool > void foo () { const bool b =; // { dg-error "" } - foo < b > (); // { dg-error "constant expression" } + foo < b > (); // { dg-error "constant expression" "const expr" } }; + +// { dg-error "no match" "no match" { target *-*-* } 8 } diff --git a/gcc/testsuite/g++.dg/cpp0x/regress/regress4.C b/gcc/testsuite/g++.dg/cpp0x/regress/regress4.C new file mode 100644 index 0000000000..b56263ae5a --- /dev/null +++ b/gcc/testsuite/g++.dg/cpp0x/regress/regress4.C @@ -0,0 +1,62 @@ +// PR c++/49663 +// { dg-options -std=c++0x } + +struct Nosm +{ + int m_R; +}; + +namespace dx { + + struct onc + { + typedef void(*Cb)(); + + onc(Cb cb); + }; + + struct grac + { + template<class Derived> static void once(); + }; + + template<class Derived> + struct tonc : onc + { + tonc() : onc(&grac::once<Derived>) {} + + static Derived& get(); + }; + + template<class Derived> void grac::once() + { + tonc<Derived>::get().h(); + } +} + +namespace +{ + template<typename T, int = sizeof(&T::m_R)> + struct has_R { }; + + template<typename T> + inline void + setR(T* m, has_R<T>* = 0) + { } + + inline void setR(...) { } +} + +template<typename M> + struct Qmi + : dx::tonc<Qmi<M> > + { + void h() + { + setR(&msg); + } + + M msg; + }; + +Qmi<Nosm> x; diff --git a/gcc/testsuite/g++.dg/cpp0x/regress/regress6.C b/gcc/testsuite/g++.dg/cpp0x/regress/regress6.C new file mode 100644 index 0000000000..6de64c0b34 --- /dev/null +++ b/gcc/testsuite/g++.dg/cpp0x/regress/regress6.C @@ -0,0 +1,11 @@ +// PR c++/49691 +// { dg-options -std=c++0x } + +struct A { int x; }; +A* f(); +struct B { + void g() + { + int(f()->x); + } +}; |