summaryrefslogtreecommitdiff
path: root/gcc/testsuite
diff options
context:
space:
mode:
authorbstarynk <bstarynk@138bc75d-0d04-0410-961f-82ee72b054a4>2009-11-10 09:08:38 +0000
committerbstarynk <bstarynk@138bc75d-0d04-0410-961f-82ee72b054a4>2009-11-10 09:08:38 +0000
commit8a32b3e06edbd91fa0212c76c345293617ce9a2e (patch)
tree9f787b11d4a9affc182351836a1457d146ff4a70 /gcc/testsuite
parent0323e8a1f39ee170f6f2b069231dc5287a0b8657 (diff)
downloadgcc-8a32b3e06edbd91fa0212c76c345293617ce9a2e.tar.gz
2009-11-10 Basile Starynkevitch <basile@starynkevitch.net>
MELT branch merged with trunk rev 154058 git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/branches/melt-branch@154060 138bc75d-0d04-0410-961f-82ee72b054a4
Diffstat (limited to 'gcc/testsuite')
-rw-r--r--gcc/testsuite/ChangeLog88
-rw-r--r--gcc/testsuite/g++.dg/abi/regparm1.C51
-rw-r--r--gcc/testsuite/g++.dg/cpp0x/variadic-ex1.C2
-rw-r--r--gcc/testsuite/g++.dg/ext/typedef-init.C8
-rw-r--r--gcc/testsuite/g++.dg/ext/typeof11.C18
-rw-r--r--gcc/testsuite/g++.dg/lookup/hidden-class1.C2
-rw-r--r--gcc/testsuite/g++.dg/lookup/hidden-class10.C2
-rw-r--r--gcc/testsuite/g++.dg/lookup/hidden-class5.C2
-rw-r--r--gcc/testsuite/g++.dg/lookup/hidden-class7.C2
-rw-r--r--gcc/testsuite/g++.dg/lookup/hidden-temp-class1.C2
-rw-r--r--gcc/testsuite/g++.dg/lookup/hidden-temp-class4.C2
-rw-r--r--gcc/testsuite/g++.dg/lookup/hidden-temp-class7.C2
-rw-r--r--gcc/testsuite/g++.dg/lookup/strong-using-2.C2
-rw-r--r--gcc/testsuite/g++.dg/other/typedef1.C4
-rw-r--r--gcc/testsuite/g++.dg/parse/access10.C6
-rw-r--r--gcc/testsuite/g++.dg/parse/constructor1.C6
-rw-r--r--gcc/testsuite/g++.dg/parse/crash38.C2
-rw-r--r--gcc/testsuite/g++.dg/parse/error3.C4
-rw-r--r--gcc/testsuite/g++.dg/parse/error36.C33
-rw-r--r--gcc/testsuite/g++.dg/parse/typespec1.C2
-rw-r--r--gcc/testsuite/g++.dg/template/conv10.C9
-rw-r--r--gcc/testsuite/g++.dg/template/error26.C2
-rw-r--r--gcc/testsuite/g++.dg/template/ref4.C12
-rw-r--r--gcc/testsuite/g++.dg/template/typedef5.C4
-rw-r--r--gcc/testsuite/g++.old-deja/g++.other/typename1.C4
-rw-r--r--gcc/testsuite/g++.old-deja/g++.pt/typename3.C4
-rw-r--r--gcc/testsuite/g++.old-deja/g++.pt/typename4.C4
-rw-r--r--gcc/testsuite/g++.old-deja/g++.pt/typename6.C4
-rw-r--r--gcc/testsuite/g++.old-deja/g++.robertl/eb94.C2
-rw-r--r--gcc/testsuite/gcc.dg/pr40946.c33
-rw-r--r--gcc/testsuite/gcc.dg/pr41643.c15
-rw-r--r--gcc/testsuite/gcc.dg/torture/pta-escape-1.c34
-rw-r--r--gcc/testsuite/gcc.target/i386/pr41985.c11
-rw-r--r--gcc/testsuite/gfortran.dg/pr41928.f90263
-rw-r--r--gcc/testsuite/gfortran.dg/recursive_check_15.f9012
-rw-r--r--gcc/testsuite/gnat.dg/rep_clause4.adb34
36 files changed, 646 insertions, 41 deletions
diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog
index bf743708f87..a37b0b18a24 100644
--- a/gcc/testsuite/ChangeLog
+++ b/gcc/testsuite/ChangeLog
@@ -1,3 +1,87 @@
+2009-11-09 Jakub Jelinek <jakub@redhat.com>
+
+ PR middle-end/40946
+ * gcc.dg/pr40946.c: New test.
+
+2009-11-09 Jason Merrill <jason@redhat.com>
+
+ PR c++/41972
+ * g++.dg/template/ref4.C: New.
+
+ PR c++/41994
+ * g++.dg/template/conv10.C: New.
+
+2009-11-07 Jason Merrill <jason@redhat.com>
+
+ PR c++/37920
+ * g++.dg/ext/typeof11.C: New.
+
+2009-11-08 Jakub Jelinek <jakub@redhat.com>
+
+ PR target/41985
+ * gcc.target/i386/pr41985.c: New test.
+
+2009-11-08 Richard Guenther <rguenther@suse.de>
+
+ * gcc.dg/torture/pta-escape-1.c: New testcase.
+
+2009-11-08 Eric Botcazou <ebotcazou@adacore.com>
+
+ * gnat.dg/rep_clause4.adb: New test.
+
+2009-11-08 Richard Guenther <rguenther@suse.de>
+
+ PR rtl-optimization/41928
+ * gfortran.dg/pr41928.f90: New testcase.
+
+2009-11-07 Jason Merrill <jason@redhat.com>
+
+ PR c++/18451
+ PR c++/40738
+ * g++.dg/parse/error36.C: Add parameter and template cases.
+ * g++.dg/cpp0x/variadic-ex1.C: Update expected errors.
+ * g++.dg/ext/typedef-init.C: Likewise.
+ * g++.dg/lookup/hidden-class1.C: Likewise.
+ * g++.dg/lookup/hidden-class10.C: Likewise.
+ * g++.dg/lookup/hidden-class5.C: Likewise.
+ * g++.dg/lookup/hidden-class7.C: Likewise.
+ * g++.dg/lookup/hidden-temp-class1.C: Likewise.
+ * g++.dg/lookup/hidden-temp-class4.C: Likewise.
+ * g++.dg/lookup/hidden-temp-class7.C: Likewise.
+ * g++.dg/lookup/strong-using-2.C: Likewise.
+ * g++.dg/other/typedef1.C: Likewise.
+ * g++.dg/parse/access10.C: Likewise.
+ * g++.dg/parse/constructor1.C: Likewise.
+ * g++.dg/parse/crash38.C: Likewise.
+ * g++.dg/parse/error3.C: Likewise.
+ * g++.dg/parse/typespec1.C: Likewise.
+ * g++.dg/template/typedef5.C: Likewise.
+ * g++.old-deja/g++.pt/typename3.C: Likewise.
+ * g++.old-deja/g++.pt/typename4.C: Likewise.
+ * g++.old-deja/g++.pt/typename6.C: Likewise.
+ * g++.old-deja/g++.robertl/eb94.C: Likewise.
+
+ * g++.dg/abi/regparm1.C: Fix execute test.
+
+2009-11-07 Jakub Jelinek <jakub@redhat.com>
+
+ PR tree-optimization/41643
+ * gcc.dg/pr41643.c: New test.
+
+2009-11-06 Jerry DeLisle <jvdelisle@gcc.gnu.org>
+
+ PR fortran/41909
+ * gfortran.dg/recursive_check_15.f90: New test.
+
+2009-11-06 Jason Merrill <jason@redhat.com>
+
+ PR c++/15946
+ * g++.dg/parse/error36.C: New.
+ * g++.old-deja/g++.other/typename1.C: Adjust.
+
+ PR c++/9381
+ * g++.dg/abi/regparm1.C: New.
+
2009-11-06 Basile Starynkevitch <basile@starynkevitch.net>
* g++.dg/plugin/pragma_plugin-test-1.C: new testcase for
@@ -412,7 +496,7 @@
2009-10-29 Martin Jambor <mjambor@suse.cz>
PR tree-optimization/41775
- * testsuite/g++.dg/torture/pr41775.C: New testcase.
+ * g++.dg/torture/pr41775.C: New testcase.
2009-10-28 Jason Merrill <jason@redhat.com>
@@ -585,7 +669,7 @@
2009-10-26 Dodji Seketeli <dodji@redhat.com>
PR c++/41785
- * gcc/testsuite/g++.dg/cpp0x/variadic96.C: New test.
+ * g++.dg/cpp0x/variadic96.C: New test.
2009-10-26 Nick Clifton <nickc@redhat.com>
diff --git a/gcc/testsuite/g++.dg/abi/regparm1.C b/gcc/testsuite/g++.dg/abi/regparm1.C
new file mode 100644
index 00000000000..42a54a0e02a
--- /dev/null
+++ b/gcc/testsuite/g++.dg/abi/regparm1.C
@@ -0,0 +1,51 @@
+// PR c++/29911 (9381)
+// { dg-options -std=c++0x }
+// { dg-do run { target i?86-*-* x86_64-*-* } }
+
+extern "C" int printf(const char *, ...);
+
+void *save_this;
+int *save_addr1, *save_addr2;
+
+int fail;
+
+struct Base
+{
+ __attribute((regparm(3))) void
+ set(int *addr1, int *addr2)
+ {
+ if (this != save_this)
+ {
+ ++fail;
+ printf("error! this == %p, should be %p\n", this, save_this);
+ }
+ if (addr1 != save_addr1)
+ {
+ ++fail;
+ printf("error! addr1 == %p, should be %p\n", addr1, save_addr1);
+ }
+ if (addr2 != save_addr2)
+ {
+ ++fail;
+ printf("error! addr2 == %p, should be %p\n", addr2, save_addr1);
+ }
+ }
+};
+
+int main()
+{
+ void (__attribute((regparm(3))) Base::* pfm)(int *, int *) = &Base::set;
+ __typeof (&Base::set) pfm2 = &Base::set;
+ decltype (&Base::set) pfm3 = &Base::set;
+ auto pfm4 = &Base::set;
+
+ Base obj; save_this = &obj;
+ int x, y; save_addr1 = &x; save_addr2 = &y;
+
+ (obj.* pfm) (&x, &y);
+ (obj.* pfm2) (&x, &y);
+ (obj.* pfm3) (&x, &y);
+ (obj.* pfm4) (&x, &y);
+
+ return fail;
+}
diff --git a/gcc/testsuite/g++.dg/cpp0x/variadic-ex1.C b/gcc/testsuite/g++.dg/cpp0x/variadic-ex1.C
index d5ebf0def3c..485fffa476c 100644
--- a/gcc/testsuite/g++.dg/cpp0x/variadic-ex1.C
+++ b/gcc/testsuite/g++.dg/cpp0x/variadic-ex1.C
@@ -1,4 +1,4 @@
// { dg-options "-std=gnu++0x" }
template<typename ... Elements> class Tuple;
Tuple<>* t; // OK: Elements is empty
-Tuple* u; // { dg-error "expected" }
+Tuple* u; // { dg-error "template-name" }
diff --git a/gcc/testsuite/g++.dg/ext/typedef-init.C b/gcc/testsuite/g++.dg/ext/typedef-init.C
index 95a96d55162..153303d217b 100644
--- a/gcc/testsuite/g++.dg/ext/typedef-init.C
+++ b/gcc/testsuite/g++.dg/ext/typedef-init.C
@@ -11,8 +11,7 @@
/* Case A: just the bare name = initializer. */
-typedef A = 0; /* { dg-error "initialized" "A" } */
- /* { dg-warning "no type" "A warns" { target *-*-* } 14 } */
+typedef A = 0; /* { dg-error "does not name a type" "A" } */
A a; /* { dg-error "does not name a type" "A error cascade" } */
/* Case B: with a type also. */
@@ -24,9 +23,8 @@ B b; /* { dg-error "does not name a type" "B error cascade" } */
field declarations go by a different code path in C++ (ick). */
struct S {
- typedef C = 0; /* { dg-error "initialized" "C" } */
- /* { dg-warning "no type" "C warns" { target *-*-* } 27 } */
- C c; /* { dg-bogus "" "C error cascade" } */
+ typedef C = 0; /* { dg-error "does not name a type" "C" } */
+ C c; /* { dg-error "" "C error cascade" } */
typedef int D = 0; /* { dg-error "initialized" "D" } */
D d; /* { dg-bogus "" "D error cascade" } */
diff --git a/gcc/testsuite/g++.dg/ext/typeof11.C b/gcc/testsuite/g++.dg/ext/typeof11.C
new file mode 100644
index 00000000000..757bcdea494
--- /dev/null
+++ b/gcc/testsuite/g++.dg/ext/typeof11.C
@@ -0,0 +1,18 @@
+// PR c++/37920
+
+template<typename T> T& ensure_obj(const T&);
+template <typename T>
+void func2(T& t)
+{
+ typedef __typeof__(ensure_obj(t)) ttt;
+ struct ttt1
+ {
+ ttt1( ttt arg0 ){}
+ } tttt ( t );
+}
+int main()
+{
+ double d = 5;
+ func2(d);
+}
+
diff --git a/gcc/testsuite/g++.dg/lookup/hidden-class1.C b/gcc/testsuite/g++.dg/lookup/hidden-class1.C
index fc71e96fb7f..b3be4e8e941 100644
--- a/gcc/testsuite/g++.dg/lookup/hidden-class1.C
+++ b/gcc/testsuite/g++.dg/lookup/hidden-class1.C
@@ -4,5 +4,5 @@
class A {
friend class B;
- B *b; // { dg-error "no type|expected" }
+ B *b; // { dg-error "type|expected" }
};
diff --git a/gcc/testsuite/g++.dg/lookup/hidden-class10.C b/gcc/testsuite/g++.dg/lookup/hidden-class10.C
index f68196ff8a1..c9b5ca9f663 100644
--- a/gcc/testsuite/g++.dg/lookup/hidden-class10.C
+++ b/gcc/testsuite/g++.dg/lookup/hidden-class10.C
@@ -7,5 +7,5 @@
class A {
friend class abort;
- abort *b; // { dg-error "no type|expected" }
+ abort *b; // { dg-error "type|expected" }
};
diff --git a/gcc/testsuite/g++.dg/lookup/hidden-class5.C b/gcc/testsuite/g++.dg/lookup/hidden-class5.C
index 1cf06bcc395..c2413546bd7 100644
--- a/gcc/testsuite/g++.dg/lookup/hidden-class5.C
+++ b/gcc/testsuite/g++.dg/lookup/hidden-class5.C
@@ -6,4 +6,4 @@ class A {
friend class B;
};
-B* b; // { dg-error "expected" }
+B* b; // { dg-error "type|expected" }
diff --git a/gcc/testsuite/g++.dg/lookup/hidden-class7.C b/gcc/testsuite/g++.dg/lookup/hidden-class7.C
index f681cd649f1..a46ae711d20 100644
--- a/gcc/testsuite/g++.dg/lookup/hidden-class7.C
+++ b/gcc/testsuite/g++.dg/lookup/hidden-class7.C
@@ -10,4 +10,4 @@ class C {
friend class B;
};
-B *b; // { dg-error "expected" }
+B *b; // { dg-error "type|expected" }
diff --git a/gcc/testsuite/g++.dg/lookup/hidden-temp-class1.C b/gcc/testsuite/g++.dg/lookup/hidden-temp-class1.C
index c92b7f66a1a..8cdb235e8fc 100644
--- a/gcc/testsuite/g++.dg/lookup/hidden-temp-class1.C
+++ b/gcc/testsuite/g++.dg/lookup/hidden-temp-class1.C
@@ -4,5 +4,5 @@
class A {
template <class T> friend class B;
- B<int> *b; // { dg-error "no type|expected" }
+ B<int> *b; // { dg-error "type|expected" }
};
diff --git a/gcc/testsuite/g++.dg/lookup/hidden-temp-class4.C b/gcc/testsuite/g++.dg/lookup/hidden-temp-class4.C
index 02dc9c3e50f..3d085e2249a 100644
--- a/gcc/testsuite/g++.dg/lookup/hidden-temp-class4.C
+++ b/gcc/testsuite/g++.dg/lookup/hidden-temp-class4.C
@@ -6,4 +6,4 @@ class A {
template <class T> friend class B;
};
-B<int> *b; // { dg-error "expected" }
+B<int> *b; // { dg-error "type|expected" }
diff --git a/gcc/testsuite/g++.dg/lookup/hidden-temp-class7.C b/gcc/testsuite/g++.dg/lookup/hidden-temp-class7.C
index 22804d782a0..19dd9524895 100644
--- a/gcc/testsuite/g++.dg/lookup/hidden-temp-class7.C
+++ b/gcc/testsuite/g++.dg/lookup/hidden-temp-class7.C
@@ -10,4 +10,4 @@ class C {
template <class T> friend class B;
};
-B<int> *b; // { dg-error "expected" }
+B<int> *b; // { dg-error "type|expected" }
diff --git a/gcc/testsuite/g++.dg/lookup/strong-using-2.C b/gcc/testsuite/g++.dg/lookup/strong-using-2.C
index 5c4b425fa8a..314aa52388a 100644
--- a/gcc/testsuite/g++.dg/lookup/strong-using-2.C
+++ b/gcc/testsuite/g++.dg/lookup/strong-using-2.C
@@ -20,4 +20,4 @@ namespace baz {
foo::T *t1;
bar::T *t2;
-baz::T *t3; // { dg-error "(ambiguous|expected|extra)" "" }
+baz::T *t3; // { dg-error "(ambiguous|does not name a type)" "" }
diff --git a/gcc/testsuite/g++.dg/other/typedef1.C b/gcc/testsuite/g++.dg/other/typedef1.C
index 55d62bb7cb2..ef1684d7aef 100644
--- a/gcc/testsuite/g++.dg/other/typedef1.C
+++ b/gcc/testsuite/g++.dg/other/typedef1.C
@@ -2,6 +2,6 @@
// { dg-do compile }
void f1(typedef) {} // { dg-error "no type|typedef declaration" }
-void f2(typedef x) {} // { dg-error "no type|typedef declaration" }
-void f3(typedef x[]) {} // { dg-error "no type|typedef declaration" }
+void f2(typedef x) {} // { dg-error "type|typedef declaration" }
+void f3(typedef x[]) {} // { dg-error "type|typedef declaration" }
void f4(typedef int x) {} // { dg-error "typedef declaration" }
diff --git a/gcc/testsuite/g++.dg/parse/access10.C b/gcc/testsuite/g++.dg/parse/access10.C
index ebfeea9f451..62adc1b16f9 100644
--- a/gcc/testsuite/g++.dg/parse/access10.C
+++ b/gcc/testsuite/g++.dg/parse/access10.C
@@ -7,7 +7,5 @@ template<int> struct A
::A~(); // { dg-bogus "using-declaration" }
};
-// Instead of the bogus error we get 3 separate errors.
-// { dg-error "no type" "" { target *-*-* } 7 }
-// { dg-error "::" "" { target *-*-* } 7 }
-// { dg-error "~" "" { target *-*-* } 7 }
+// Instead of the bogus error we get a different error.
+// { dg-error "template-name" "" { target *-*-* } 7 }
diff --git a/gcc/testsuite/g++.dg/parse/constructor1.C b/gcc/testsuite/g++.dg/parse/constructor1.C
index 1796531487c..1bb9ee0a105 100644
--- a/gcc/testsuite/g++.dg/parse/constructor1.C
+++ b/gcc/testsuite/g++.dg/parse/constructor1.C
@@ -1,8 +1,8 @@
// { dg-do compile }
// { dg-options "-fshow-column" }
-ACE_Process_Descriptor::ACE_Process_Descriptor () : // { dg-error "declared" "declared" }
- // { dg-error "no type" "no type" { target *-*-* } 4 }
- process_ (0) // { dg-error "3: only constructors take base initializers" }
+ACE_Process_Descriptor::ACE_Process_Descriptor () :
+ // { dg-error "does not name a type" "no type" { target *-*-* } 4 }
+ process_ (0)
{
}
diff --git a/gcc/testsuite/g++.dg/parse/crash38.C b/gcc/testsuite/g++.dg/parse/crash38.C
index c050b93cc42..724f9b80a12 100644
--- a/gcc/testsuite/g++.dg/parse/crash38.C
+++ b/gcc/testsuite/g++.dg/parse/crash38.C
@@ -3,7 +3,7 @@
/* This would not ICE. */
namespace M { } /* { dg-error "previous declaration" } */
struct M; /* { dg-error "redeclared as different kind of symbol" } */
-M *p; /* { dg-error "expected constructor" } */
+M *p; /* { dg-error "does not name a type" } */
/* This would ICE when processing 'p'. */
namespace N { } /* { dg-error "previous declaration" } */
diff --git a/gcc/testsuite/g++.dg/parse/error3.C b/gcc/testsuite/g++.dg/parse/error3.C
index 55ae024d412..7e8cf8de000 100644
--- a/gcc/testsuite/g++.dg/parse/error3.C
+++ b/gcc/testsuite/g++.dg/parse/error3.C
@@ -5,5 +5,5 @@ static void InstantiateConstraint(const float&, unsigned,
void(*AddFunction)(const TYPE&,bool&,
char*, char*,
unsigned*));
-// { dg-error "64:expected ',' or '...' before '&' token" "" { target *-*-* } { 5 } }
-// { dg-error "60:ISO C\\+\\+ forbids declaration of 'TYPE' with no type" "" { target *-*-* } { 5 } }
+// { dg-error "64: ISO C\\+\\+ forbids declaration of 'parameter' with no type" "" { target *-*-* } { 5 } }
+// { dg-error "60: 'TYPE' does not name a type" "" { target *-*-* } { 5 } }
diff --git a/gcc/testsuite/g++.dg/parse/error36.C b/gcc/testsuite/g++.dg/parse/error36.C
new file mode 100644
index 00000000000..0d7f8cfc4c3
--- /dev/null
+++ b/gcc/testsuite/g++.dg/parse/error36.C
@@ -0,0 +1,33 @@
+// PR c++/15946
+// Test for helpful error message about missing typename.
+
+template <class T> struct A
+{
+ struct B { };
+ static B b;
+};
+
+template <class T>
+void f(T t)
+{
+ typedef A<T>::foo type; // { dg-error "typename" }
+ A<T>::bar b; // { dg-error "typename" }
+} // { dg-error "expected ';'" "" { target *-*-* } 14 }
+
+// PR c++/36353
+template <class T> struct B
+{
+ void f()
+ {
+ A<T>::baz z; // { dg-error "typename" }
+ } // { dg-error "expected ';'" "" { target *-*-* } 22 }
+};
+
+// PR c++/40738
+template <class T>
+void g(const A<T>::type &t); // { dg-error "typename" }
+// { dg-error "no type" "" { target *-*-* } 28 }
+
+// PR c++/18451
+template <class T> A<T>::B A<T>::b; // { dg-error "typename" }
+// { dg-error "expected" "" { target *-*-* } 32 }
diff --git a/gcc/testsuite/g++.dg/parse/typespec1.C b/gcc/testsuite/g++.dg/parse/typespec1.C
index a371f8b9836..44ee116f636 100644
--- a/gcc/testsuite/g++.dg/parse/typespec1.C
+++ b/gcc/testsuite/g++.dg/parse/typespec1.C
@@ -1,4 +1,4 @@
// PR c++/26571
struct A {};
-unsigned A a; // { dg-error "multiple" }
+unsigned A a; // { dg-error "expected initializer" }
diff --git a/gcc/testsuite/g++.dg/template/conv10.C b/gcc/testsuite/g++.dg/template/conv10.C
new file mode 100644
index 00000000000..0a001be14e1
--- /dev/null
+++ b/gcc/testsuite/g++.dg/template/conv10.C
@@ -0,0 +1,9 @@
+// PR c++/41994
+
+template<typename T> struct A
+{
+ operator T();
+ A() { T (A::*f)() = &A::operator T; }
+};
+
+A<int> a;
diff --git a/gcc/testsuite/g++.dg/template/error26.C b/gcc/testsuite/g++.dg/template/error26.C
index 7545762bf34..cd8d46d1e4f 100644
--- a/gcc/testsuite/g++.dg/template/error26.C
+++ b/gcc/testsuite/g++.dg/template/error26.C
@@ -2,4 +2,4 @@
template<typename> struct A;
-template<typename T> void foo (A<&T::template i>); // { dg-error "T::template i|mismatch|& T::i" }
+template<typename T> void foo (A<&T::template i>); // { dg-error "T:: ?template i|mismatch|& T::i" }
diff --git a/gcc/testsuite/g++.dg/template/ref4.C b/gcc/testsuite/g++.dg/template/ref4.C
new file mode 100644
index 00000000000..6d89fa80a84
--- /dev/null
+++ b/gcc/testsuite/g++.dg/template/ref4.C
@@ -0,0 +1,12 @@
+// PR c++/41972
+
+struct X {
+ static const double x;
+};
+template <const double& _test_>
+ class Foo { };
+template <typename _ignore_>
+struct Y {
+ typedef Foo<X::x> type;
+};
+
diff --git a/gcc/testsuite/g++.dg/template/typedef5.C b/gcc/testsuite/g++.dg/template/typedef5.C
index abd9ebb57cf..04b8eac3bcc 100644
--- a/gcc/testsuite/g++.dg/template/typedef5.C
+++ b/gcc/testsuite/g++.dg/template/typedef5.C
@@ -2,6 +2,6 @@
// { dg-do compile }
template<typedef,int> struct A1; // { dg-error "no type|typedef declaration|default argument" }
-template<typedef x,int> struct A2; // { dg-error "no type|typedef declaration|default argument" }
-template<typedef x[],int> struct A3; // { dg-error "no type|typedef declaration|default argument" }
+template<typedef x,int> struct A2; // { dg-error "type|typedef declaration|default argument" }
+template<typedef x[],int> struct A3; // { dg-error "no type|typedef declaration|expected" }
template<typedef int x, int> struct A4; // { dg-error "typedef declaration|default argument" }
diff --git a/gcc/testsuite/g++.old-deja/g++.other/typename1.C b/gcc/testsuite/g++.old-deja/g++.other/typename1.C
index 43d13522fe7..4bf3de39f84 100644
--- a/gcc/testsuite/g++.old-deja/g++.other/typename1.C
+++ b/gcc/testsuite/g++.old-deja/g++.other/typename1.C
@@ -13,5 +13,5 @@ public:
template<class T>
void f()
{
- Vector<T>::iterator i = 0; // { dg-error "expected" } missing typename
-}
+ Vector<T>::iterator i = 0; // { dg-error "typename" } missing typename
+} // { dg-error "expected" "" { target *-*-* } 16 }
diff --git a/gcc/testsuite/g++.old-deja/g++.pt/typename3.C b/gcc/testsuite/g++.old-deja/g++.pt/typename3.C
index 9b412756b42..0708f1f2495 100644
--- a/gcc/testsuite/g++.old-deja/g++.pt/typename3.C
+++ b/gcc/testsuite/g++.old-deja/g++.pt/typename3.C
@@ -17,5 +17,5 @@ struct B : public A<U>
template <class U>
-B<U>::A_Type B<U>::Func() { // { dg-error "expected" } implicit typename
-}
+B<U>::A_Type B<U>::Func() { // { dg-error "typename" } implicit typename
+} // { dg-error "expected" }
diff --git a/gcc/testsuite/g++.old-deja/g++.pt/typename4.C b/gcc/testsuite/g++.old-deja/g++.pt/typename4.C
index 286795cb643..7238470e4ce 100644
--- a/gcc/testsuite/g++.old-deja/g++.pt/typename4.C
+++ b/gcc/testsuite/g++.old-deja/g++.pt/typename4.C
@@ -22,5 +22,5 @@ struct C : public B<U>
template <class U>
-C<U>::A_Type C<U>::Func() { // { dg-error "expected" } implicit typename
-}
+C<U>::A_Type C<U>::Func() { // { dg-error "typename" } implicit typename
+} // { dg-error "expected" }
diff --git a/gcc/testsuite/g++.old-deja/g++.pt/typename6.C b/gcc/testsuite/g++.old-deja/g++.pt/typename6.C
index 27944795ae2..0a5f0184bd4 100644
--- a/gcc/testsuite/g++.old-deja/g++.pt/typename6.C
+++ b/gcc/testsuite/g++.old-deja/g++.pt/typename6.C
@@ -15,6 +15,6 @@ struct B : public A<U>
};
template <class U>
-A<U>::A_Type B<U>::Func() // { dg-error "expected" } function
+A<U>::A_Type B<U>::Func() // { dg-error "typename" } function
{
-}
+} // { dg-error "expected" }
diff --git a/gcc/testsuite/g++.old-deja/g++.robertl/eb94.C b/gcc/testsuite/g++.old-deja/g++.robertl/eb94.C
index b3d2da1cbeb..535023606a7 100644
--- a/gcc/testsuite/g++.old-deja/g++.robertl/eb94.C
+++ b/gcc/testsuite/g++.old-deja/g++.robertl/eb94.C
@@ -10,7 +10,7 @@ static int variable;
class myClass : public baseClass
{
private:
-static int variable; // this is intentionally duplicated
+static int variable; // { dg-error "private" }
};
myClass::variable = 0; //{ dg-error "" } no type
diff --git a/gcc/testsuite/gcc.dg/pr40946.c b/gcc/testsuite/gcc.dg/pr40946.c
new file mode 100644
index 00000000000..3fd804e5632
--- /dev/null
+++ b/gcc/testsuite/gcc.dg/pr40946.c
@@ -0,0 +1,33 @@
+/* PR middle-end/40946 */
+/* { dg-do compile } */
+/* { dg-options "-O2 -Wall" } */
+
+struct A
+{
+ unsigned char a1[8];
+ unsigned short a2, a3, a4, a5, a6, a7;
+};
+
+int bar (void *, const char *, int);
+char *foo (void *, int);
+
+char *
+baz (const char *x, const char *y)
+{
+ int a = sizeof (struct A) + 2 * (__builtin_strlen (y)
+ + __builtin_strlen (x) + 24) + 16;
+ struct A *b = __builtin_malloc (a);
+ char *c;
+ int d;
+
+ b->a4 = sizeof (struct A);
+ c = ((char *) b) + b->a4;
+ d = ((char *) b) + a - c;
+ b->a2 = b->a3 = (unsigned short) bar (c, y, d); /* { dg-bogus "array subscript is above array bounds" } */
+ c += b->a2;
+ d = ((char *) b) + a - c;
+ b->a7 = b->a4 + b->a2;
+ b->a5 = b->a6 = (unsigned short) bar (c, x, d);
+ c = foo (b, a);
+ return c;
+}
diff --git a/gcc/testsuite/gcc.dg/pr41643.c b/gcc/testsuite/gcc.dg/pr41643.c
new file mode 100644
index 00000000000..7c0743da41a
--- /dev/null
+++ b/gcc/testsuite/gcc.dg/pr41643.c
@@ -0,0 +1,15 @@
+/* PR tree-optimization/41643 */
+/* { dg-do compile } */
+/* { dg-options "-O2 -fno-tree-dce" } */
+
+struct S { int a; };
+
+int
+f (struct S *x)
+{
+ int a = x->a;
+ if (a)
+ return f (x) + a;
+ else
+ return f (x);
+}
diff --git a/gcc/testsuite/gcc.dg/torture/pta-escape-1.c b/gcc/testsuite/gcc.dg/torture/pta-escape-1.c
new file mode 100644
index 00000000000..39aefb54310
--- /dev/null
+++ b/gcc/testsuite/gcc.dg/torture/pta-escape-1.c
@@ -0,0 +1,34 @@
+/* { dg-do run } */
+/* { dg-options "-fdump-tree-alias" } */
+/* { dg-skip-if "" { *-*-* } { "-O0" } { "" } } */
+
+int *p;
+void __attribute__((noinline,noclone))
+bar (void)
+{
+ *p = 1;
+}
+int __attribute__((noinline,noclone))
+foo (__SIZE_TYPE__ addr)
+{
+ int i;
+ /* q points to ANYTHING */
+ int **q = (int **)addr;
+ /* this store needs to cause i to escape */
+ *q = &i;
+ i = 0;
+ /* and thus be clobbered by this function call */
+ bar ();
+ return i;
+}
+extern void abort (void);
+int
+main()
+{
+ if (foo ((__SIZE_TYPE__)&p) != 1)
+ abort ();
+ return 0;
+}
+
+/* { dg-final { scan-tree-dump "ESCAPED = { i }" "alias" } } */
+/* { dg-final { cleanup-tree-dump "alias" } } */
diff --git a/gcc/testsuite/gcc.target/i386/pr41985.c b/gcc/testsuite/gcc.target/i386/pr41985.c
new file mode 100644
index 00000000000..b38b6dc42e1
--- /dev/null
+++ b/gcc/testsuite/gcc.target/i386/pr41985.c
@@ -0,0 +1,11 @@
+/* PR target/41985 */
+/* { dg-do compile } */
+/* { dg-options "" } */
+
+int
+main ()
+{
+ int i;
+ asm volatile ("# %&": : "g" (i)); /* { dg-error "used without any local dynamic TLS references" } */
+ return 0;
+}
diff --git a/gcc/testsuite/gfortran.dg/pr41928.f90 b/gcc/testsuite/gfortran.dg/pr41928.f90
new file mode 100644
index 00000000000..1438b0c122d
--- /dev/null
+++ b/gcc/testsuite/gfortran.dg/pr41928.f90
@@ -0,0 +1,263 @@
+! { dg-do compile }
+! { dg-options "-O -fbounds-check -w" }
+MODULE kinds
+ INTEGER, PARAMETER :: dp = SELECTED_REAL_KIND ( 14, 200 )
+ INTEGER, DIMENSION(:), ALLOCATABLE :: nco,ncoset,nso,nsoset
+ INTEGER, DIMENSION(:,:,:), ALLOCATABLE :: co,coset
+END MODULE kinds
+MODULE ai_moments
+ USE kinds
+CONTAINS
+ SUBROUTINE cossin(la_max,npgfa,zeta,rpgfa,la_min,&
+ lb_max,npgfb,zetb,rpgfb,lb_min,&
+ rac,rbc,kvec,cosab,sinab)
+ REAL(KIND=dp), DIMENSION(ncoset(la_max),&
+ ncoset(lb_max)) :: sc, ss
+ DO ipgf=1,npgfa
+ DO jpgf=1,npgfb
+ IF (la_max > 0) THEN
+ DO la=2,la_max
+ DO ax=2,la
+ DO ay=0,la-ax
+ sc(coset(ax,ay,az),1) = rap(1)*sc(coset(ax-1,ay,az),1) +&
+ f2 * kvec(1)*ss(coset(ax-1,ay,az),1)
+ ss(coset(ax,ay,az),1) = rap(1)*ss(coset(ax-1,ay,az),1) +&
+ f2 * kvec(1)*sc(coset(ax-1,ay,az),1)
+ END DO
+ END DO
+ END DO
+ IF (lb_max > 0) THEN
+ DO lb=2,lb_max
+ ss(1,coset(0,0,lb)) = rbp(3)*ss(1,coset(0,0,lb-1)) +&
+ f2 * kvec(3)*sc(1,coset(0,0,lb-1))
+ DO bx=2,lb
+ DO by=0,lb-bx
+ ss(1,coset(bx,by,bz)) = rbp(1)*ss(1,coset(bx-1,by,bz)) +&
+ f2 * kvec(1)*sc(1,coset(bx-1,by,bz))
+ END DO
+ END DO
+ END DO
+ END IF
+ END IF
+ DO j=ncoset(lb_min-1)+1,ncoset(lb_max)
+ END DO
+ END DO
+ END DO
+ END SUBROUTINE cossin
+ SUBROUTINE moment(la_max,npgfa,zeta,rpgfa,la_min,&
+ lb_max,npgfb,zetb,rpgfb,&
+ lc_max,rac,rbc,mab)
+ REAL(KIND=dp), DIMENSION(:), INTENT(IN) :: zeta, rpgfa
+ REAL(KIND=dp), DIMENSION(:), INTENT(IN) :: zetb, rpgfb
+ REAL(KIND=dp), DIMENSION(:, :, :), &
+ INTENT(INOUT) :: mab
+ REAL(KIND=dp), DIMENSION(3) :: rab, rap, rbp, rpc
+ REAL(KIND=dp), DIMENSION(ncoset(la_max),&
+ ncoset(lb_max), ncoset(lc_max)) :: s
+ DO ipgf=1,npgfa
+ DO jpgf=1,npgfb
+ IF (rpgfa(ipgf) + rpgfb(jpgf) < dab) THEN
+ DO k=1, ncoset(lc_max)-1
+ DO j=nb+1,nb+ncoset(lb_max)
+ DO i=na+1,na+ncoset(la_max)
+ mab(i,j,k) = 0.0_dp
+ END DO
+ END DO
+ END DO
+ END IF
+ rpc = zetp*(zeta(ipgf)*rac+zetb(jpgf)*rbc)
+ DO l=2, ncoset(lc_max)
+ lx = indco(1,l)
+ l2 = 0
+ IF ( lz > 0 ) THEN
+ IF ( lz > 1 ) l2 = coset(lx,ly,lz-2)
+ ELSE IF ( ly > 0 ) THEN
+ IF ( ly > 1 ) l2 = coset(lx,ly-2,lz)
+ IF ( lx > 1 ) l2 = coset(lx-2,ly,lz)
+ END IF
+ s(1,1,l) = rpc(i)*s(1,1,l1)
+ IF ( l2 > 0 ) s(1,1,l) = s(1,1,l) + f2*REAL(ni,dp)*s(1,1,l2)
+ END DO
+ DO l = 1, ncoset(lc_max)
+ IF ( lx > 0 ) THEN
+ lx1 = coset(lx-1,ly,lz)
+ END IF
+ IF ( ly > 0 ) THEN
+ ly1 = coset(lx,ly-1,lz)
+ END IF
+ IF (la_max > 0) THEN
+ DO la=2,la_max
+ IF ( lz1 > 0 ) s(coset(0,0,la),1,l) = s(coset(0,0,la),1,l) + &
+ f2z*s(coset(0,0,la-1),1,lz1)
+ IF ( ly1 > 0 ) s(coset(0,1,az),1,l) = s(coset(0,1,az),1,l) + &
+ f2y*s(coset(0,0,az),1,ly1)
+ DO ay=2,la
+ s(coset(0,ay,az),1,l) = rap(2)*s(coset(0,ay-1,az),1,l) +&
+ f2*REAL(ay-1,dp)*s(coset(0,ay-2,az),1,l)
+ IF ( ly1 > 0 ) s(coset(0,ay,az),1,l) = s(coset(0,ay,az),1,l) + &
+ f2y*s(coset(0,ay-1,az),1,ly1)
+ END DO
+ DO ay=0,la-1
+ IF ( lx1 > 0 ) s(coset(1,ay,az),1,l) = s(coset(1,ay,az),1,l) + &
+ f2x*s(coset(0,ay,az),1,lx1)
+ END DO
+ DO ax=2,la
+ DO ay=0,la-ax
+ s(coset(ax,ay,az),1,l) = rap(1)*s(coset(ax-1,ay,az),1,l) +&
+ f3*s(coset(ax-2,ay,az),1,l)
+ IF ( lx1 > 0 ) s(coset(ax,ay,az),1,l) = s(coset(ax,ay,az),1,l) + &
+ f2x*s(coset(ax-1,ay,az),1,lx1)
+ END DO
+ END DO
+ END DO
+ IF (lb_max > 0) THEN
+ DO j=2,ncoset(lb_max)
+ DO i=1,ncoset(la_max)
+ s(i,j,l) = 0.0_dp
+ END DO
+ END DO
+ DO la=la_start,la_max-1
+ DO ax=0,la
+ DO ay=0,la-ax
+ s(coset(ax,ay,az),2,l) = s(coset(ax+1,ay,az),1,l) -&
+ rab(1)*s(coset(ax,ay,az),1,l)
+ s(coset(ax,ay,az),4,l) = s(coset(ax,ay,az+1),1,l) -&
+ rab(3)*s(coset(ax,ay,az),1,l)
+ END DO
+ END DO
+ END DO
+ DO ax=0,la_max
+ DO ay=0,la_max-ax
+ IF (ax == 0) THEN
+ s(coset(ax,ay,az),2,l) = rbp(1)*s(coset(ax,ay,az),1,l)
+ ELSE
+ s(coset(ax,ay,az),2,l) = rbp(1)*s(coset(ax,ay,az),1,l) +&
+ fx*s(coset(ax-1,ay,az),1,l)
+ END IF
+ IF (lx1 > 0) s(coset(ax,ay,az),2,l) = s(coset(ax,ay,az),2,l) +&
+ f2x*s(coset(ax,ay,az),1,lx1)
+ IF (ay == 0) THEN
+ s(coset(ax,ay,az),3,l) = rbp(2)*s(coset(ax,ay,az),1,l)
+ ELSE
+ s(coset(ax,ay,az),3,l) = rbp(2)*s(coset(ax,ay,az),1,l) +&
+ fy*s(coset(ax,ay-1,az),1,l)
+ END IF
+ IF (ly1 > 0) s(coset(ax,ay,az),3,l) = s(coset(ax,ay,az),3,l) +&
+ f2y*s(coset(ax,ay,az),1,ly1)
+ IF (az == 0) THEN
+ s(coset(ax,ay,az),4,l) = rbp(3)*s(coset(ax,ay,az),1,l)
+ ELSE
+ s(coset(ax,ay,az),4,l) = rbp(3)*s(coset(ax,ay,az),1,l) +&
+ fz*s(coset(ax,ay,az-1),1,l)
+ END IF
+ IF (lz1 > 0) s(coset(ax,ay,az),4,l) = s(coset(ax,ay,az),4,l) +&
+ f2z*s(coset(ax,ay,az),1,lz1)
+ END DO
+ END DO
+ DO lb=2,lb_max
+ DO la=la_start,la_max-1
+ DO ax=0,la
+ DO ay=0,la-ax
+ s(coset(ax,ay,az),coset(0,0,lb),l) =&
+ rab(3)*s(coset(ax,ay,az),coset(0,0,lb-1),l)
+ DO bx=1,lb
+ DO by=0,lb-bx
+ s(coset(ax,ay,az),coset(bx,by,bz),l) =&
+ rab(1)*s(coset(ax,ay,az),coset(bx-1,by,bz),l)
+ END DO
+ END DO
+ END DO
+ END DO
+ END DO
+ DO ax=0,la_max
+ DO ay=0,la_max-ax
+ IF (az == 0) THEN
+ s(coset(ax,ay,az),coset(0,0,lb),l) =&
+ rbp(3)*s(coset(ax,ay,az),coset(0,0,lb-1),l) +&
+ f3*s(coset(ax,ay,az),coset(0,0,lb-2),l)
+ END IF
+ IF (lz1 > 0) s(coset(ax,ay,az),coset(0,0,lb),l) =&
+ f2z*s(coset(ax,ay,az),coset(0,0,lb-1),lz1)
+ IF (ay == 0) THEN
+ IF (ly1 > 0) s(coset(ax,ay,az),coset(0,1,bz),l) =&
+ f2y*s(coset(ax,ay,az),coset(0,0,bz),ly1)
+ DO by=2,lb
+ s(coset(ax,ay,az),coset(0,by,bz),l) =&
+ f3*s(coset(ax,ay,az),coset(0,by-2,bz),l)
+ IF (ly1 > 0) s(coset(ax,ay,az),coset(0,by,bz),l) =&
+ f2y*s(coset(ax,ay,az),coset(0,by-1,bz),ly1)
+ END DO
+ s(coset(ax,ay,az),coset(0,1,bz),l) =&
+ fy*s(coset(ax,ay-1,az),coset(0,0,bz),l)
+ END IF
+ IF (ax == 0) THEN
+ DO by=0,lb-1
+ IF (lx1 > 0) s(coset(ax,ay,az),coset(1,by,bz),l) =&
+ f2x*s(coset(ax,ay,az),coset(0,by,bz),lx1)
+ END DO
+ DO bx=2,lb
+ DO by=0,lb-bx
+ s(coset(ax,ay,az),coset(bx,by,bz),l) =&
+ f3*s(coset(ax,ay,az),coset(bx-2,by,bz),l)
+ IF (lx1 > 0) s(coset(ax,ay,az),coset(bx,by,bz),l) =&
+ f2x*s(coset(ax,ay,az),coset(bx-1,by,bz),lx1)
+ END DO
+ END DO
+ DO by=0,lb-1
+ IF (lx1 > 0) s(coset(ax,ay,az),coset(1,by,bz),l) =&
+ f2x*s(coset(ax,ay,az),coset(0,by,bz),lx1)
+ END DO
+ DO bx=2,lb
+ DO by=0,lb-bx
+ s(coset(ax,ay,az),coset(bx,by,bz),l) =&
+ f3*s(coset(ax,ay,az),coset(bx-2,by,bz),l)
+ IF (lx1 > 0) s(coset(ax,ay,az),coset(bx,by,bz),l) =&
+ f2x*s(coset(ax,ay,az),coset(bx-1,by,bz),lx1)
+ END DO
+ END DO
+ END IF
+ END DO
+ END DO
+ END DO
+ END IF
+ IF (lb_max > 0) THEN
+ DO lb=2,lb_max
+ IF (lz1 > 0) s(1,coset(0,0,lb),l) = s(1,coset(0,0,lb),l) +&
+ f2z*s(1,coset(0,0,lb-1),lz1)
+ IF (ly1 > 0) s(1,coset(0,1,bz),l) = s(1,coset(0,1,bz),l) +&
+ f2y*s(1,coset(0,0,bz),ly1)
+ DO by=2,lb
+ s(1,coset(0,by,bz),l) = rbp(2)*s(1,coset(0,by-1,bz),l) +&
+ f2*REAL(by-1,dp)*s(1,coset(0,by-2,bz),l)
+ IF (lx1 > 0) s(1,coset(1,by,bz),l) = s(1,coset(1,by,bz),l) +&
+ f2x*s(1,coset(0,by,bz),lx1)
+ END DO
+ DO bx=2,lb
+ DO by=0,lb-bx
+ IF (lx1 > 0) s(1,coset(bx,by,bz),l) = s(1,coset(bx,by,bz),l) +&
+ f2x*s(1,coset(bx-1,by,bz),lx1)
+ END DO
+ END DO
+ END DO
+ END IF
+ END IF
+ END DO
+ DO k=2,ncoset(lc_max)
+ DO j=1,ncoset(lb_max)
+ END DO
+ END DO
+ END DO
+ END DO
+ END SUBROUTINE moment
+ SUBROUTINE diff_momop(la_max,npgfa,zeta,rpgfa,la_min,&
+ order,rac,rbc,difmab,mab_ext)
+ REAL(KIND=dp), DIMENSION(:, :, :), &
+ OPTIONAL, POINTER :: mab_ext
+ REAL(KIND=dp), ALLOCATABLE, &
+ DIMENSION(:, :, :) :: difmab_tmp
+ DO imom = 1,ncoset(order)-1
+ CALL adbdr(la_max,npgfa,rpgfa,la_min,&
+ difmab_tmp(:,:,2), difmab_tmp(:,:,3))
+ END DO
+ END SUBROUTINE diff_momop
+END MODULE ai_moments
diff --git a/gcc/testsuite/gfortran.dg/recursive_check_15.f90 b/gcc/testsuite/gfortran.dg/recursive_check_15.f90
new file mode 100644
index 00000000000..4e381804ef2
--- /dev/null
+++ b/gcc/testsuite/gfortran.dg/recursive_check_15.f90
@@ -0,0 +1,12 @@
+! { dg-do compile }
+! PR41909 ICE with "call foo" in "program foo"
+program test ! { dg-error "Global name" }
+ implicit none
+ call test() ! { dg-error "" }
+contains
+ subroutine one(a)
+ real, dimension(:,:), intent(inout), optional :: a
+ call two(a)
+ end subroutine one
+end program test
+
diff --git a/gcc/testsuite/gnat.dg/rep_clause4.adb b/gcc/testsuite/gnat.dg/rep_clause4.adb
new file mode 100644
index 00000000000..76bb15284a5
--- /dev/null
+++ b/gcc/testsuite/gnat.dg/rep_clause4.adb
@@ -0,0 +1,34 @@
+-- { dg-do run }
+
+procedure Rep_Clause4 is
+
+ type U32 is mod 2 ** 32;
+
+ type Key is record
+ Value : U32;
+ Valid : Boolean;
+ end record;
+
+ type Key_Buffer is record
+ Current, Latch : Key;
+ end record;
+
+ type Block is record
+ Keys : Key_Buffer;
+ Stamp : U32;
+ end record;
+ for Block use record
+ Keys at 0 range 0 .. 103;
+ Stamp at 13 range 0 .. 31;
+ end record;
+
+ My_Block : Block;
+ My_Stamp : constant := 16#01234567#;
+
+begin
+ My_Block.Stamp := My_Stamp;
+ My_Block.Keys.Latch := My_Block.Keys.Current;
+ if My_Block.Stamp /= My_Stamp then
+ raise Program_Error;
+ end if;
+end;