aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--gcc/cp/ChangeLog3
-rw-r--r--gcc/cp/pt.c23
2 files changed, 16 insertions, 10 deletions
diff --git a/gcc/cp/ChangeLog b/gcc/cp/ChangeLog
index 9b4b7af..dbbe414 100644
--- a/gcc/cp/ChangeLog
+++ b/gcc/cp/ChangeLog
@@ -1,5 +1,8 @@
1998-07-15 Jason Merrill <jason@yorick.cygnus.com>
+ * pt.c (complete_template_args): Don't look at the context unless
+ we have too.
+
* method.c (build_decl_overload_real): Fix namespace handling.
* typeck.c (build_unary_op): Extract a lone function from an
diff --git a/gcc/cp/pt.c b/gcc/cp/pt.c
index ec53238..5d1d581 100644
--- a/gcc/cp/pt.c
+++ b/gcc/cp/pt.c
@@ -484,18 +484,21 @@ complete_template_args (tmpl, extra_args, unbound_only)
template class, so skip over it. */
skip = (! is_member_template (tmpl));
- type = DECL_REAL_CONTEXT (tmpl);
- for (i = depth; i; type = TYPE_CONTEXT (type))
- if (PRIMARY_TEMPLATE_P (CLASSTYPE_TI_TEMPLATE (type)))
- {
- if (skip)
- skip = 0;
- else
+ if (depth > skip)
+ {
+ type = DECL_REAL_CONTEXT (tmpl);
+ for (i = depth; i; type = TYPE_CONTEXT (type))
+ if (PRIMARY_TEMPLATE_P (CLASSTYPE_TI_TEMPLATE (type)))
{
- --i;
- TREE_VEC_ELT (new_args, i) = CLASSTYPE_TI_ARGS (type);
+ if (skip)
+ skip = 0;
+ else
+ {
+ --i;
+ TREE_VEC_ELT (new_args, i) = CLASSTYPE_TI_ARGS (type);
+ }
}
- }
+ }
}
if (extra_arg_depth == 1)