summaryrefslogtreecommitdiff
path: root/gcc/testsuite/g++.dg
diff options
context:
space:
mode:
Diffstat (limited to 'gcc/testsuite/g++.dg')
-rw-r--r--gcc/testsuite/g++.dg/concepts/pr84330.C12
-rw-r--r--gcc/testsuite/g++.dg/cpp0x/auto49.C12
-rw-r--r--gcc/testsuite/g++.dg/cpp0x/auto50.C7
-rw-r--r--gcc/testsuite/g++.dg/cpp0x/constexpr-84449.C14
-rw-r--r--gcc/testsuite/g++.dg/cpp0x/constexpr-ctor21.C15
-rw-r--r--gcc/testsuite/g++.dg/cpp0x/dc9.C30
-rw-r--r--gcc/testsuite/g++.dg/cpp0x/initlist98.C17
-rw-r--r--gcc/testsuite/g++.dg/cpp0x/lambda/lambda-ice26.C5
-rw-r--r--gcc/testsuite/g++.dg/cpp0x/lambda/lambda-ice27.C8
-rw-r--r--gcc/testsuite/g++.dg/cpp0x/lambda/lambda-vla1.C9
-rw-r--r--gcc/testsuite/g++.dg/cpp0x/noexcept32.C14
-rw-r--r--gcc/testsuite/g++.dg/cpp0x/nsdmi-empty1.C18
-rw-r--r--gcc/testsuite/g++.dg/cpp0x/pr77655.C13
-rw-r--r--gcc/testsuite/g++.dg/cpp0x/variadic172.C20
-rw-r--r--gcc/testsuite/g++.dg/cpp1y/constexpr-84192.C41
-rw-r--r--gcc/testsuite/g++.dg/cpp1y/lambda-generic-variadic14.C17
-rw-r--r--gcc/testsuite/g++.dg/cpp1y/pr84496.C44
-rw-r--r--gcc/testsuite/g++.dg/cpp1z/class-deduction47.C7
-rw-r--r--gcc/testsuite/g++.dg/cpp1z/class-deduction48.C5
-rw-r--r--gcc/testsuite/g++.dg/cpp1z/constexpr-if14.C14
-rw-r--r--gcc/testsuite/g++.dg/cpp1z/decomp-lambda1.C10
-rw-r--r--gcc/testsuite/g++.dg/cpp1z/feat-cxx1z.C4
-rw-r--r--gcc/testsuite/g++.dg/cpp1z/launder7.C10
-rw-r--r--gcc/testsuite/g++.dg/cpp1z/launder8.C11
-rw-r--r--gcc/testsuite/g++.dg/ext/attrib55.C99
-rw-r--r--gcc/testsuite/g++.dg/ext/attrib56.C6
-rw-r--r--gcc/testsuite/g++.dg/ext/stmtexpr22.C13
-rw-r--r--gcc/testsuite/g++.dg/ext/vector34.C8
-rw-r--r--gcc/testsuite/g++.dg/gomp/pr84430.C12
-rw-r--r--gcc/testsuite/g++.dg/gomp/pr84448.C17
-rw-r--r--gcc/testsuite/g++.dg/lookup/pr84375.C9
-rw-r--r--gcc/testsuite/g++.dg/opt/pr84272.C23
-rw-r--r--gcc/testsuite/g++.dg/parse/error59.C6
-rw-r--r--gcc/testsuite/g++.dg/parse/friend12.C1
-rw-r--r--gcc/testsuite/g++.dg/pr84279.C35
-rw-r--r--gcc/testsuite/g++.dg/template/instantiate5.C9
-rw-r--r--gcc/testsuite/g++.dg/template/nontype-fn1.C11
-rw-r--r--gcc/testsuite/g++.dg/template/overload15.C16
-rw-r--r--gcc/testsuite/g++.dg/template/sizeof16.C7
-rw-r--r--gcc/testsuite/g++.dg/template/sizeof17.C7
-rw-r--r--gcc/testsuite/g++.dg/torture/pr84190.C20
-rw-r--r--gcc/testsuite/g++.dg/torture/pr84502.C20
-rw-r--r--gcc/testsuite/g++.dg/tree-ssa/volatile1.C28
-rw-r--r--gcc/testsuite/g++.dg/warn/Wimplicit-fallthrough-3.C31
-rw-r--r--gcc/testsuite/g++.dg/warn/Wstringop-truncation-1.C126
-rw-r--r--gcc/testsuite/g++.dg/warn/Wunused-var-30.C11
-rw-r--r--gcc/testsuite/g++.dg/warn/effc4.C10
47 files changed, 877 insertions, 5 deletions
diff --git a/gcc/testsuite/g++.dg/concepts/pr84330.C b/gcc/testsuite/g++.dg/concepts/pr84330.C
new file mode 100644
index 00000000000..975ee8941db
--- /dev/null
+++ b/gcc/testsuite/g++.dg/concepts/pr84330.C
@@ -0,0 +1,12 @@
+// PR c++/84330
+// { dg-options "-fconcepts" }
+
+struct A
+{
+ template<typename T> requires sizeof(T) >> 0 void foo(T); // { dg-error "predicate constraint" }
+
+ void bar()
+ {
+ foo(0); // { dg-error "no matching" }
+ }
+};
diff --git a/gcc/testsuite/g++.dg/cpp0x/auto49.C b/gcc/testsuite/g++.dg/cpp0x/auto49.C
new file mode 100644
index 00000000000..25b09dfdec1
--- /dev/null
+++ b/gcc/testsuite/g++.dg/cpp0x/auto49.C
@@ -0,0 +1,12 @@
+// PR c++/84350
+// { dg-do compile { target c++11 } }
+
+template<typename... T> void foo(T... t)
+{
+ new auto(t...); // { dg-error "invalid use" }
+}
+
+void bar()
+{
+ foo();
+}
diff --git a/gcc/testsuite/g++.dg/cpp0x/auto50.C b/gcc/testsuite/g++.dg/cpp0x/auto50.C
new file mode 100644
index 00000000000..814892d2afa
--- /dev/null
+++ b/gcc/testsuite/g++.dg/cpp0x/auto50.C
@@ -0,0 +1,7 @@
+// PR c++/84348
+// { dg-do compile { target c++11 } }
+
+template<typename> struct A
+{
+ friend auto foo; // { dg-error "cannot be declared friend" }
+};
diff --git a/gcc/testsuite/g++.dg/cpp0x/constexpr-84449.C b/gcc/testsuite/g++.dg/cpp0x/constexpr-84449.C
new file mode 100644
index 00000000000..f187c425272
--- /dev/null
+++ b/gcc/testsuite/g++.dg/cpp0x/constexpr-84449.C
@@ -0,0 +1,14 @@
+// PR c++/84449
+// { dg-do compile { target c++11 } }
+
+struct A
+{
+ constexpr A (int) {}
+ ~A () = delete;
+};
+
+struct B
+{
+ A a;
+ constexpr B () : a (0) {} // { dg-error "use of deleted function" }
+};
diff --git a/gcc/testsuite/g++.dg/cpp0x/constexpr-ctor21.C b/gcc/testsuite/g++.dg/cpp0x/constexpr-ctor21.C
new file mode 100644
index 00000000000..4bf57b9e897
--- /dev/null
+++ b/gcc/testsuite/g++.dg/cpp0x/constexpr-ctor21.C
@@ -0,0 +1,15 @@
+// PR c++/83835
+// { dg-do compile { target c++11 } }
+
+struct Z
+{
+ void const * p_;
+ constexpr Z( void const * p ): p_( p ) {}
+ ~Z();
+};
+
+struct Y
+{
+ Z z_;
+ constexpr Y() noexcept: z_( this ) {}
+};
diff --git a/gcc/testsuite/g++.dg/cpp0x/dc9.C b/gcc/testsuite/g++.dg/cpp0x/dc9.C
new file mode 100644
index 00000000000..b87f5ce618d
--- /dev/null
+++ b/gcc/testsuite/g++.dg/cpp0x/dc9.C
@@ -0,0 +1,30 @@
+// PR c++/70468
+// { dg-do compile { target c++11 } }
+// { dg-additional-options -w }
+
+struct S {};
+
+template < typename = S >
+class A
+{
+public:
+ A () : f0 (), f1 () {} // { dg-error "" }
+
+private:
+ typedef A<> f0;
+ int f1;
+};
+
+template < typename = S, typename = S >
+class B
+{
+};
+
+template < typename T1, typename T2 >
+B < T1, T2 > &operator<< (B < T1, T2 >&, const int)
+{
+ A<> ();
+}
+
+template
+B < S, S > &operator<< (B < S, S >&, const int);
diff --git a/gcc/testsuite/g++.dg/cpp0x/initlist98.C b/gcc/testsuite/g++.dg/cpp0x/initlist98.C
new file mode 100644
index 00000000000..4f2fcd20219
--- /dev/null
+++ b/gcc/testsuite/g++.dg/cpp0x/initlist98.C
@@ -0,0 +1,17 @@
+// PR c++/83227
+// { dg-do compile { target c++11 } }
+
+#include <initializer_list>
+
+template <typename d> struct f {
+ f(std::initializer_list<d>) {}
+};
+
+struct h {};
+struct i : h {
+ i();
+};
+void foo(f<h>);
+int main() {
+ foo({i{}});
+}
diff --git a/gcc/testsuite/g++.dg/cpp0x/lambda/lambda-ice26.C b/gcc/testsuite/g++.dg/cpp0x/lambda/lambda-ice26.C
new file mode 100644
index 00000000000..7544b270256
--- /dev/null
+++ b/gcc/testsuite/g++.dg/cpp0x/lambda/lambda-ice26.C
@@ -0,0 +1,5 @@
+// PR c++/84455
+// { dg-do compile { target c++11 } }
+// { dg-options "--param ggc-min-heapsize=0" }
+
+#include "lambda-ice14.C"
diff --git a/gcc/testsuite/g++.dg/cpp0x/lambda/lambda-ice27.C b/gcc/testsuite/g++.dg/cpp0x/lambda/lambda-ice27.C
new file mode 100644
index 00000000000..04c44a3b57f
--- /dev/null
+++ b/gcc/testsuite/g++.dg/cpp0x/lambda/lambda-ice27.C
@@ -0,0 +1,8 @@
+// PR c++/84446
+// { dg-do compile { target c++11 } }
+
+template<int> void foo()
+{
+ int i,
+ i = [] { virtual }(); // { dg-error "redeclaration|expected" }
+}
diff --git a/gcc/testsuite/g++.dg/cpp0x/lambda/lambda-vla1.C b/gcc/testsuite/g++.dg/cpp0x/lambda/lambda-vla1.C
new file mode 100644
index 00000000000..91498c4589a
--- /dev/null
+++ b/gcc/testsuite/g++.dg/cpp0x/lambda/lambda-vla1.C
@@ -0,0 +1,9 @@
+// PR c++/84429
+// { dg-do compile { target c++11 } }
+// { dg-options "" }
+
+void foo(int i)
+{
+ char x[i];
+ [&]{ [&]{ return x; }; };
+}
diff --git a/gcc/testsuite/g++.dg/cpp0x/noexcept32.C b/gcc/testsuite/g++.dg/cpp0x/noexcept32.C
new file mode 100644
index 00000000000..9a435049599
--- /dev/null
+++ b/gcc/testsuite/g++.dg/cpp0x/noexcept32.C
@@ -0,0 +1,14 @@
+// PR c++/84045
+// { dg-do compile { target c++11 } }
+
+template <typename T> struct K {
+ static const bool d = true;
+};
+template <typename T, typename> struct B {
+ typedef K<T> D;
+ void foo () noexcept (D::d);
+};
+template <typename T> struct P {
+ P () noexcept (K<T>::d);
+};
+P<int> p;
diff --git a/gcc/testsuite/g++.dg/cpp0x/nsdmi-empty1.C b/gcc/testsuite/g++.dg/cpp0x/nsdmi-empty1.C
new file mode 100644
index 00000000000..66d94e53824
--- /dev/null
+++ b/gcc/testsuite/g++.dg/cpp0x/nsdmi-empty1.C
@@ -0,0 +1,18 @@
+// PR c++/82764
+// { dg-do compile { target c++11 } }
+
+struct Empty {};
+struct Empty2 : Empty {};
+
+struct A : Empty2
+{
+ int x {1};
+ int y {2};
+};
+
+struct B
+{
+ A a {};
+};
+
+B b;
diff --git a/gcc/testsuite/g++.dg/cpp0x/pr77655.C b/gcc/testsuite/g++.dg/cpp0x/pr77655.C
new file mode 100644
index 00000000000..ab2e942cbb8
--- /dev/null
+++ b/gcc/testsuite/g++.dg/cpp0x/pr77655.C
@@ -0,0 +1,13 @@
+// PR c++/77655
+// { dg-do compile { target c++11 } }
+
+template <class F> void g(F);
+template <class... A>
+auto h(A &&... a) -> decltype(g(0, g<decltype(a)>(a)...)) { // { dg-error "no matching" }
+ h([] {}); // { dg-error "no matching" }
+}
+
+int main() {
+ h();
+ return 0;
+}
diff --git a/gcc/testsuite/g++.dg/cpp0x/variadic172.C b/gcc/testsuite/g++.dg/cpp0x/variadic172.C
new file mode 100644
index 00000000000..d25d3029a9d
--- /dev/null
+++ b/gcc/testsuite/g++.dg/cpp0x/variadic172.C
@@ -0,0 +1,20 @@
+// PR c++/84454
+// { dg-do compile { target c++11 } }
+
+template<class F, class... A>
+void
+g(F&&, A&&...)
+{}
+
+template<class... A>
+auto
+h(A&&... a) -> decltype(g(0, g<decltype(a)>(a)...))
+{
+ g(a...); // { dg-error "no match" }
+}
+
+int
+main()
+{
+ h();
+}
diff --git a/gcc/testsuite/g++.dg/cpp1y/constexpr-84192.C b/gcc/testsuite/g++.dg/cpp1y/constexpr-84192.C
new file mode 100644
index 00000000000..ad9458d238f
--- /dev/null
+++ b/gcc/testsuite/g++.dg/cpp1y/constexpr-84192.C
@@ -0,0 +1,41 @@
+// PR c++/84192
+// { dg-do compile { target c++14 } }
+// { dg-options "" }
+
+bool
+f1 ()
+{
+ return ({ return true; }) && false; // { dg-error "could not convert" }
+}
+
+void
+f2 ()
+{
+ for (;;)
+ constexpr bool b = ({ break; false; }) && false; // { dg-error "statement is not a constant expression" }
+}
+
+constexpr bool
+f3 (int n)
+{
+ bool b = false;
+ for (int i = 0; i < n; i++)
+ b = ({ break; }); // { dg-error "void value not ignored as it ought to be" }
+ return b;
+}
+
+constexpr bool b = f3 (4);
+
+bool
+f4 ()
+{
+ constexpr bool b = ({ return true; }) && false; // { dg-error "could not convert" }
+ return false;
+}
+
+constexpr bool
+f5 (int x)
+{
+ constexpr bool b = ({ switch (x) case 0: true; }) && false; // { dg-error "could not convert" }
+ return false;
+}
diff --git a/gcc/testsuite/g++.dg/cpp1y/lambda-generic-variadic14.C b/gcc/testsuite/g++.dg/cpp1y/lambda-generic-variadic14.C
new file mode 100644
index 00000000000..76567966293
--- /dev/null
+++ b/gcc/testsuite/g++.dg/cpp1y/lambda-generic-variadic14.C
@@ -0,0 +1,17 @@
+// PR c++/84368
+// { dg-do compile { target c++14 } }
+
+template < typename ... T >
+void sink(T ...){}
+
+template < typename ... T >
+void foo(T ... v){
+ [](auto ... v){
+ auto bar = [](auto, auto){ return 0; };
+ sink(bar(v, T{}) ...);
+ }(v ...);
+}
+
+int main(){
+ foo(0);
+}
diff --git a/gcc/testsuite/g++.dg/cpp1y/pr84496.C b/gcc/testsuite/g++.dg/cpp1y/pr84496.C
new file mode 100644
index 00000000000..028d00235cd
--- /dev/null
+++ b/gcc/testsuite/g++.dg/cpp1y/pr84496.C
@@ -0,0 +1,44 @@
+// PR c++/84496
+// { dg-do compile { target c++14 } }
+
+template <typename T, T n> struct C { static constexpr T D = n; };
+struct E : C<bool, false> {};
+template <typename> struct F : C<bool, false> {};
+template <typename T> T foo ();
+template <typename> struct H { typedef int G; };
+template <typename> class I;
+struct L;
+template <typename, typename> struct J;
+template <bool, bool, typename...> struct K;
+struct R {
+ template <typename M, typename... N>
+ static J<decltype (foo<M> () (foo<N>...)), L> o;
+};
+template <typename P, typename... Q> struct K<false, false, P, Q...> : R {
+ typedef decltype (o<P, Q...>) G;
+};
+template <typename P, typename... Q>
+struct D : K<E::D, F<typename H<P>::G>::D, P, Q...> {};
+template <typename P, typename... Q> struct I<P (Q...)> : D<P, Q...> {};
+template <typename> class function;
+template <typename S, typename... Q> struct function<S (Q...)> {
+ template <typename T, typename = typename I<T (Q...)>::G> struct C;
+ template <typename, typename> using U = int;
+ template <typename P, typename = U<int, void>, typename = U<C<P>, void>>
+ function (P);
+};
+template <typename S, typename... Q>
+template <typename P, typename, typename>
+function<S (Q...)>::function (P)
+{
+}
+void bar (function<void (int)>);
+
+void
+baz ()
+{
+ auto a = [] {
+ static int counter;
+ bar ([] (auto) { counter++; });
+ };
+}
diff --git a/gcc/testsuite/g++.dg/cpp1z/class-deduction47.C b/gcc/testsuite/g++.dg/cpp1z/class-deduction47.C
new file mode 100644
index 00000000000..3e47f58e698
--- /dev/null
+++ b/gcc/testsuite/g++.dg/cpp1z/class-deduction47.C
@@ -0,0 +1,7 @@
+// PR c++/84376
+
+template<int> struct A {};
+
+template<typename T> T foo() { return T(); }
+
+template<> A foo<A>(); // { dg-error "A" }
diff --git a/gcc/testsuite/g++.dg/cpp1z/class-deduction48.C b/gcc/testsuite/g++.dg/cpp1z/class-deduction48.C
new file mode 100644
index 00000000000..1cfdc44a993
--- /dev/null
+++ b/gcc/testsuite/g++.dg/cpp1z/class-deduction48.C
@@ -0,0 +1,5 @@
+// PR c++/82468
+// { dg-options -std=c++17 }
+
+template <template <class> class TT>
+TT(double) -> TT<int>; // { dg-error "template template" }
diff --git a/gcc/testsuite/g++.dg/cpp1z/constexpr-if14.C b/gcc/testsuite/g++.dg/cpp1z/constexpr-if14.C
new file mode 100644
index 00000000000..f6cc39a0c2f
--- /dev/null
+++ b/gcc/testsuite/g++.dg/cpp1z/constexpr-if14.C
@@ -0,0 +1,14 @@
+// PR c++/84421
+// { dg-options -std=c++17 }
+
+struct A{
+ constexpr operator bool() const { return true; }
+};
+
+int main(){
+ auto f = [](auto v){
+ if constexpr(v){}
+ };
+ A a;
+ f(a);
+}
diff --git a/gcc/testsuite/g++.dg/cpp1z/decomp-lambda1.C b/gcc/testsuite/g++.dg/cpp1z/decomp-lambda1.C
new file mode 100644
index 00000000000..fbab0259643
--- /dev/null
+++ b/gcc/testsuite/g++.dg/cpp1z/decomp-lambda1.C
@@ -0,0 +1,10 @@
+// PR c++/84420
+// { dg-additional-options -std=c++17 }
+
+int main(){
+ int a[1]{};
+ [&a]{
+ auto [v] = a;
+ (void)v;
+ }();
+}
diff --git a/gcc/testsuite/g++.dg/cpp1z/feat-cxx1z.C b/gcc/testsuite/g++.dg/cpp1z/feat-cxx1z.C
index b2f046b5c91..2ab1b4e3e86 100644
--- a/gcc/testsuite/g++.dg/cpp1z/feat-cxx1z.C
+++ b/gcc/testsuite/g++.dg/cpp1z/feat-cxx1z.C
@@ -358,8 +358,8 @@
#ifndef __cpp_deduction_guides
# error "__cpp_deduction_guides"
-#elif __cpp_deduction_guides != 201606
-# error "__cpp_deduction_guides != 201606"
+#elif __cpp_deduction_guides != 201611
+# error "__cpp_deduction_guides != 201611"
#endif
#ifndef __cpp_if_constexpr
diff --git a/gcc/testsuite/g++.dg/cpp1z/launder7.C b/gcc/testsuite/g++.dg/cpp1z/launder7.C
new file mode 100644
index 00000000000..e418329f931
--- /dev/null
+++ b/gcc/testsuite/g++.dg/cpp1z/launder7.C
@@ -0,0 +1,10 @@
+// PR c++/84445
+// { dg-do compile }
+
+struct A { virtual void foo (); };
+
+void
+bar (A *p)
+{
+ __builtin_launder (p)->foo ();
+}
diff --git a/gcc/testsuite/g++.dg/cpp1z/launder8.C b/gcc/testsuite/g++.dg/cpp1z/launder8.C
new file mode 100644
index 00000000000..f57e91b60cd
--- /dev/null
+++ b/gcc/testsuite/g++.dg/cpp1z/launder8.C
@@ -0,0 +1,11 @@
+// PR c++/84444
+// { dg-do compile }
+// { dg-options "-O2" }
+
+struct A {};
+
+__UINTPTR_TYPE__
+foo (A *p)
+{
+ return (__UINTPTR_TYPE__) __builtin_launder (p);
+}
diff --git a/gcc/testsuite/g++.dg/ext/attrib55.C b/gcc/testsuite/g++.dg/ext/attrib55.C
new file mode 100644
index 00000000000..dc0cdc48b7a
--- /dev/null
+++ b/gcc/testsuite/g++.dg/ext/attrib55.C
@@ -0,0 +1,99 @@
+// PR c++/84314
+// { dg-do compile { target { { i?86-*-* x86_64-*-* } && ia32 } } }
+// { dg-additional-options "-w -std=c++11" }
+
+template <typename a, a b> struct c { static constexpr a d = b; };
+template <bool b> using e = c<bool, b>;
+template <bool, typename, typename> struct conditional;
+template <typename...> struct f;
+template <typename g, typename h>
+struct f<g, h> : conditional<g::d, g, h>::i {};
+template <typename...> struct j;
+template <typename g, typename h> struct j<g, h> : conditional<1, h, g>::i {};
+template <typename g, typename h, typename k, typename... l>
+struct j<g, h, k, l...> : conditional<1, j<h, k>, g>::i {};
+struct aa : e<!bool()> {};
+template <typename, typename> struct m : c<bool, false> {};
+template <typename, typename n> struct o {
+ template <typename> static c<bool, true> p(int);
+ typedef decltype(p<n>(0)) i;
+};
+template <typename, typename> struct ab : o<int, int>::i {};
+template <typename> struct s { typedef int ad; };
+template <bool, typename = void> struct q;
+template <typename a> struct q<true, a> { typedef a i; };
+template <bool, typename ae, typename> struct conditional { typedef ae i; };
+template <typename ae, typename r> struct conditional<false, ae, r> {
+ typedef r i;
+};
+struct B {
+ B(int);
+};
+template <unsigned, typename...> struct af;
+template <unsigned ag, typename t, typename... ah>
+struct af<ag, t, ah...> : af<1, ah...>, B {
+ typedef af<1, ah...> ai;
+ ai al(af);
+ template <typename... am> af(af<ag, am...> p1) : ai(al(p1)), B(0) {}
+};
+template <unsigned ag, typename t> struct af<ag, t> {};
+template <int, typename... ao> struct ap {
+ template <typename... am> static constexpr bool ar() {
+ return j<ab<am, ao>...>::d;
+ }
+};
+template <typename... ao> class as : public af<0, ao...> {
+ typedef af<0, ao...> ai;
+
+public:
+ template <typename...> using au = ap<m<int, int>::d, ao...>;
+ template <typename... am,
+ typename q<au<>::template ar<am...>(), bool>::i = true>
+ as(as<am...> an) : ai(an) {}
+};
+template <typename... ao> as<typename s<ao>::ad...> ax(ao...);
+namespace ay {
+class az {};
+}
+using ay::az;
+namespace ay {
+template <typename ba> struct C { typedef ba bc; };
+}
+template <typename> class bd;
+template <typename bi, typename n> using bj = f<m<bi, n>, ab<bi, n>>;
+template <typename bf, typename... bh> class bd<bf(bh...)> {
+ struct F : bj<int, bf> {};
+ template <typename bl, typename> using bm = typename q<bl::d>::i;
+
+public:
+ template <typename bg, typename = bm<aa, void>, typename = bm<F, void>>
+ bd(bg);
+ using bn = bf;
+ bn bo;
+};
+template <typename bf, typename... bh>
+template <typename bg, typename, typename>
+bd<bf(bh...)>::bd(bg) {
+ bo;
+}
+typedef long long(__attribute__((fastcall)) bq)(int *);
+struct v : ay::C<as<bq, bq, int>> {
+ bc bt() { return ax(nullptr, nullptr, az()); }
+};
+class w {
+public:
+ int *cc();
+};
+class x : w {
+ void ce();
+};
+namespace u {
+class cf {
+public:
+ static cf cg(int, int *, int, az, bd<long long(int *)>);
+};
+}
+void x::ce() {
+ auto bu = 0;
+ u::cf::cg(bu, cc(), 1, {}, 0);
+}
diff --git a/gcc/testsuite/g++.dg/ext/attrib56.C b/gcc/testsuite/g++.dg/ext/attrib56.C
new file mode 100644
index 00000000000..9736d979acd
--- /dev/null
+++ b/gcc/testsuite/g++.dg/ext/attrib56.C
@@ -0,0 +1,6 @@
+// PR c++/84314
+// { dg-do compile { target { { i?86-*-* x86_64-*-* } && ia32 } } }
+
+struct a {
+ void b(long() __attribute__((fastcall))) {}
+};
diff --git a/gcc/testsuite/g++.dg/ext/stmtexpr22.C b/gcc/testsuite/g++.dg/ext/stmtexpr22.C
new file mode 100644
index 00000000000..f46523a5875
--- /dev/null
+++ b/gcc/testsuite/g++.dg/ext/stmtexpr22.C
@@ -0,0 +1,13 @@
+// PR c++/81853
+// { dg-do compile { target c++11 } }
+// { dg-options "" }
+
+namespace N {
+ enum { i };
+}
+
+int g ()
+{
+ constexpr int j = ({ using namespace N; i; });
+ return j;
+}
diff --git a/gcc/testsuite/g++.dg/ext/vector34.C b/gcc/testsuite/g++.dg/ext/vector34.C
new file mode 100644
index 00000000000..5cca53070b2
--- /dev/null
+++ b/gcc/testsuite/g++.dg/ext/vector34.C
@@ -0,0 +1,8 @@
+// PR c++/84424
+// { dg-do compile { target c++11 } }
+// { dg-options "" }
+
+typedef int vec __attribute__ ((vector_size (2 * sizeof (int))));
+
+constexpr vec u = { 1, 2 };
+constexpr vec v = __builtin_shuffle (v, u); // { dg-error "" }
diff --git a/gcc/testsuite/g++.dg/gomp/pr84430.C b/gcc/testsuite/g++.dg/gomp/pr84430.C
new file mode 100644
index 00000000000..cf9275acaa0
--- /dev/null
+++ b/gcc/testsuite/g++.dg/gomp/pr84430.C
@@ -0,0 +1,12 @@
+// PR c++/84430
+// { dg-do compile { target c++11 } }
+
+void
+foo ()
+{
+ auto a = [] {
+ #pragma omp simd
+ for (int i = 0; i < 10; ++i)
+ ;
+ };
+}
diff --git a/gcc/testsuite/g++.dg/gomp/pr84448.C b/gcc/testsuite/g++.dg/gomp/pr84448.C
new file mode 100644
index 00000000000..3fad4741d38
--- /dev/null
+++ b/gcc/testsuite/g++.dg/gomp/pr84448.C
@@ -0,0 +1,17 @@
+// PR c++/84448
+// { dg-do compile }
+
+struct A
+{
+ operator int () const;
+ A& operator += (int);
+ A& operator ++ ();
+};
+
+void
+foo (A a, A b)
+{
+ #pragma omp for
+ for (A i = a; i <=; ++i) // { dg-error "expected primary-expression before" }
+ ; // { dg-error "invalid controlling predicate" "" { target *-*-* } .-1 }
+}
diff --git a/gcc/testsuite/g++.dg/lookup/pr84375.C b/gcc/testsuite/g++.dg/lookup/pr84375.C
new file mode 100644
index 00000000000..24cdcb2c407
--- /dev/null
+++ b/gcc/testsuite/g++.dg/lookup/pr84375.C
@@ -0,0 +1,9 @@
+// PR c++/84375 ICE after error
+
+void foo()
+{
+ struct A
+ {
+ friend void A(); // { dg-error "local class without prior local" }
+ };
+}
diff --git a/gcc/testsuite/g++.dg/opt/pr84272.C b/gcc/testsuite/g++.dg/opt/pr84272.C
new file mode 100644
index 00000000000..ad4b8a29cd7
--- /dev/null
+++ b/gcc/testsuite/g++.dg/opt/pr84272.C
@@ -0,0 +1,23 @@
+// PR target/84272
+// { dg-do compile }
+// { dg-options "-O2" }
+// { dg-additional-options "-march=armv8-a -mtune=cortex-a57" { target aarch64-*-* } }
+
+struct A
+{
+ float b, c;
+ A ();
+ A (float, float, float);
+ float operator * (A)
+ {
+ float d = b * b + c * c;
+ return d;
+ }
+};
+
+void
+foo ()
+{
+ A g[1];
+ A h (0, 0, h * g[2]);
+}
diff --git a/gcc/testsuite/g++.dg/parse/error59.C b/gcc/testsuite/g++.dg/parse/error59.C
new file mode 100644
index 00000000000..2c44e210366
--- /dev/null
+++ b/gcc/testsuite/g++.dg/parse/error59.C
@@ -0,0 +1,6 @@
+// PR c++/84493
+
+void foo()
+{
+ (struct {}x){}; // { dg-error "" }
+}
diff --git a/gcc/testsuite/g++.dg/parse/friend12.C b/gcc/testsuite/g++.dg/parse/friend12.C
index 84d6e25e766..d4e0ceea9ac 100644
--- a/gcc/testsuite/g++.dg/parse/friend12.C
+++ b/gcc/testsuite/g++.dg/parse/friend12.C
@@ -3,5 +3,4 @@
struct A
{
friend int i = 0; // { dg-error "cannot be declared friend" }
-// { dg-error "non-static data member" "" { target { ! c++11 } } .-1 }
};
diff --git a/gcc/testsuite/g++.dg/pr84279.C b/gcc/testsuite/g++.dg/pr84279.C
new file mode 100644
index 00000000000..a88d3fb8470
--- /dev/null
+++ b/gcc/testsuite/g++.dg/pr84279.C
@@ -0,0 +1,35 @@
+/* { dg-do compile { target { powerpc*-*-* } } } */
+/* { dg-skip-if "" { powerpc*-*-darwin* } } */
+/* { dg-require-effective-target powerpc_p8vector_ok } */
+/* { dg-skip-if "do not override -mcpu" { powerpc*-*-* } { "-mcpu=*" } { "-mcpu=power8" } } */
+/* { dg-options "-O3 -mcpu=power8 -g -fPIC -fvisibility=hidden -fstack-protector-strong" } */
+
+template <typename, typename T> struct E { T e; };
+struct J {
+ unsigned k, l;
+ J (unsigned x, unsigned y) : k(x), l(y) {}
+};
+typedef struct A {
+ J n, p;
+ A ();
+ A (J x, J y) : n(x), p(y) {}
+} *S;
+S t;
+struct B {
+ struct C {
+ S q, r;
+ int u, v;
+ bool m1 (S, A &);
+ J m2 () const;
+ J m3 () const;
+ A m4 () const;
+ };
+ typedef E<unsigned, S> D;
+ void m5 (D *);
+ void m6 (unsigned, A);
+};
+bool B::C::m1 (S, A &x) { bool o; x = m4 (); return o; }
+J B::C::m2 () const { unsigned g (u == 0); unsigned h (v); return J (g, h); }
+J B::C::m3 () const { unsigned g (q != t); unsigned h (r != t); return J (g, h); }
+A B::C::m4 () const { return A (m2 (), m3 ()); }
+void B::m5 (D *c) { unsigned x; C ar; A am; if (ar.m1 (c->e, am)) m6 (x, am); }
diff --git a/gcc/testsuite/g++.dg/template/instantiate5.C b/gcc/testsuite/g++.dg/template/instantiate5.C
index 896313d14d5..d64092eb1a8 100644
--- a/gcc/testsuite/g++.dg/template/instantiate5.C
+++ b/gcc/testsuite/g++.dg/template/instantiate5.C
@@ -18,7 +18,12 @@ struct B
template <typename T> struct C
{
- virtual void bar() const { T::foo(); } // { dg-error "no matching function" }
+ virtual void bar() const // { dg-message "required" }
+ {
+ T::foo(); // { dg-error "no matching function" }
+ }
};
-C<B> c; // { dg-message "required" }
+C<B> c;
+
+int k;
diff --git a/gcc/testsuite/g++.dg/template/nontype-fn1.C b/gcc/testsuite/g++.dg/template/nontype-fn1.C
new file mode 100644
index 00000000000..12d29a91a54
--- /dev/null
+++ b/gcc/testsuite/g++.dg/template/nontype-fn1.C
@@ -0,0 +1,11 @@
+// PR c++/82664
+
+template < typename > struct target_disambiguator;
+template < typename R, typename A1 > struct target_disambiguator< R(A1) > {
+ typedef A1 type;
+ template < R (&)() > struct layout;
+};
+
+int main() {
+ typedef target_disambiguator< void (int) > ::type target_type ;
+}
diff --git a/gcc/testsuite/g++.dg/template/overload15.C b/gcc/testsuite/g++.dg/template/overload15.C
new file mode 100644
index 00000000000..ea0e548843d
--- /dev/null
+++ b/gcc/testsuite/g++.dg/template/overload15.C
@@ -0,0 +1,16 @@
+// PR c++79064 - Cannot overload member function templates on type of literal
+// { dg-do compile }
+
+template <unsigned N>
+void f (char (*)[0u - 1 > N ? 1 : 7]);
+
+template <unsigned N>
+void f (char (*)[0u - 1ll > N ? 1 : 7]);
+
+void f ()
+{
+ char x[1], y[7];
+
+ f<0>(&x);
+ f<0>(&y);
+}
diff --git a/gcc/testsuite/g++.dg/template/sizeof16.C b/gcc/testsuite/g++.dg/template/sizeof16.C
new file mode 100644
index 00000000000..084bb2185c7
--- /dev/null
+++ b/gcc/testsuite/g++.dg/template/sizeof16.C
@@ -0,0 +1,7 @@
+// PR c++/84333
+// { dg-options -Wno-pedantic }
+
+template<typename> int foo()
+{
+ return sizeof(int) > 1 ? : 1;
+}
diff --git a/gcc/testsuite/g++.dg/template/sizeof17.C b/gcc/testsuite/g++.dg/template/sizeof17.C
new file mode 100644
index 00000000000..2d5892d2c8b
--- /dev/null
+++ b/gcc/testsuite/g++.dg/template/sizeof17.C
@@ -0,0 +1,7 @@
+// PR c++/84333
+// { dg-options -Wno-pedantic }
+
+template<typename T> int foo()
+{
+ return sizeof(T) > 1 ? : 1;
+}
diff --git a/gcc/testsuite/g++.dg/torture/pr84190.C b/gcc/testsuite/g++.dg/torture/pr84190.C
new file mode 100644
index 00000000000..a7bab944365
--- /dev/null
+++ b/gcc/testsuite/g++.dg/torture/pr84190.C
@@ -0,0 +1,20 @@
+// { dg-do compile }
+// For slim LTO there's no optimized dump
+// { dg-skip-if "" { *-*-* } { "-flto" } { "" } }
+// { dg-additional-options "-fdump-tree-optimized" }
+
+typedef double T;
+static int equalfn (volatile T* x, volatile T* y);
+T gx, gy;
+int main ()
+{
+ T x = gx, y = gy;
+ return equalfn (&x, &y);
+}
+static int equalfn (volatile T* x, volatile T* y)
+{
+ return (*x == *y);
+}
+
+// There should be exactly two volatile accesses (ignoring clobbers).
+// { dg-final { scan-tree-dump-times " ={v} \[^\{\]" 2 "optimized" } }
diff --git a/gcc/testsuite/g++.dg/torture/pr84502.C b/gcc/testsuite/g++.dg/torture/pr84502.C
new file mode 100644
index 00000000000..befde4e1f0c
--- /dev/null
+++ b/gcc/testsuite/g++.dg/torture/pr84502.C
@@ -0,0 +1,20 @@
+// PR target/84502
+// { dg-do run }
+
+template<typename T>
+struct A { };
+using X = A<int>;
+
+void
+foo (X, int a1, int a2, int a3, int a4, int a5, int a6, int a7, int a8)
+{
+ if (a1 != 0 || a2 != 1 || a3 != 2 || a4 != 3
+ || a5 != 4 || a6 != 5 || a7 != 6 || a8 != 7)
+ __builtin_abort ();
+}
+
+int
+main ()
+{
+ foo (X{}, 0, 1, 2, 3, 4, 5, 6, 7);
+}
diff --git a/gcc/testsuite/g++.dg/tree-ssa/volatile1.C b/gcc/testsuite/g++.dg/tree-ssa/volatile1.C
new file mode 100644
index 00000000000..00f04a07d84
--- /dev/null
+++ b/gcc/testsuite/g++.dg/tree-ssa/volatile1.C
@@ -0,0 +1,28 @@
+// PR c++/84151
+// { dg-additional-options "-fdump-tree-gimple" }
+// { dg-final { scan-tree-dump-not {\*this} "gimple" } }
+
+struct A {
+ static int& bar(int& a) {
+ return a;
+ }
+ static int i;
+
+ int foo() volatile {
+ int v = c;
+ return i + bar(v);
+ }
+
+ int c;
+};
+
+int A::i = 0;
+
+A a;
+
+int main() {
+ a.c = 2;
+ a.foo();
+
+ return 0;
+}
diff --git a/gcc/testsuite/g++.dg/warn/Wimplicit-fallthrough-3.C b/gcc/testsuite/g++.dg/warn/Wimplicit-fallthrough-3.C
new file mode 100644
index 00000000000..2f06817d9ee
--- /dev/null
+++ b/gcc/testsuite/g++.dg/warn/Wimplicit-fallthrough-3.C
@@ -0,0 +1,31 @@
+// Verify that there are no spurious warnings in nested switch statements due
+// to the unnecessary break in the inner switch block.
+// { dg-do compile }
+// { dg-options "-Wimplicit-fallthrough" } */
+
+int
+foo (int c1, int c2, int c3)
+{
+ switch (c2)
+ {
+ case 0:
+ switch (c3) // { dg-bogus "may fall through" }
+ {
+ case 0:
+ if (c1)
+ return 1;
+ else
+ return 2;
+ break;
+
+ default:
+ return 3;
+ }
+
+ case 1:
+ return 4;
+ default:
+ return 5;
+ break;
+ }
+}
diff --git a/gcc/testsuite/g++.dg/warn/Wstringop-truncation-1.C b/gcc/testsuite/g++.dg/warn/Wstringop-truncation-1.C
new file mode 100644
index 00000000000..a502b78b711
--- /dev/null
+++ b/gcc/testsuite/g++.dg/warn/Wstringop-truncation-1.C
@@ -0,0 +1,126 @@
+/* PR/tree-optimization/84480 - bogus -Wstringop-truncation despite
+ assignment with an inlined string literal
+ { dg-do compile }
+ { dg-options "-O2 -Wstringop-truncation" } */
+
+#include <string.h>
+
+template <size_t N>
+class GoodString
+{
+public:
+ GoodString (const char *s, size_t slen = N)
+ {
+ if (slen > N)
+ slen = N;
+
+ strncpy (str, s, slen);
+
+ str[slen] = '\0';
+ }
+
+private:
+ char str[N + 1];
+};
+
+void sink (void*);
+
+void good_nowarn_size_m2 ()
+{
+ GoodString<3> str ("12");
+ sink (&str);
+}
+
+void good_nowarn_size_m1 ()
+{
+ GoodString<3> str ("123"); // { dg-bogus "\\\[-Wstringop-truncation]" }
+ sink (&str);
+}
+
+void good_nowarn_size_m1_var (const char* s)
+{
+ GoodString<3> str (s); // { dg-bogus "\\\[-Wstringop-truncation]" }
+ sink (&str);
+}
+
+void call_good_nowarn_size_m1_var ()
+{
+ good_nowarn_size_m1_var ("456");
+}
+
+
+template <size_t N>
+class BadString1
+{
+public:
+ BadString1 (const char *s, size_t slen = N)
+ {
+ if (slen > N)
+ slen = N;
+
+ strncpy (str, s, slen);
+ }
+
+private:
+ char str[N + 1];
+};
+
+void bad1_nowarn_size_m2 ()
+{
+ BadString1<3> str ("12");
+ sink (&str);
+}
+
+
+template <size_t N>
+class BadString2
+{
+public:
+ BadString2 (const char *s, size_t slen = N)
+ {
+ if (slen > N)
+ slen = N;
+
+ strncpy (str, s, slen); // { dg-warning "\\\[-Wstringop-truncation]" }
+ }
+
+private:
+ char str[N + 1];
+};
+
+void bad2_warn_size_m1 ()
+{
+ BadString2<3> str ("123");
+ sink (&str);
+}
+
+// { dg-message "inlined from .void bad2_warn_size_m1." "" { target *-*-* } 0 }
+
+template <size_t N>
+class BadString3
+{
+public:
+ BadString3 (const char *s, size_t slen = N)
+ {
+ if (slen > N)
+ slen = N;
+
+ strncpy (str, s, slen); // { dg-warning "\\\[-Wstringop-truncation]" }
+ }
+
+private:
+ char str[N + 1];
+};
+
+void bad3_warn_size_m1_var (const char *s)
+{
+ BadString3<3> str (s);
+ sink (&str);
+}
+
+void call_bad3_warn_size_m1_var ()
+{
+ bad3_warn_size_m1_var ("456");
+}
+
+// { dg-message "inlined from .void call_bad3_warn_size_m1_var." "" { target *-*-* } 0 }
diff --git a/gcc/testsuite/g++.dg/warn/Wunused-var-30.C b/gcc/testsuite/g++.dg/warn/Wunused-var-30.C
new file mode 100644
index 00000000000..e95e120e656
--- /dev/null
+++ b/gcc/testsuite/g++.dg/warn/Wunused-var-30.C
@@ -0,0 +1,11 @@
+// PR c++/84488
+// { dg-do compile }
+// { dg-options "-Wunused-but-set-variable" }
+
+int
+foo ()
+{
+ enum E { A, B, C, D };
+ double r = 1.0; // { dg-bogus "set but not used" }
+ return static_cast<E>(r);
+}
diff --git a/gcc/testsuite/g++.dg/warn/effc4.C b/gcc/testsuite/g++.dg/warn/effc4.C
new file mode 100644
index 00000000000..2ce79280104
--- /dev/null
+++ b/gcc/testsuite/g++.dg/warn/effc4.C
@@ -0,0 +1,10 @@
+// PR c++/84364
+// { dg-do compile }
+// { dg-options "-Weffc++" }
+
+template <typename T>
+struct A {
+ A &operator=(A<T>& f) {
+ return *this; // { dg-bogus "should return a reference to" }
+ }
+};