Commit fb5ce3c9 by Nathan Sidwell Committed by Nathan Sidwell

re PR c++/11347 (Error on valid expression in default value for int argument to inner template.)

cp:
	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.
testsuite:
	PR c++/11347
	* g++.dg/template/memtmpl1.C: New.

From-SVN: r69994
parent 8c6ab2db
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.
......
......@@ -5318,7 +5318,11 @@ instantiate_class_template (tree type)
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;
......@@ -7140,22 +7144,13 @@ tsubst_qualified_id (tree qualified_id, tree args,
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. */
......
2003-07-31 Nathan Sidwell <nathan@codesourcery.com>
PR c++/11347
* g++.dg/template/memtmpl1.C: New.
2003-07-29 Andrew Pinski <pinskia@physics.uc.edu>
PR target/11565
......
// { 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;
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment