diff options
author | Mark Mitchell <mark@codesourcery.com> | 2003-07-02 04:11:30 +0000 |
---|---|---|
committer | Mark Mitchell <mmitchel@gcc.gnu.org> | 2003-07-02 04:11:30 +0000 |
commit | ddb45080b4c1eab4c83dccafbc5a50ce70270a4d (patch) | |
tree | 6b8aac90ee843d059112574c08ea9bc44f3a08ae /gcc | |
parent | f9f4d1e10a89929da39e0e860e783f2c0f4910ca (diff) | |
download | gcc-ddb45080b4c1eab4c83dccafbc5a50ce70270a4d.zip gcc-ddb45080b4c1eab4c83dccafbc5a50ce70270a4d.tar.gz gcc-ddb45080b4c1eab4c83dccafbc5a50ce70270a4d.tar.bz2 |
re PR c++/6949 (ICE in tsubst_decl, at cp/pt.c:5733)
PR c++/6949
* decl2.c (grokfield): Create TEMPLATE_DECLs for methods in local
classes.
PR c++/6949
* g++.dg/template/local3.C: New test.
From-SVN: r68818
Diffstat (limited to 'gcc')
-rw-r--r-- | gcc/cp/ChangeLog | 6 | ||||
-rw-r--r-- | gcc/cp/decl2.c | 2 | ||||
-rw-r--r-- | gcc/testsuite/ChangeLog | 3 | ||||
-rw-r--r-- | gcc/testsuite/g++.dg/template/local3.C | 14 |
4 files changed, 24 insertions, 1 deletions
diff --git a/gcc/cp/ChangeLog b/gcc/cp/ChangeLog index a76a82b..c0480b9 100644 --- a/gcc/cp/ChangeLog +++ b/gcc/cp/ChangeLog @@ -1,3 +1,9 @@ +2003-07-01 Mark Mitchell <mark@codesourcery.com> + + PR c++/6949 + * decl2.c (grokfield): Create TEMPLATE_DECLs for methods in local + classes. + 2003-07-01 Kaveh R. Ghazi <ghazi@caip.rutgers.edu> * error.c (locate_error): %P takes an `int', not a `tree'. diff --git a/gcc/cp/decl2.c b/gcc/cp/decl2.c index a440c06..c621793 100644 --- a/gcc/cp/decl2.c +++ b/gcc/cp/decl2.c @@ -970,7 +970,7 @@ grokfield (tree declarator, tree declspecs, tree init, tree asmspec_tree, } } - if (processing_template_decl && ! current_function_decl + if (processing_template_decl && (TREE_CODE (value) == VAR_DECL || TREE_CODE (value) == FUNCTION_DECL)) value = push_template_decl (value); diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog index 86cabcb..3d9914d 100644 --- a/gcc/testsuite/ChangeLog +++ b/gcc/testsuite/ChangeLog @@ -1,5 +1,8 @@ 2003-07-01 Mark Mitchell <mark@codesourcery.com> + PR c++/6949 + * g++.dg/template/local3.C: New test. + PR c++/11149 * g++.dg/lookup/scoped6.C: New test. diff --git a/gcc/testsuite/g++.dg/template/local3.C b/gcc/testsuite/g++.dg/template/local3.C new file mode 100644 index 0000000..4d6a576 --- /dev/null +++ b/gcc/testsuite/g++.dg/template/local3.C @@ -0,0 +1,14 @@ + template<class T> + void f(const T&) + { + struct B { + + void g (T); + }; + B b; + }; + void g() + { + f(42); + } + |