Commit 7d2f0ecd by Paolo Carlini Committed by Paolo Carlini

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
parent 751d1520
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> 2008-05-12 Tomas Bily <tbily@suse.cz>
* typeck2.c (digest_init): Use CONVERT_EXPR_P. * typeck2.c (digest_init): Use CONVERT_EXPR_P.
......
...@@ -2223,7 +2223,7 @@ check_template_template_default_arg (tree argument) ...@@ -2223,7 +2223,7 @@ check_template_template_default_arg (tree argument)
tree tree
begin_class_definition (tree t, tree attributes) 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; return error_mark_node;
if (processing_template_parmlist) if (processing_template_parmlist)
......
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> 2008-05-12 Ira Rosen <irar@il.ibm.com>
* gfortran.dg/vect/pr36119.f: Rename to ... * gfortran.dg/vect/pr36119.f: Rename to ...
...@@ -2,8 +2,8 @@ ...@@ -2,8 +2,8 @@
template<typename> struct A; template<typename> struct A;
template<typename T, typename... U> struct A<T(U)> // { dg-error "parameter packs|U" } 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" } A<void(int)> a(0); // { dg-error "incomplete type" }
...@@ -2,7 +2,7 @@ ...@@ -2,7 +2,7 @@
template<typename...> struct A; template<typename...> struct A;
template<typename...T> struct A<T*> // { dg-error "not expanded|T" } template<typename...T> struct A<T*> // { dg-error "not expanded|T" }
{ // { dg-error "not expanded|T" } {
A(); // { dg-error "not expanded|T" } A();
A(T); // { dg-error "not expanded|T" } A(T);
}; };
...@@ -2,7 +2,7 @@ ...@@ -2,7 +2,7 @@
template<typename...> struct A; template<typename...> struct A;
template<typename...T> struct A<T> // { dg-error "not expanded|T|" } template<typename...T> struct A<T> // { dg-error "not expanded|T|" }
{ // { dg-error "not expanded|T|" } {
static int i; static int i;
}; };
......
...@@ -4,7 +4,7 @@ ...@@ -4,7 +4,7 @@
template<typename> struct A; template<typename> struct A;
template<typename... T> struct A<T*> // { dg-error "not expanded|T|not used|T" } template<typename... T> struct A<T*> // { dg-error "not expanded|T|not used|T" }
{ // { dg-error "not expanded|T|not used|T" } {
struct B; struct B;
}; };
......
...@@ -3,8 +3,8 @@ ...@@ -3,8 +3,8 @@
template<typename...> struct A; template<typename...> struct A;
template<typename...T> struct A<T*> // { dg-error "parameter packs|T" } 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" } 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" } ...@@ -14,8 +14,8 @@ template<typename...T> void A<T*>::foo() {} // { dg-error "invalid declarator" }
template<typename...> struct B; template<typename...> struct B;
template<typename...T> struct B<T&> // { dg-error "parameter packs|T" } 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" } 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" } ...@@ -24,8 +24,8 @@ template<typename...T> void B<T&>::foo() {} // { dg-error "invalid declarator" }
template<typename...> struct C; template<typename...> struct C;
template<typename...T> struct C<T()> // { dg-error "parameter packs|T" } 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" } template<typename...T> void C<T()>::foo() {} // { dg-error "invalid declarator" }
...@@ -2,8 +2,8 @@ ...@@ -2,8 +2,8 @@
template<typename...> struct A; template<typename...> struct A;
template<typename T, typename... U> struct A<T, U> // { dg-error "parameter packs|U" } 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> struct B;
template<typename X> struct B<X*> {}; // { dg-error "parameter packs|U" } template<typename X> struct B<X*> {};
}; };
// { dg-options "-std=c++0x" }
template<typename...> struct A;
template<typename...T> struct A<T*> // { dg-error "not expanded|T" }
{
friend void foo();
};
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment