aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJeffrey D. Oldham <oldham@codesourcery.com>2003-02-24 20:39:38 +0000
committerJeffrey D. Oldham <oldham@gcc.gnu.org>2003-02-24 20:39:38 +0000
commit8b6a662e3ee24778eb7bf9556cd807e10f996cee (patch)
tree59c913d5c09859ce7abc14016d219f38cd7ec3a7
parent57df94c8f6a7bf0a9e0ccf8bf0d81a4d16514a12 (diff)
downloadgcc-8b6a662e3ee24778eb7bf9556cd807e10f996cee.zip
gcc-8b6a662e3ee24778eb7bf9556cd807e10f996cee.tar.gz
gcc-8b6a662e3ee24778eb7bf9556cd807e10f996cee.tar.bz2
re PR c++/9778 (ICE with sizeof(expr) in non-type template arg)
2003-02-24 Jeffrey D. Oldham <oldham@codesourcery.com> PR c++/9778 * cp/pt.c (tsubst_copy_and_build): For a templated function inside a scope, process template arguments. * testsuite/g++.dg/parse/template6.C: New test case. From-SVN: r63379
-rw-r--r--gcc/cp/ChangeLog6
-rw-r--r--gcc/cp/pt.c2
-rw-r--r--gcc/testsuite/g++.dg/parse/template6.C20
3 files changed, 27 insertions, 1 deletions
diff --git a/gcc/cp/ChangeLog b/gcc/cp/ChangeLog
index cfdaac8..dff7c4f 100644
--- a/gcc/cp/ChangeLog
+++ b/gcc/cp/ChangeLog
@@ -1,3 +1,9 @@
+2003-02-24 Jeffrey D. Oldham <oldham@codesourcery.com>
+
+ PR c++/9778
+ * pt.c (tsubst_copy_and_build): For a templated function inside a
+ scope, process template arguments.
+
2003-02-24 Kriang Lerdsuwanakij <lerdsuwa@users.sourceforge.net>
PR c++/9602
diff --git a/gcc/cp/pt.c b/gcc/cp/pt.c
index 36ae04d..053a967 100644
--- a/gcc/cp/pt.c
+++ b/gcc/cp/pt.c
@@ -8137,7 +8137,7 @@ tsubst_copy_and_build (t, args, complain, in_decl)
if (TREE_CODE (name) == TEMPLATE_ID_EXPR)
name = build_nt (TEMPLATE_ID_EXPR,
TREE_OPERAND (name, 0),
- TREE_OPERAND (name, 1));
+ build_expr_from_tree (TREE_OPERAND (name, 1)));
function = resolve_scoped_fn_name (TREE_OPERAND (function, 0),
name);
diff --git a/gcc/testsuite/g++.dg/parse/template6.C b/gcc/testsuite/g++.dg/parse/template6.C
new file mode 100644
index 0000000..a83c313
--- /dev/null
+++ b/gcc/testsuite/g++.dg/parse/template6.C
@@ -0,0 +1,20 @@
+// { dg-do compile }
+
+// Copyright (C) 2003 Free Software Foundation, Inc.
+// Contributed by Wolfgang Bangerth <bangerth@ticam.utexas.edu> 20 Feb 2003.
+
+// PR c++/9778. Ensure templated functions in other namespaces are
+// correctly instantiated.
+
+namespace NS {
+ template <int N> void foo ();
+}
+
+template <int N> struct X {
+ int m;
+ void g () {
+ NS::foo<sizeof(m)>();
+ }
+};
+
+template class X<2>;