diff options
author | bstarynk <bstarynk@138bc75d-0d04-0410-961f-82ee72b054a4> | 2009-11-10 09:08:38 +0000 |
---|---|---|
committer | bstarynk <bstarynk@138bc75d-0d04-0410-961f-82ee72b054a4> | 2009-11-10 09:08:38 +0000 |
commit | 8a32b3e06edbd91fa0212c76c345293617ce9a2e (patch) | |
tree | 9f787b11d4a9affc182351836a1457d146ff4a70 /gcc/testsuite | |
parent | 0323e8a1f39ee170f6f2b069231dc5287a0b8657 (diff) | |
download | gcc-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')
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; |