2003-07-31 Nathan Sidwell <nathan@codesourcery.com>
+ PR c++/11347
+ * pt.c (instantiate_class_template): Increment
+ processing_template_decl around the tsubst of a template member
+ class.
+ (tsubst_qualified_id): Assert we do not have a dependent scope.
+
* pt.c (coerce_template_template_parms, lookup_template_class,
can_complete_type_without_circularity, instantiate_class_template,
tsubst_decl, unify): Reformat.
restore these. */
input_location = DECL_SOURCE_LOCATION (t);
+ if (TREE_CODE (t) == TEMPLATE_DECL)
+ processing_template_decl++;
r = tsubst (t, args, tf_error | tf_warning, NULL_TREE);
+ if (TREE_CODE (t) == TEMPLATE_DECL)
+ processing_template_decl--;
if (TREE_CODE (r) == VAR_DECL)
{
tree init;
else
expr = name;
- /* This case can occur while determining which of two templates is
- the more specialized. After performing argument deduction, we
- check that no invalid types are created. During that phase, we
- may seem uninstantiated template parameters. */
- if (TREE_CODE (scope) == BOUND_TEMPLATE_TEMPLATE_PARM)
- {
- if (is_template)
- expr = lookup_template_function (expr, template_args);
- return build_nt (SCOPE_REF, scope, expr);
- }
-
+ my_friendly_assert (!dependent_type_p (scope), 20030729);
+
if (!BASELINK_P (name) && !DECL_P (expr))
expr = lookup_qualified_name (scope, expr, /*is_type_p=*/0, false);
+
if (DECL_P (expr))
- check_accessibility_of_qualified_id (expr,
- /*object_type=*/NULL_TREE,
+ check_accessibility_of_qualified_id (expr, /*object_type=*/NULL_TREE,
scope);
/* Remember that there was a reference to this entity. */
--- /dev/null
+// { dg-do compile }
+
+// Copyright (C) 2003 Free Software Foundation, Inc.
+// Contributed by Nathan Sidwell 30 Jul 2003 <nathan@codesourcery.com>
+
+// PR 11347. ICE in tsubst
+
+template <class T> struct T1 {
+ enum {N};
+};
+
+template<class T> struct T2 {
+ template <class S, bool Z = T1<S>::N + 1> struct B {};
+ struct C {};
+};
+
+T2<int> t;
+
+T2<int>::B<int> s;
+