From d347f7460ffc9f0a934580e98e763f2534a503e6 Mon Sep 17 00:00:00 2001 From: simartin Date: Tue, 2 Jun 2009 05:37:17 +0000 Subject: [PATCH] gcc/cp/ 2009-06-02 Simon Martin PR c++/38089 * pt.c (register_specialization): Properly setup DECL_CONTEXT for specializations in an invalid namespace. gcc/testsuite/ 2009-06-02 Simon Martin PR c++/38089 * g++.dg/template/spec36.C: New test. git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@148069 138bc75d-0d04-0410-961f-82ee72b054a4 --- gcc/cp/ChangeLog | 6 ++++++ gcc/cp/pt.c | 2 +- gcc/testsuite/ChangeLog | 5 +++++ gcc/testsuite/g++.dg/template/spec36.C | 16 ++++++++++++++++ 4 files changed, 28 insertions(+), 1 deletion(-) create mode 100644 gcc/testsuite/g++.dg/template/spec36.C diff --git a/gcc/cp/ChangeLog b/gcc/cp/ChangeLog index 2aee908..33fbcef 100644 --- a/gcc/cp/ChangeLog +++ b/gcc/cp/ChangeLog @@ -1,3 +1,9 @@ +2009-06-02 Simon Martin + + PR c++/38089 + * pt.c (register_specialization): Properly setup DECL_CONTEXT for + specializations in an invalid namespace. + 2009-06-01 Aldy Hernandez * error.c (print_instantiation_partial_context): Print column diff --git a/gcc/cp/pt.c b/gcc/cp/pt.c index 72ea5b2..38e930b 100644 --- a/gcc/cp/pt.c +++ b/gcc/cp/pt.c @@ -1316,7 +1316,7 @@ register_specialization (tree spec, tree tmpl, tree args, bool is_friend) template it is specializing. */ if (DECL_TEMPLATE_SPECIALIZATION (spec) && !check_specialization_namespace (tmpl)) - DECL_CONTEXT (spec) = FROB_CONTEXT (decl_namespace_context (tmpl)); + DECL_CONTEXT (spec) = DECL_CONTEXT (tmpl); if (!optimize_specialization_lookup_p (tmpl)) DECL_TEMPLATE_SPECIALIZATIONS (tmpl) diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog index f76815a..8ace60f 100644 --- a/gcc/testsuite/ChangeLog +++ b/gcc/testsuite/ChangeLog @@ -1,3 +1,8 @@ +2009-06-02 Simon Martin + + PR c++/38089 + * g++.dg/template/spec36.C: New test. + 2009-06-01 Ian Lance Taylor * gcc.dg/cast-qual-3.c: New testcase. diff --git a/gcc/testsuite/g++.dg/template/spec36.C b/gcc/testsuite/g++.dg/template/spec36.C new file mode 100644 index 0000000..71ff3a5 --- /dev/null +++ b/gcc/testsuite/g++.dg/template/spec36.C @@ -0,0 +1,16 @@ +/* PR c++/38089 */ +/* { dg-do "compile" } */ + +struct basic_string +{ + basic_string(const int __s); +}; +namespace MyNS { + class MyClass { + template + T test() { } /* { dg-error "from definition" } */ + }; +} +template <> +basic_string MyNS::MyClass::test() /* { dg-error "specialization of" } */ +{ return 1; } -- 2.7.4