Commit 1b7a7ed1 authored by mmitchel's avatar mmitchel
Browse files

* decl.c (grokdeclarator): Undo 1998-12-14 change.

	* tree.c (build_cplus_array_type_1): Likewise.
	* pt.c (instantiate_class_template): Remove misleading comment.
	(tsubst_aggr_type): Substitute if there are template parameters,
	regardless of whether or not they use template arguments.
	(unify): Likewise, but for unification.


git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@24656 138bc75d-0d04-0410-961f-82ee72b054a4
parent 8e8d5efa
1999-01-13 Mark Mitchell <mark@markmitchell.com>
* decl.c (grokdeclarator): Undo 1998-12-14 change.
* tree.c (build_cplus_array_type_1): Likewise.
* pt.c (instantiate_class_template): Remove misleading comment.
(tsubst_aggr_type): Substitute if there are template parameters,
regardless of whether or not they use template arguments.
(unify): Likewise, but for unification.
1999-01-12 Richard Henderson <rth@cygnus.com>
* cp-tree.h (flag_permissive): Declare extern.
......
......@@ -9890,9 +9890,13 @@ grokdeclarator (declarator, declspecs, decl_context, initialized, attrlist)
&& TREE_TYPE (size) == TREE_TYPE (TREE_OPERAND (size, 0)))
size = TREE_OPERAND (size, 0);
/* If this involves a template parameter, it'll be
constant, but we don't know what the value is yet. */
if (uses_template_parms (size))
/* If this involves a template parameter, it will be a
constant at instantiation time, but we don't know
what the value is yet. Even if no template
parameters are involved, we may an expression that
is not a constant; we don't even simplify `1 + 2'
when processing a template. */
if (processing_template_decl)
{
/* Resolve a qualified reference to an enumerator or
static const data member of ours. */
......
......@@ -4475,9 +4475,7 @@ instantiate_class_template (type)
struct S<int> {};
Now, the `S<U>' in `f<int>' is the specialization, not an
instantiation of the original template. Mark the type as
complete, in the same way that we do for a definition of a
template class. */
instantiation of the original template. */
goto end;
/* Determine what specialization of the original template to
......@@ -5043,7 +5041,7 @@ tsubst_aggr_type (t, args, in_decl, entering_scope)
/* else fall through */
case ENUMERAL_TYPE:
case UNION_TYPE:
if (uses_template_parms (t))
if (TYPE_TEMPLATE_INFO (t))
{
tree argvec;
tree context;
......@@ -7671,7 +7669,7 @@ unify (tparms, targs, parm, arg, strict, explicit_mask)
if (TREE_CODE (arg) != TREE_CODE (parm))
return 1;
if (CLASSTYPE_TEMPLATE_INFO (parm) && uses_template_parms (parm))
if (CLASSTYPE_TEMPLATE_INFO (parm))
{
tree t = NULL_TREE;
if (strict & UNIFY_ALLOW_DERIVED)
......
......@@ -416,8 +416,7 @@ build_cplus_array_type_1 (elt_type, index_type)
saveable_obstack = &permanent_obstack;
}
if (uses_template_parms (elt_type)
|| uses_template_parms (index_type))
if (processing_template_decl)
{
t = make_node (ARRAY_TYPE);
TREE_TYPE (t) = elt_type;
......
// Build don't link:
template <class T>
void f()
{
int i[1 << 3];
}
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