summaryrefslogtreecommitdiff
path: root/gcc/testsuite/g++.dg/cpp0x
diff options
context:
space:
mode:
authorLorry Tar Creator <lorry-tar-importer@lorry>2016-08-22 10:27:46 +0000
committerLorry Tar Creator <lorry-tar-importer@lorry>2016-08-22 10:27:46 +0000
commitf733cf303bcdc952c92b81dd62199a40a1f555ec (patch)
tree0a9a9e0f28aa7c7f5bc4d1d1d0e9647163cac4f7 /gcc/testsuite/g++.dg/cpp0x
parente0e4357b88efe5dc53e50d341a09de4d02331200 (diff)
downloadgcc-tarball-f733cf303bcdc952c92b81dd62199a40a1f555ec.tar.gz
gcc-6.2.0gcc-6.2.0
Diffstat (limited to 'gcc/testsuite/g++.dg/cpp0x')
-rw-r--r--gcc/testsuite/g++.dg/cpp0x/Wunused-variable-1.C37
-rw-r--r--gcc/testsuite/g++.dg/cpp0x/alias-decl-55.C23
-rw-r--r--gcc/testsuite/g++.dg/cpp0x/alignas7.C13
-rw-r--r--gcc/testsuite/g++.dg/cpp0x/auto48.C8
-rw-r--r--gcc/testsuite/g++.dg/cpp0x/constexpr-71828.C5
-rw-r--r--gcc/testsuite/g++.dg/cpp0x/constexpr-array16.C23
-rw-r--r--gcc/testsuite/g++.dg/cpp0x/constexpr-array17.C61
-rw-r--r--gcc/testsuite/g++.dg/cpp0x/constexpr-list1.C15
-rw-r--r--gcc/testsuite/g++.dg/cpp0x/constexpr-ptrmem6.C13
-rw-r--r--gcc/testsuite/g++.dg/cpp0x/constexpr-recursion2.C1
-rw-r--r--gcc/testsuite/g++.dg/cpp0x/conv-tmpl1.C1
-rw-r--r--gcc/testsuite/g++.dg/cpp0x/decltype65.C11
-rw-r--r--gcc/testsuite/g++.dg/cpp0x/decltype66.C19
-rw-r--r--gcc/testsuite/g++.dg/cpp0x/inh-ctor20.C16
-rw-r--r--gcc/testsuite/g++.dg/cpp0x/inh-ctor21.C19
-rw-r--r--gcc/testsuite/g++.dg/cpp0x/initlist-base2.C21
-rw-r--r--gcc/testsuite/g++.dg/cpp0x/initlist-base3.C17
-rw-r--r--gcc/testsuite/g++.dg/cpp0x/initlist-template1.C15
-rw-r--r--gcc/testsuite/g++.dg/cpp0x/lambda/lambda-conv11.C10
-rw-r--r--gcc/testsuite/g++.dg/cpp0x/lambda/lambda-deduce3.C15
-rw-r--r--gcc/testsuite/g++.dg/cpp0x/lambda/lambda-ice16.C8
-rw-r--r--gcc/testsuite/g++.dg/cpp0x/pr68724.C15
-rw-r--r--gcc/testsuite/g++.dg/cpp0x/pr70869.C25
-rw-r--r--gcc/testsuite/g++.dg/cpp0x/pr71054.C21
-rw-r--r--gcc/testsuite/g++.dg/cpp0x/pr71739.C5
-rw-r--r--gcc/testsuite/g++.dg/cpp0x/range-for31.C9
-rw-r--r--gcc/testsuite/g++.dg/cpp0x/range-for8.C4
-rw-r--r--gcc/testsuite/g++.dg/cpp0x/rv-bitfield3.C14
-rw-r--r--gcc/testsuite/g++.dg/cpp0x/sfinae57.C16
-rw-r--r--gcc/testsuite/g++.dg/cpp0x/variadic-mangle1a.C12
-rw-r--r--gcc/testsuite/g++.dg/cpp0x/variadic-mangle2a.C19
-rw-r--r--gcc/testsuite/g++.dg/cpp0x/variadic-mangle3.C10
-rw-r--r--gcc/testsuite/g++.dg/cpp0x/variadic-mangle3a.C11
-rw-r--r--gcc/testsuite/g++.dg/cpp0x/variadic-nested1.C9
34 files changed, 519 insertions, 2 deletions
diff --git a/gcc/testsuite/g++.dg/cpp0x/Wunused-variable-1.C b/gcc/testsuite/g++.dg/cpp0x/Wunused-variable-1.C
new file mode 100644
index 0000000000..39592b26a5
--- /dev/null
+++ b/gcc/testsuite/g++.dg/cpp0x/Wunused-variable-1.C
@@ -0,0 +1,37 @@
+// PR c++/71442
+// { dg-do compile { target c++11 } }
+// { dg-options "-Wunused-variable" }
+
+struct C
+{
+ template<typename... Ts>
+ int operator()(Ts &&...)
+ {
+ return sizeof...(Ts);
+ }
+};
+
+int
+foo ()
+{
+ C {} (1, 1L, 1LL, 1.0);
+}
+
+template<int N>
+void
+bar ()
+{
+ char a; // { dg-warning "unused variable" }
+ short b; // { dg-warning "unused variable" }
+ int c; // { dg-warning "unused variable" }
+ long d; // { dg-warning "unused variable" }
+ long long e; // { dg-warning "unused variable" }
+ float f; // { dg-warning "unused variable" }
+ double g; // { dg-warning "unused variable" }
+}
+
+void
+baz ()
+{
+ bar <0> ();
+}
diff --git a/gcc/testsuite/g++.dg/cpp0x/alias-decl-55.C b/gcc/testsuite/g++.dg/cpp0x/alias-decl-55.C
new file mode 100644
index 0000000000..135ff53290
--- /dev/null
+++ b/gcc/testsuite/g++.dg/cpp0x/alias-decl-55.C
@@ -0,0 +1,23 @@
+// PR c++/71718
+// { dg-do compile { target c++11 } }
+
+template <typename T>
+class A : T{};
+
+template <typename T>
+using sp = A<T>;
+
+struct Base {};
+
+template <typename T, int num = 1>
+const sp<T>
+rec() // { dg-error "depth" }
+{
+ return rec<T, num - 1>();
+}
+
+static void f(void) {
+ rec<Base>();
+}
+
+// { dg-prune-output "compilation terminated" }
diff --git a/gcc/testsuite/g++.dg/cpp0x/alignas7.C b/gcc/testsuite/g++.dg/cpp0x/alignas7.C
new file mode 100644
index 0000000000..4ea1252685
--- /dev/null
+++ b/gcc/testsuite/g++.dg/cpp0x/alignas7.C
@@ -0,0 +1,13 @@
+// PR c++/71513
+// { dg-do compile { target c++11 } }
+
+template < int N, typename T >
+struct A
+{
+ enum alignas (N) E : T;
+};
+
+#define SA(X) static_assert((X), #X)
+
+constexpr int al = alignof(double);
+SA(alignof(A<al,char>::E) == al);
diff --git a/gcc/testsuite/g++.dg/cpp0x/auto48.C b/gcc/testsuite/g++.dg/cpp0x/auto48.C
new file mode 100644
index 0000000000..3e0b9ff601
--- /dev/null
+++ b/gcc/testsuite/g++.dg/cpp0x/auto48.C
@@ -0,0 +1,8 @@
+// PR c++/70540
+// { dg-do compile { target c++11 } }
+
+void
+foo ()
+{
+ auto f = [&] { return f; }; // { dg-error "before deduction" }
+}
diff --git a/gcc/testsuite/g++.dg/cpp0x/constexpr-71828.C b/gcc/testsuite/g++.dg/cpp0x/constexpr-71828.C
new file mode 100644
index 0000000000..b74cde965f
--- /dev/null
+++ b/gcc/testsuite/g++.dg/cpp0x/constexpr-71828.C
@@ -0,0 +1,5 @@
+// PR c++/71828
+// { dg-do compile { target c++11 } }
+
+constexpr _Complex int a { 1, 2 };
+static_assert (& __imag a != &__real a, "");
diff --git a/gcc/testsuite/g++.dg/cpp0x/constexpr-array16.C b/gcc/testsuite/g++.dg/cpp0x/constexpr-array16.C
new file mode 100644
index 0000000000..af2e58d142
--- /dev/null
+++ b/gcc/testsuite/g++.dg/cpp0x/constexpr-array16.C
@@ -0,0 +1,23 @@
+// PR c++/71166
+// { dg-do compile { target c++11 } }
+
+struct Foo { int value; };
+
+constexpr Foo MakeFoo() { return Foo{0}; }
+
+struct Bar {
+ Foo color = MakeFoo();
+};
+
+struct BarContainer {
+ Bar array[1];
+};
+
+Foo X ()
+{
+ return MakeFoo ();
+}
+
+void Foo() {
+ new BarContainer();
+}
diff --git a/gcc/testsuite/g++.dg/cpp0x/constexpr-array17.C b/gcc/testsuite/g++.dg/cpp0x/constexpr-array17.C
new file mode 100644
index 0000000000..c6afa507f0
--- /dev/null
+++ b/gcc/testsuite/g++.dg/cpp0x/constexpr-array17.C
@@ -0,0 +1,61 @@
+// PR c++/71092
+// { dg-do compile { target c++11 } }
+
+template <typename _Default> struct A { using type = _Default; };
+template <typename _Default, template <typename> class>
+using __detected_or = A<_Default>;
+template <typename _Default, template <typename> class _Op>
+using __detected_or_t = typename __detected_or<_Default, _Op>::type;
+template <typename _Tp> struct B { typedef _Tp value_type; };
+struct C {
+ template <typename _Tp> using __pointer = typename _Tp::pointer;
+};
+template <typename _Alloc> struct J : C {
+ using pointer = __detected_or_t<typename _Alloc::value_type *, __pointer>;
+};
+template <typename _T1> void _Construct(_T1 *) { new _T1; }
+struct D {
+ template <typename _ForwardIterator, typename _Size>
+ static _ForwardIterator __uninit_default_n(_ForwardIterator p1, _Size) {
+ _Construct(p1);
+ }
+};
+template <typename _ForwardIterator, typename _Size>
+void __uninitialized_default_n(_ForwardIterator p1, _Size) {
+ D::__uninit_default_n(p1, 0);
+}
+template <typename _ForwardIterator, typename _Size, typename _Tp>
+void __uninitialized_default_n_a(_ForwardIterator p1, _Size, _Tp) {
+ __uninitialized_default_n(p1, 0);
+}
+template <typename> struct __shared_ptr {
+ constexpr __shared_ptr() : _M_ptr(), _M_refcount() {}
+ int _M_ptr;
+ int _M_refcount;
+};
+template <typename _Alloc> struct F {
+ typedef _Alloc _Tp_alloc_type;
+ struct G {
+ typename J<_Tp_alloc_type>::pointer _M_start;
+ G(_Tp_alloc_type);
+ };
+ F(int, _Alloc p2) : _M_impl(p2) {}
+ G _M_impl;
+};
+template <typename _Tp, typename _Alloc = B<_Tp>> struct K : F<_Alloc> {
+ typedef _Alloc allocator_type;
+ K(int, allocator_type p2 = allocator_type()) : F<_Alloc>(0, p2) {
+ __uninitialized_default_n_a(this->_M_impl._M_start, 0, 0);
+ }
+};
+struct H {
+ H();
+ struct I {
+ __shared_ptr<int> trigger[1];
+ };
+ __shared_ptr<int> resetTrigger_;
+ K<I> states_;
+ __shared_ptr<int> triggerManager_;
+};
+__shared_ptr<int> a;
+H::H() : states_(0), triggerManager_(a) {}
diff --git a/gcc/testsuite/g++.dg/cpp0x/constexpr-list1.C b/gcc/testsuite/g++.dg/cpp0x/constexpr-list1.C
new file mode 100644
index 0000000000..f831a112cc
--- /dev/null
+++ b/gcc/testsuite/g++.dg/cpp0x/constexpr-list1.C
@@ -0,0 +1,15 @@
+// PR c++/72457
+// { dg-do compile { target c++11 } }
+
+struct A {
+ int i;
+ constexpr A(): i(0) {}
+};
+
+struct B: A { };
+
+struct C
+{
+ B b;
+ constexpr C() : b{} {}
+};
diff --git a/gcc/testsuite/g++.dg/cpp0x/constexpr-ptrmem6.C b/gcc/testsuite/g++.dg/cpp0x/constexpr-ptrmem6.C
new file mode 100644
index 0000000000..ed18ab1a63
--- /dev/null
+++ b/gcc/testsuite/g++.dg/cpp0x/constexpr-ptrmem6.C
@@ -0,0 +1,13 @@
+// PR c++/71896
+// { dg-do compile { target c++11 } }
+
+struct Foo {
+ int x;
+};
+
+constexpr bool compare(int Foo::*t) { return t == &Foo::x; }
+
+constexpr bool b = compare(&Foo::x);
+
+#define SA(X) static_assert ((X),#X)
+SA(b);
diff --git a/gcc/testsuite/g++.dg/cpp0x/constexpr-recursion2.C b/gcc/testsuite/g++.dg/cpp0x/constexpr-recursion2.C
index 978b998afe..ce2280c856 100644
--- a/gcc/testsuite/g++.dg/cpp0x/constexpr-recursion2.C
+++ b/gcc/testsuite/g++.dg/cpp0x/constexpr-recursion2.C
@@ -1,5 +1,6 @@
// PR c++/70344
// { dg-do compile { target c++11 } }
+// { dg-options -O }
struct Z
{
diff --git a/gcc/testsuite/g++.dg/cpp0x/conv-tmpl1.C b/gcc/testsuite/g++.dg/cpp0x/conv-tmpl1.C
index 7f866daf4e..eb40dd66a5 100644
--- a/gcc/testsuite/g++.dg/cpp0x/conv-tmpl1.C
+++ b/gcc/testsuite/g++.dg/cpp0x/conv-tmpl1.C
@@ -1,3 +1,4 @@
+// Test for Core 2189.
// { dg-do compile { target c++11 } }
template <class T>
diff --git a/gcc/testsuite/g++.dg/cpp0x/decltype65.C b/gcc/testsuite/g++.dg/cpp0x/decltype65.C
new file mode 100644
index 0000000000..6873488168
--- /dev/null
+++ b/gcc/testsuite/g++.dg/cpp0x/decltype65.C
@@ -0,0 +1,11 @@
+// PR c++/71511
+// { dg-do compile { target c++11 } }
+
+template < typename T >
+class A
+{
+ static int i;
+};
+
+//okay: template < typename T > int A <T>::i = 100;
+template < typename T > int decltype (A < T > ())::i = 100; // { dg-error "decltype" }
diff --git a/gcc/testsuite/g++.dg/cpp0x/decltype66.C b/gcc/testsuite/g++.dg/cpp0x/decltype66.C
new file mode 100644
index 0000000000..76ff1e2e7b
--- /dev/null
+++ b/gcc/testsuite/g++.dg/cpp0x/decltype66.C
@@ -0,0 +1,19 @@
+// PR c++/71350
+// { dg-do compile { target c++11 } }
+
+template<typename T, unsigned int N>
+struct Array
+{
+ T data[N];
+};
+
+template<typename T>
+struct Foo
+{
+ int operator[](const Array<int, 2>& i) const { return 0; }
+ auto bar() -> decltype((*this)[{1,2}] * 0) {
+ return *this; // { dg-error "cannot convert" }
+ }
+};
+
+template struct Foo<int>;
diff --git a/gcc/testsuite/g++.dg/cpp0x/inh-ctor20.C b/gcc/testsuite/g++.dg/cpp0x/inh-ctor20.C
new file mode 100644
index 0000000000..f33056df49
--- /dev/null
+++ b/gcc/testsuite/g++.dg/cpp0x/inh-ctor20.C
@@ -0,0 +1,16 @@
+// PR c++/70972
+// { dg-do compile { target c++11 } }
+
+struct moveonly {
+ moveonly(moveonly&&) = default;
+ moveonly() = default;
+};
+
+struct A {
+ A(moveonly) {}
+};
+struct B : A {
+ using A::A;
+};
+
+B b(moveonly{});
diff --git a/gcc/testsuite/g++.dg/cpp0x/inh-ctor21.C b/gcc/testsuite/g++.dg/cpp0x/inh-ctor21.C
new file mode 100644
index 0000000000..64655068a0
--- /dev/null
+++ b/gcc/testsuite/g++.dg/cpp0x/inh-ctor21.C
@@ -0,0 +1,19 @@
+// PR c++/70972
+// { dg-do run { target c++11 } }
+
+struct abort_on_copy{
+ abort_on_copy(abort_on_copy&&) = default;
+ abort_on_copy(const abort_on_copy&) { __builtin_abort(); }
+ abort_on_copy() = default;
+};
+
+struct A {
+ A(abort_on_copy) {}
+};
+struct B : A {
+ using A::A;
+};
+
+int main() {
+ B b(abort_on_copy{});
+}
diff --git a/gcc/testsuite/g++.dg/cpp0x/initlist-base2.C b/gcc/testsuite/g++.dg/cpp0x/initlist-base2.C
new file mode 100644
index 0000000000..68ccad908c
--- /dev/null
+++ b/gcc/testsuite/g++.dg/cpp0x/initlist-base2.C
@@ -0,0 +1,21 @@
+// PR c++/55922
+// { dg-do run { target c++11 } }
+
+bool called = false;
+
+struct Base {
+ Base() { if (called) throw 1; called = true; }
+};
+
+struct B1 : virtual Base {
+ B1() { }
+};
+
+struct C : B1, virtual Base {
+ C() : B1{}
+ { }
+};
+
+int main() {
+ C c;
+}
diff --git a/gcc/testsuite/g++.dg/cpp0x/initlist-base3.C b/gcc/testsuite/g++.dg/cpp0x/initlist-base3.C
new file mode 100644
index 0000000000..9febac304e
--- /dev/null
+++ b/gcc/testsuite/g++.dg/cpp0x/initlist-base3.C
@@ -0,0 +1,17 @@
+// PR c++/71774
+// { dg-do compile { target c++11 } }
+
+class Meow
+{
+ protected:
+ Meow() =default;
+ virtual void f() {}
+};
+
+class Purr : public Meow
+{
+ public:
+ Purr()
+ : Meow{}
+ {}
+};
diff --git a/gcc/testsuite/g++.dg/cpp0x/initlist-template1.C b/gcc/testsuite/g++.dg/cpp0x/initlist-template1.C
new file mode 100644
index 0000000000..a24e205d71
--- /dev/null
+++ b/gcc/testsuite/g++.dg/cpp0x/initlist-template1.C
@@ -0,0 +1,15 @@
+// PR c++/70824
+// { dg-do compile { target c++11 } }
+
+#include <initializer_list>
+
+constexpr
+int
+max(std::initializer_list<int> __l)
+{ return *__l.begin(); }
+
+template <class Src>
+void
+a() {
+ const int v = max({1});
+}
diff --git a/gcc/testsuite/g++.dg/cpp0x/lambda/lambda-conv11.C b/gcc/testsuite/g++.dg/cpp0x/lambda/lambda-conv11.C
new file mode 100644
index 0000000000..4b8d6487f5
--- /dev/null
+++ b/gcc/testsuite/g++.dg/cpp0x/lambda/lambda-conv11.C
@@ -0,0 +1,10 @@
+// PR c++/71105
+// { dg-do compile { target c++11 } }
+
+void foo()
+{
+ int i;
+ static_cast<void(*)()>([i]{}); // { dg-error "invalid static_cast" }
+ static_cast<void(*)()>([=]{}); // { dg-error "invalid static_cast" }
+ static_cast<void(*)()>([&]{}); // { dg-error "invalid static_cast" }
+}
diff --git a/gcc/testsuite/g++.dg/cpp0x/lambda/lambda-deduce3.C b/gcc/testsuite/g++.dg/cpp0x/lambda/lambda-deduce3.C
new file mode 100644
index 0000000000..68ac29c9ea
--- /dev/null
+++ b/gcc/testsuite/g++.dg/cpp0x/lambda/lambda-deduce3.C
@@ -0,0 +1,15 @@
+// PR c++/69223
+// { dg-do compile { target c++11 } }
+
+template <class T> struct A
+{
+ T x[20];
+};
+
+int main()
+{
+ auto l = [](const A<int>& i){ return i; };
+ A<int> a;
+
+ l(a);
+}
diff --git a/gcc/testsuite/g++.dg/cpp0x/lambda/lambda-ice16.C b/gcc/testsuite/g++.dg/cpp0x/lambda/lambda-ice16.C
new file mode 100644
index 0000000000..f7dea7ca65
--- /dev/null
+++ b/gcc/testsuite/g++.dg/cpp0x/lambda/lambda-ice16.C
@@ -0,0 +1,8 @@
+// PR c++/70781
+// { dg-do compile { target c++11 } }
+
+template < typename T >
+void foo ()
+{
+ T ([=] (S) { [=] {}; }); // { dg-error "" }
+}
diff --git a/gcc/testsuite/g++.dg/cpp0x/pr68724.C b/gcc/testsuite/g++.dg/cpp0x/pr68724.C
new file mode 100644
index 0000000000..ff6d84dc3f
--- /dev/null
+++ b/gcc/testsuite/g++.dg/cpp0x/pr68724.C
@@ -0,0 +1,15 @@
+// PR 68724 ICE in unificiation
+// { dg-do compile { target c++11 } }
+
+template <typename _Tp, _Tp>
+struct integral_constant
+{
+};
+
+integral_constant<bool, true> inst;
+
+template <typename _Tp>
+struct integral_constant<bool, __is_enum(_Tp)> // { dg-error "" }
+{
+};
+
diff --git a/gcc/testsuite/g++.dg/cpp0x/pr70869.C b/gcc/testsuite/g++.dg/cpp0x/pr70869.C
new file mode 100644
index 0000000000..84c532b677
--- /dev/null
+++ b/gcc/testsuite/g++.dg/cpp0x/pr70869.C
@@ -0,0 +1,25 @@
+// PR c++/70869
+// { dg-do run { target c++11 } }
+
+#include <initializer_list>
+
+struct A
+{
+ int f () { return 1; }
+ int g () { return 2; }
+ int h () { return 3; }
+};
+
+int
+main ()
+{
+ int cnt = 0;
+ for (const auto &m : { &A::f, &A::g, &A::h })
+ {
+ A a;
+ if ((a.*m) () != ++cnt)
+ __builtin_abort ();
+ }
+ if (cnt != 3)
+ __builtin_abort ();
+}
diff --git a/gcc/testsuite/g++.dg/cpp0x/pr71054.C b/gcc/testsuite/g++.dg/cpp0x/pr71054.C
new file mode 100644
index 0000000000..518bafcbd2
--- /dev/null
+++ b/gcc/testsuite/g++.dg/cpp0x/pr71054.C
@@ -0,0 +1,21 @@
+// PR c++/71054
+// { dg-do compile { target c++11 } }
+
+#include <initializer_list>
+
+template <typename D, typename T = decltype (&D::U)>
+struct S
+{
+ struct A
+ {
+ int a;
+ int b;
+ T p;
+ };
+ S () { std::initializer_list<A> a{ {0, 0, &D::V} }; }
+};
+struct R {
+ void V (int);
+ void U (int);
+};
+S<R> b;
diff --git a/gcc/testsuite/g++.dg/cpp0x/pr71739.C b/gcc/testsuite/g++.dg/cpp0x/pr71739.C
new file mode 100644
index 0000000000..b31a580cd0
--- /dev/null
+++ b/gcc/testsuite/g++.dg/cpp0x/pr71739.C
@@ -0,0 +1,5 @@
+// PR c++/71739
+// { dg-do compile { target c++11 } }
+
+template <int N> struct alignas(N) A;
+template <int N> struct alignas(N) A {};
diff --git a/gcc/testsuite/g++.dg/cpp0x/range-for31.C b/gcc/testsuite/g++.dg/cpp0x/range-for31.C
new file mode 100644
index 0000000000..13daf61923
--- /dev/null
+++ b/gcc/testsuite/g++.dg/cpp0x/range-for31.C
@@ -0,0 +1,9 @@
+// PR c++/71604
+// { dg-do compile { target c++11 } }
+
+void foo ()
+{
+ int a[2] = { 1, 2 };
+ for (struct S { S (int) {} } S : a) // { dg-error "types may not be defined" }
+ ;
+}
diff --git a/gcc/testsuite/g++.dg/cpp0x/range-for8.C b/gcc/testsuite/g++.dg/cpp0x/range-for8.C
index a389f66f60..38fe4561eb 100644
--- a/gcc/testsuite/g++.dg/cpp0x/range-for8.C
+++ b/gcc/testsuite/g++.dg/cpp0x/range-for8.C
@@ -7,9 +7,9 @@
void test()
{
- for (struct S { } *x : { (S*)0, (S*)0 } )
+ for (struct S { } *x : { (S*)0, (S*)0 } ) // { dg-error "types may not be defined" }
;
- for (struct S { } x : { S(), S() } )
+ for (struct S { } x : { S(), S() } ) // { dg-error "types may not be defined" }
;
}
diff --git a/gcc/testsuite/g++.dg/cpp0x/rv-bitfield3.C b/gcc/testsuite/g++.dg/cpp0x/rv-bitfield3.C
new file mode 100644
index 0000000000..6b7cfba0d3
--- /dev/null
+++ b/gcc/testsuite/g++.dg/cpp0x/rv-bitfield3.C
@@ -0,0 +1,14 @@
+// PR c++/71576
+// { dg-do compile { target c++11 } }
+
+template < typename T > T && foo ();
+
+struct A
+{
+ int i:5;
+};
+
+void foo ()
+{
+ int &&j = foo < A > ().i;
+}
diff --git a/gcc/testsuite/g++.dg/cpp0x/sfinae57.C b/gcc/testsuite/g++.dg/cpp0x/sfinae57.C
new file mode 100644
index 0000000000..975a330b9b
--- /dev/null
+++ b/gcc/testsuite/g++.dg/cpp0x/sfinae57.C
@@ -0,0 +1,16 @@
+// PR c++/71495
+// { dg-do compile { target c++11 } }
+
+struct A;
+template <class T> void f(T); // { dg-bogus "initializing" }
+template <class T> T&& declval();
+struct B
+{
+ template <class T, class U> static decltype(f<T>(declval<U>())) g(int);
+ template <class T, class U> void g(...);
+} b;
+
+int main()
+{
+ b.g<A,A>(42);
+}
diff --git a/gcc/testsuite/g++.dg/cpp0x/variadic-mangle1a.C b/gcc/testsuite/g++.dg/cpp0x/variadic-mangle1a.C
new file mode 100644
index 0000000000..b230ffa656
--- /dev/null
+++ b/gcc/testsuite/g++.dg/cpp0x/variadic-mangle1a.C
@@ -0,0 +1,12 @@
+// Test for sZ mangling.
+// { dg-do compile { target c++11 } }
+// { dg-final { scan-assembler "_Z1fIJidEEv1AIXstDpT_EE" } }
+// { dg-options -fabi-version=9 }
+
+template <int I> struct A { };
+template <typename... Ts> void f(A<sizeof...(Ts)>);
+
+int main()
+{
+ f<int,double>(A<2>());
+}
diff --git a/gcc/testsuite/g++.dg/cpp0x/variadic-mangle2a.C b/gcc/testsuite/g++.dg/cpp0x/variadic-mangle2a.C
new file mode 100644
index 0000000000..3ac1517670
--- /dev/null
+++ b/gcc/testsuite/g++.dg/cpp0x/variadic-mangle2a.C
@@ -0,0 +1,19 @@
+// Testcase from cxx-abi-dev.
+// { dg-do compile { target c++11 } }
+// { dg-options "-fabi-version=9" }
+
+struct A {
+ template<int...T> using N = int[sizeof...(T)];
+ template<int...A> void f(N<A...> &);
+
+ template<typename...T> using M = int[sizeof...(T)];
+ template<typename...A> void g(M<A...> &);
+};
+void g(A a)
+{
+ int arr[3];
+ // { dg-final { scan-assembler "_ZN1A1fIJLi1ELi2ELi3EEEEvRAszspT__i" } }
+ a.f<1,2,3>(arr);
+ // { dg-final { scan-assembler "_ZN1A1gIJiiiEEEvRAstDpT__i" } }
+ a.g<int,int,int>(arr);
+}
diff --git a/gcc/testsuite/g++.dg/cpp0x/variadic-mangle3.C b/gcc/testsuite/g++.dg/cpp0x/variadic-mangle3.C
new file mode 100644
index 0000000000..f239ef717d
--- /dev/null
+++ b/gcc/testsuite/g++.dg/cpp0x/variadic-mangle3.C
@@ -0,0 +1,10 @@
+// Testcase from cxx-abi-dev.
+// { dg-do compile { target c++11 } }
+// { dg-final { scan-assembler "_ZN1A1fIJiiEiJiiiEEEvRAsPDpT_T0_DpT1_E_iS3_S5_" } }
+
+struct A {
+ template<typename...T> using N = int[sizeof...(T)];
+ template<typename...A, typename B, typename...C>
+ void f(N<A..., B, C...> &, B, C...);
+};
+void g(A a) { int arr[6]; a.f<int, int>(arr, 1, 2, 3, 4); }
diff --git a/gcc/testsuite/g++.dg/cpp0x/variadic-mangle3a.C b/gcc/testsuite/g++.dg/cpp0x/variadic-mangle3a.C
new file mode 100644
index 0000000000..eba8f591c3
--- /dev/null
+++ b/gcc/testsuite/g++.dg/cpp0x/variadic-mangle3a.C
@@ -0,0 +1,11 @@
+// Testcase from cxx-abi-dev.
+// { dg-do compile { target c++11 } }
+// { dg-options -fabi-version=9 }
+// { dg-final { scan-assembler "_ZN1A1fIJiiEiJiiiEEEvRAstDpT1__iT0_S2_" } }
+
+struct A {
+ template<typename...T> using N = int[sizeof...(T)];
+ template<typename...A, typename B, typename...C>
+ void f(N<A..., B, C...> &, B, C...);
+};
+void g(A a) { int arr[6]; a.f<int, int>(arr, 1, 2, 3, 4); }
diff --git a/gcc/testsuite/g++.dg/cpp0x/variadic-nested1.C b/gcc/testsuite/g++.dg/cpp0x/variadic-nested1.C
new file mode 100644
index 0000000000..abfb49a712
--- /dev/null
+++ b/gcc/testsuite/g++.dg/cpp0x/variadic-nested1.C
@@ -0,0 +1,9 @@
+// PR c++/71833
+// { dg-do compile { target c++11 } }
+
+template < typename ... Ts > struct A
+{
+ template < Ts ..., typename ... Us > struct B {};
+};
+
+A <>::B < int > e;