aboutsummaryrefslogtreecommitdiff
path: root/gcc
diff options
context:
space:
mode:
authorGiovanni Bajo <giovannibajo@gcc.gnu.org>2004-11-24 10:40:16 +0000
committerGiovanni Bajo <giovannibajo@gcc.gnu.org>2004-11-24 10:40:16 +0000
commit911461693337552b76b5994d9d875e1b78e64b28 (patch)
treed71b5c1314fa42547e06fc0b88f93a7a018827f2 /gcc
parent592590f532f891f2edf87b73ae8e632bbfb08421 (diff)
downloadgcc-911461693337552b76b5994d9d875e1b78e64b28.zip
gcc-911461693337552b76b5994d9d875e1b78e64b28.tar.gz
gcc-911461693337552b76b5994d9d875e1b78e64b28.tar.bz2
re PR c++/8929 (G++ accepts invalid template headers in member definitions of explicitly specialized classes)
PR c++/8929 * decl.c (start_decl): Check for invalid specialization headers. PR c++/8929 * g++.old-deja/g++.oliva/template10.C: Remove xfail. From-SVN: r91145
Diffstat (limited to 'gcc')
-rw-r--r--gcc/cp/ChangeLog5
-rw-r--r--gcc/cp/decl.c5
-rw-r--r--gcc/testsuite/ChangeLog5
-rw-r--r--gcc/testsuite/g++.old-deja/g++.oliva/template10.C2
4 files changed, 16 insertions, 1 deletions
diff --git a/gcc/cp/ChangeLog b/gcc/cp/ChangeLog
index 4f9c1d8..8797df9 100644
--- a/gcc/cp/ChangeLog
+++ b/gcc/cp/ChangeLog
@@ -1,3 +1,8 @@
+2004-11-24 Giovanni Bajo <giovannibajo@gcc.gnu.org>
+
+ PR c++/8929
+ * decl.c (start_decl): Check for invalid specialization headers.
+
2004-11-24 Paolo Bonzini <bonzini@gnu.org>
PR c++/16882
diff --git a/gcc/cp/decl.c b/gcc/cp/decl.c
index 9baedb4..bca3288 100644
--- a/gcc/cp/decl.c
+++ b/gcc/cp/decl.c
@@ -3776,6 +3776,11 @@ start_decl (const cp_declarator *declarator,
context, DECL_NAME (decl));
DECL_CONTEXT (decl) = DECL_CONTEXT (field);
}
+ if (processing_specialization
+ && template_class_depth (context) == 0
+ && CLASSTYPE_TEMPLATE_SPECIALIZATION (context))
+ error ("template header not allowed in member definition "
+ "of explicitly specialized class");
/* Static data member are tricky; an in-class initialization
still doesn't provide a definition, so the in-class
declaration will have DECL_EXTERNAL set, but will have an
diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog
index 8edf27c..6a98976 100644
--- a/gcc/testsuite/ChangeLog
+++ b/gcc/testsuite/ChangeLog
@@ -1,3 +1,8 @@
+2004-11-24 Giovanni Bajo <giovannibajo@gcc.gnu.org>
+
+ PR c++/8929
+ * g++.old-deja/g++.oliva/template10.C: Remove xfail.
+
2004-11-24 Eric Botcazou <ebotcazou@libertysurf.fr>
* gcc.target/sparc/align.c: Do not include <stdint.h>.
diff --git a/gcc/testsuite/g++.old-deja/g++.oliva/template10.C b/gcc/testsuite/g++.old-deja/g++.oliva/template10.C
index 6991bf9..5c1204b 100644
--- a/gcc/testsuite/g++.old-deja/g++.oliva/template10.C
+++ b/gcc/testsuite/g++.old-deja/g++.oliva/template10.C
@@ -19,4 +19,4 @@ template<> struct A<int> {
};
bool A<int>::a = true; // ok
-template<> bool A<int>::b = false; // { dg-error "" "" { xfail *-*-* } }
+template<> bool A<int>::b = false; // { dg-error "template header" }