diff options
author | Simon Martin <simartin@users.sourceforge.net> | 2009-06-02 05:37:17 +0000 |
---|---|---|
committer | Simon Martin <simartin@gcc.gnu.org> | 2009-06-02 05:37:17 +0000 |
commit | db10c6ecabc63901ac61930f127655637aa6cee2 (patch) | |
tree | 40fc3d7d72f3e83c6a2b8bcd70ba2bab8491015c /gcc | |
parent | 0aa34d44c0dcfba198cd230e5f70cdf1915d0091 (diff) | |
download | gcc-db10c6ecabc63901ac61930f127655637aa6cee2.zip gcc-db10c6ecabc63901ac61930f127655637aa6cee2.tar.gz gcc-db10c6ecabc63901ac61930f127655637aa6cee2.tar.bz2 |
re PR c++/38089 (g++ crash on invalid code)
gcc/cp/
2009-06-02 Simon Martin <simartin@users.sourceforge.net>
PR c++/38089
* pt.c (register_specialization): Properly setup DECL_CONTEXT for
specializations in an invalid namespace.
gcc/testsuite/
2009-06-02 Simon Martin <simartin@users.sourceforge.net>
PR c++/38089
* g++.dg/template/spec36.C: New test.
From-SVN: r148069
Diffstat (limited to 'gcc')
-rw-r--r-- | gcc/cp/ChangeLog | 6 | ||||
-rw-r--r-- | gcc/cp/pt.c | 2 | ||||
-rw-r--r-- | gcc/testsuite/ChangeLog | 5 | ||||
-rw-r--r-- | gcc/testsuite/g++.dg/template/spec36.C | 16 |
4 files changed, 28 insertions, 1 deletions
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 <simartin@users.sourceforge.net> + + PR c++/38089 + * pt.c (register_specialization): Properly setup DECL_CONTEXT for + specializations in an invalid namespace. + 2009-06-01 Aldy Hernandez <aldyh@redhat.com> * 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 <simartin@users.sourceforge.net> + + PR c++/38089 + * g++.dg/template/spec36.C: New test. + 2009-06-01 Ian Lance Taylor <iant@google.com> * 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 <typename T> + T test() { } /* { dg-error "from definition" } */ + }; +} +template <> +basic_string MyNS::MyClass::test() /* { dg-error "specialization of" } */ +{ return 1; } |