diff options
author | Giovanni Bajo <giovannibajo@gcc.gnu.org> | 2004-11-24 10:40:16 +0000 |
---|---|---|
committer | Giovanni Bajo <giovannibajo@gcc.gnu.org> | 2004-11-24 10:40:16 +0000 |
commit | 911461693337552b76b5994d9d875e1b78e64b28 (patch) | |
tree | d71b5c1314fa42547e06fc0b88f93a7a018827f2 /gcc | |
parent | 592590f532f891f2edf87b73ae8e632bbfb08421 (diff) | |
download | gcc-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/ChangeLog | 5 | ||||
-rw-r--r-- | gcc/cp/decl.c | 5 | ||||
-rw-r--r-- | gcc/testsuite/ChangeLog | 5 | ||||
-rw-r--r-- | gcc/testsuite/g++.old-deja/g++.oliva/template10.C | 2 |
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" } |