summaryrefslogtreecommitdiff
path: root/gcc/testsuite/g++.dg/cpp0x/regress
diff options
context:
space:
mode:
Diffstat (limited to 'gcc/testsuite/g++.dg/cpp0x/regress')
-rw-r--r--gcc/testsuite/g++.dg/cpp0x/regress/49290.C12
-rw-r--r--gcc/testsuite/g++.dg/cpp0x/regress/ctor1.C21
-rw-r--r--gcc/testsuite/g++.dg/cpp0x/regress/error-recovery1.C4
-rw-r--r--gcc/testsuite/g++.dg/cpp0x/regress/regress4.C62
-rw-r--r--gcc/testsuite/g++.dg/cpp0x/regress/regress6.C11
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);
+ }
+};