From fb5ce3c93a8f904d786aed712e5df6f0d53f0241 Mon Sep 17 00:00:00 2001 From: Nathan Sidwell Date: Thu, 31 Jul 2003 09:10:58 +0000 Subject: [PATCH] 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 --- gcc/cp/ChangeLog | 6 ++++++ gcc/cp/pt.c | 21 ++++++++------------- gcc/testsuite/ChangeLog | 5 +++++ gcc/testsuite/g++.dg/template/memtmpl1.C | 20 ++++++++++++++++++++ 4 files changed, 39 insertions(+), 13 deletions(-) create mode 100644 gcc/testsuite/g++.dg/template/memtmpl1.C diff --git a/gcc/cp/ChangeLog b/gcc/cp/ChangeLog index 110579ea0c8..2f96f9587c6 100644 --- a/gcc/cp/ChangeLog +++ b/gcc/cp/ChangeLog @@ -1,5 +1,11 @@ 2003-07-31 Nathan Sidwell + 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. diff --git a/gcc/cp/pt.c b/gcc/cp/pt.c index 07df30de060..a1f57dcaeea 100644 --- a/gcc/cp/pt.c +++ b/gcc/cp/pt.c @@ -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. */ diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog index da8136eeace..fb4910b5dec 100644 --- a/gcc/testsuite/ChangeLog +++ b/gcc/testsuite/ChangeLog @@ -1,3 +1,8 @@ +2003-07-31 Nathan Sidwell + + PR c++/11347 + * g++.dg/template/memtmpl1.C: New. + 2003-07-29 Andrew Pinski PR target/11565 diff --git a/gcc/testsuite/g++.dg/template/memtmpl1.C b/gcc/testsuite/g++.dg/template/memtmpl1.C new file mode 100644 index 00000000000..260dbf8dc09 --- /dev/null +++ b/gcc/testsuite/g++.dg/template/memtmpl1.C @@ -0,0 +1,20 @@ +// { dg-do compile } + +// Copyright (C) 2003 Free Software Foundation, Inc. +// Contributed by Nathan Sidwell 30 Jul 2003 + +// PR 11347. ICE in tsubst + +template struct T1 { + enum {N}; +}; + +template struct T2 { + template ::N + 1> struct B {}; + struct C {}; +}; + +T2 t; + +T2::B s; +