aboutsummaryrefslogtreecommitdiff
path: root/gcc
diff options
context:
space:
mode:
authorPaolo Carlini <paolo.carlini@oracle.com>2008-05-12 15:18:52 +0000
committerPaolo Carlini <paolo@gcc.gnu.org>2008-05-12 15:18:52 +0000
commit7d2f0ecd61495161034a7c24de59af5025b298e2 (patch)
tree4b40fbfe07ab629be51dc2833745c4465165be87 /gcc
parent751d1520c31199d7a67e8c3caaed4e4af90fcb75 (diff)
downloadgcc-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/ChangeLog6
-rw-r--r--gcc/cp/semantics.c2
-rw-r--r--gcc/testsuite/ChangeLog11
-rw-r--r--gcc/testsuite/g++.dg/cpp0x/pr31438.C4
-rw-r--r--gcc/testsuite/g++.dg/cpp0x/pr32125.C6
-rw-r--r--gcc/testsuite/g++.dg/cpp0x/pr32126.C2
-rw-r--r--gcc/testsuite/g++.dg/cpp0x/variadic81.C2
-rw-r--r--gcc/testsuite/g++.dg/cpp0x/vt-34055.C12
-rw-r--r--gcc/testsuite/g++.dg/cpp0x/vt-34606.C4
-rw-r--r--gcc/testsuite/g++.dg/cpp0x/vt-35331.C7
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();
+};