aboutsummaryrefslogtreecommitdiff
path: root/gcc
diff options
context:
space:
mode:
authorMark Mitchell <mark@codesourcery.com>2003-07-02 04:11:30 +0000
committerMark Mitchell <mmitchel@gcc.gnu.org>2003-07-02 04:11:30 +0000
commitddb45080b4c1eab4c83dccafbc5a50ce70270a4d (patch)
tree6b8aac90ee843d059112574c08ea9bc44f3a08ae /gcc
parentf9f4d1e10a89929da39e0e860e783f2c0f4910ca (diff)
downloadgcc-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/ChangeLog6
-rw-r--r--gcc/cp/decl2.c2
-rw-r--r--gcc/testsuite/ChangeLog3
-rw-r--r--gcc/testsuite/g++.dg/template/local3.C14
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);
+ }
+