diff options
author | Paolo Carlini <paolo.carlini@oracle.com> | 2008-05-12 15:18:52 +0000 |
---|---|---|
committer | Paolo Carlini <paolo@gcc.gnu.org> | 2008-05-12 15:18:52 +0000 |
commit | 7d2f0ecd61495161034a7c24de59af5025b298e2 (patch) | |
tree | 4b40fbfe07ab629be51dc2833745c4465165be87 /gcc | |
parent | 751d1520c31199d7a67e8c3caaed4e4af90fcb75 (diff) | |
download | gcc-7d2f0ecd61495161034a7c24de59af5025b298e2.zip gcc-7d2f0ecd61495161034a7c24de59af5025b298e2.tar.gz gcc-7d2f0ecd61495161034a7c24de59af5025b298e2.tar.bz2 |
re PR c++/35331 (ICE with invalid specialization of variadic template)
/cp
2008-05-12 Paolo Carlini <paolo.carlini@oracle.com>
PR c++/35331
* semantics.c (begin_class_definition): Extend checks on the first
argument.
/testsuite
2008-05-12 Paolo Carlini <paolo.carlini@oracle.com>
PR c++/35331
* g++.dg/cpp0x/vt-35331.C: New.
* g++.dg/cpp0x/pr32125.C: Adjust.
* g++.dg/cpp0x/pr32126.C: Likewise.
* g++.dg/cpp0x/pr31438.C: Likewise.
* g++.dg/cpp0x/variadic81.C: Likewise.
* g++.dg/cpp0x/vt-34055.C: Likewise.
* g++.dg/cpp0x/vt-34606.C: Likewise.
From-SVN: r135216
Diffstat (limited to 'gcc')
-rw-r--r-- | gcc/cp/ChangeLog | 6 | ||||
-rw-r--r-- | gcc/cp/semantics.c | 2 | ||||
-rw-r--r-- | gcc/testsuite/ChangeLog | 11 | ||||
-rw-r--r-- | gcc/testsuite/g++.dg/cpp0x/pr31438.C | 4 | ||||
-rw-r--r-- | gcc/testsuite/g++.dg/cpp0x/pr32125.C | 6 | ||||
-rw-r--r-- | gcc/testsuite/g++.dg/cpp0x/pr32126.C | 2 | ||||
-rw-r--r-- | gcc/testsuite/g++.dg/cpp0x/variadic81.C | 2 | ||||
-rw-r--r-- | gcc/testsuite/g++.dg/cpp0x/vt-34055.C | 12 | ||||
-rw-r--r-- | gcc/testsuite/g++.dg/cpp0x/vt-34606.C | 4 | ||||
-rw-r--r-- | gcc/testsuite/g++.dg/cpp0x/vt-35331.C | 7 |
10 files changed, 40 insertions, 16 deletions
diff --git a/gcc/cp/ChangeLog b/gcc/cp/ChangeLog index 85deaa4..49f91ba 100644 --- a/gcc/cp/ChangeLog +++ b/gcc/cp/ChangeLog @@ -1,3 +1,9 @@ +2008-05-12 Paolo Carlini <paolo.carlini@oracle.com> + + PR c++/35331 + * semantics.c (begin_class_definition): Extend checks on the first + argument. + 2008-05-12 Tomas Bily <tbily@suse.cz> * typeck2.c (digest_init): Use CONVERT_EXPR_P. diff --git a/gcc/cp/semantics.c b/gcc/cp/semantics.c index 7881a9f..192cfa6 100644 --- a/gcc/cp/semantics.c +++ b/gcc/cp/semantics.c @@ -2223,7 +2223,7 @@ check_template_template_default_arg (tree argument) tree begin_class_definition (tree t, tree attributes) { - if (t == error_mark_node) + if (error_operand_p (t) || error_operand_p (TYPE_MAIN_DECL (t))) return error_mark_node; if (processing_template_parmlist) diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog index 79df0e9..1daba11 100644 --- a/gcc/testsuite/ChangeLog +++ b/gcc/testsuite/ChangeLog @@ -1,3 +1,14 @@ +2008-05-12 Paolo Carlini <paolo.carlini@oracle.com> + + PR c++/35331 + * g++.dg/cpp0x/vt-35331.C: New. + * g++.dg/cpp0x/pr32125.C: Adjust. + * g++.dg/cpp0x/pr32126.C: Likewise. + * g++.dg/cpp0x/pr31438.C: Likewise. + * g++.dg/cpp0x/variadic81.C: Likewise. + * g++.dg/cpp0x/vt-34055.C: Likewise. + * g++.dg/cpp0x/vt-34606.C: Likewise. + 2008-05-12 Ira Rosen <irar@il.ibm.com> * gfortran.dg/vect/pr36119.f: Rename to ... diff --git a/gcc/testsuite/g++.dg/cpp0x/pr31438.C b/gcc/testsuite/g++.dg/cpp0x/pr31438.C index 4763918..7473883 100644 --- a/gcc/testsuite/g++.dg/cpp0x/pr31438.C +++ b/gcc/testsuite/g++.dg/cpp0x/pr31438.C @@ -2,8 +2,8 @@ template<typename> struct A; template<typename T, typename... U> struct A<T(U)> // { dg-error "parameter packs|U" } -{ // { dg-error "parameter packs|U" } - template<typename X> A(X); // { dg-error "parameter packs|U" } +{ + template<typename X> A(X); }; A<void(int)> a(0); // { dg-error "incomplete type" } diff --git a/gcc/testsuite/g++.dg/cpp0x/pr32125.C b/gcc/testsuite/g++.dg/cpp0x/pr32125.C index 048cf45..210a29c 100644 --- a/gcc/testsuite/g++.dg/cpp0x/pr32125.C +++ b/gcc/testsuite/g++.dg/cpp0x/pr32125.C @@ -2,7 +2,7 @@ template<typename...> struct A; template<typename...T> struct A<T*> // { dg-error "not expanded|T" } -{ // { dg-error "not expanded|T" } - A(); // { dg-error "not expanded|T" } - A(T); // { dg-error "not expanded|T" } +{ + A(); + A(T); }; diff --git a/gcc/testsuite/g++.dg/cpp0x/pr32126.C b/gcc/testsuite/g++.dg/cpp0x/pr32126.C index a344567..c525cca 100644 --- a/gcc/testsuite/g++.dg/cpp0x/pr32126.C +++ b/gcc/testsuite/g++.dg/cpp0x/pr32126.C @@ -2,7 +2,7 @@ template<typename...> struct A; template<typename...T> struct A<T> // { dg-error "not expanded|T|" } -{ // { dg-error "not expanded|T|" } +{ static int i; }; diff --git a/gcc/testsuite/g++.dg/cpp0x/variadic81.C b/gcc/testsuite/g++.dg/cpp0x/variadic81.C index c567378..cce61b3 100644 --- a/gcc/testsuite/g++.dg/cpp0x/variadic81.C +++ b/gcc/testsuite/g++.dg/cpp0x/variadic81.C @@ -4,7 +4,7 @@ template<typename> struct A; template<typename... T> struct A<T*> // { dg-error "not expanded|T|not used|T" } -{ // { dg-error "not expanded|T|not used|T" } +{ struct B; }; diff --git a/gcc/testsuite/g++.dg/cpp0x/vt-34055.C b/gcc/testsuite/g++.dg/cpp0x/vt-34055.C index 29066b5..c507784 100644 --- a/gcc/testsuite/g++.dg/cpp0x/vt-34055.C +++ b/gcc/testsuite/g++.dg/cpp0x/vt-34055.C @@ -3,8 +3,8 @@ template<typename...> struct A; template<typename...T> struct A<T*> // { dg-error "parameter packs|T" } -{ // { dg-error "parameter packs|T" } - void foo(); // { dg-error "parameter packs|T|candidate" } +{ + void foo(); }; template<typename...T> void A<T*>::foo() {} // { dg-error "invalid declarator" } @@ -14,8 +14,8 @@ template<typename...T> void A<T*>::foo() {} // { dg-error "invalid declarator" } template<typename...> struct B; template<typename...T> struct B<T&> // { dg-error "parameter packs|T" } -{ // { dg-error "parameter packs|T" } - void foo(); // { dg-error "parameter packs|T" } +{ + void foo(); }; template<typename...T> void B<T&>::foo() {} // { dg-error "invalid declarator" } @@ -24,8 +24,8 @@ template<typename...T> void B<T&>::foo() {} // { dg-error "invalid declarator" } template<typename...> struct C; template<typename...T> struct C<T()> // { dg-error "parameter packs|T" } -{ // { dg-error "parameter packs|T" } - void foo(); // { dg-error "parameter packs|T" } +{ + void foo(); }; template<typename...T> void C<T()>::foo() {} // { dg-error "invalid declarator" } diff --git a/gcc/testsuite/g++.dg/cpp0x/vt-34606.C b/gcc/testsuite/g++.dg/cpp0x/vt-34606.C index f62e2d5..4679433 100644 --- a/gcc/testsuite/g++.dg/cpp0x/vt-34606.C +++ b/gcc/testsuite/g++.dg/cpp0x/vt-34606.C @@ -2,8 +2,8 @@ template<typename...> struct A; template<typename T, typename... U> struct A<T, U> // { dg-error "parameter packs|U" } -{ // { dg-error "parameter packs|U" } +{ template<typename> struct B; - template<typename X> struct B<X*> {}; // { dg-error "parameter packs|U" } + template<typename X> struct B<X*> {}; }; diff --git a/gcc/testsuite/g++.dg/cpp0x/vt-35331.C b/gcc/testsuite/g++.dg/cpp0x/vt-35331.C new file mode 100644 index 0000000..0add981 --- /dev/null +++ b/gcc/testsuite/g++.dg/cpp0x/vt-35331.C @@ -0,0 +1,7 @@ +// { dg-options "-std=c++0x" } +template<typename...> struct A; + +template<typename...T> struct A<T*> // { dg-error "not expanded|T" } +{ + friend void foo(); +}; |