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
This commit is contained in:
Nathan Sidwell 2003-07-31 09:10:58 +00:00 committed by Nathan Sidwell
parent 8c6ab2db94
commit fb5ce3c93a
4 changed files with 39 additions and 13 deletions

View File

@ -1,5 +1,11 @@
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.

View File

@ -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. */

View File

@ -1,3 +1,8 @@
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

View File

@ -0,0 +1,20 @@
// { 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;