in structrual_comptypes. */
extern int comparing_specializations;
-/* Nonzero if we are inside eq_specializations, which affects
- resolving of typenames in structural_comptypes. */
-extern int comparing_typenames;
-
/* In parser.c. */
/* Nonzero if we are parsing an unevaluated operand: an operand to
extern tree build_aggr_init_expr (tree, tree);
extern tree get_target_expr (tree);
extern tree get_target_expr_sfinae (tree, tsubst_flags_t);
-extern tree build_cplus_array_type (tree, tree, int is_dep = -1);
+extern tree build_cplus_array_type (tree, tree);
extern tree build_array_of_n_type (tree, int);
extern bool array_of_runtime_bound_p (tree);
extern bool vla_type_p (tree);
build_cplus_array_type. */
static void
-set_array_type_canon (tree t, tree elt_type, tree index_type, bool dep)
+set_array_type_canon (tree t, tree elt_type, tree index_type)
{
/* Set the canonical type for this new node. */
if (TYPE_STRUCTURAL_EQUALITY_P (elt_type)
TYPE_CANONICAL (t)
= build_cplus_array_type (TYPE_CANONICAL (elt_type),
index_type
- ? TYPE_CANONICAL (index_type) : index_type,
- dep);
+ ? TYPE_CANONICAL (index_type) : index_type);
else
TYPE_CANONICAL (t) = t;
}
/* Like build_array_type, but handle special C++ semantics: an array of a
variant element type is a variant of the array of the main variant of
- the element type. IS_DEPENDENT is -ve if we should determine the
- dependency. Otherwise its bool value indicates dependency. */
+ the element type. */
tree
-build_cplus_array_type (tree elt_type, tree index_type, int dependent)
+build_cplus_array_type (tree elt_type, tree index_type)
{
tree t;
if (elt_type == error_mark_node || index_type == error_mark_node)
return error_mark_node;
- if (dependent < 0)
- dependent = (uses_template_parms (elt_type)
- || (index_type && uses_template_parms (index_type)));
+ bool dependent = (uses_template_parms (elt_type)
+ || (index_type && uses_template_parms (index_type)));
if (elt_type != TYPE_MAIN_VARIANT (elt_type))
/* Start with an array of the TYPE_MAIN_VARIANT. */
t = build_cplus_array_type (TYPE_MAIN_VARIANT (elt_type),
- index_type, dependent);
+ index_type);
else if (dependent)
{
/* Since type_hash_canon calls layout_type, we need to use our own
*e = t;
/* Set the canonical type for this new node. */
- set_array_type_canon (t, elt_type, index_type, dependent);
-
- /* Mark it as dependent now, this saves time later. */
- TYPE_DEPENDENT_P_VALID (t) = true;
- TYPE_DEPENDENT_P (t) = true;
+ set_array_type_canon (t, elt_type, index_type);
}
}
else
{
bool typeless_storage = is_byte_access_type (elt_type);
t = build_array_type (elt_type, index_type, typeless_storage);
-
- /* Mark as non-dependenty now, this will save time later. */
- TYPE_DEPENDENT_P_VALID (t) = true;
}
/* Now check whether we already have this array variant. */
if (!t)
{
t = build_min_array_type (elt_type, index_type);
- /* Mark dependency now, this saves time later. */
- TYPE_DEPENDENT_P_VALID (t) = true;
- TYPE_DEPENDENT_P (t) = dependent;
- set_array_type_canon (t, elt_type, index_type, dependent);
+ set_array_type_canon (t, elt_type, index_type);
if (!dependent)
{
layout_type (t);
if (!t)
{
- gcc_checking_assert (TYPE_DEPENDENT_P_VALID (type)
- || !dependent_type_p (type));
- t = build_cplus_array_type (element_type, TYPE_DOMAIN (type),
- TYPE_DEPENDENT_P (type));
+ t = build_cplus_array_type (element_type, TYPE_DOMAIN (type));
/* Keep the typedef name. */
if (TYPE_NAME (t) != TYPE_NAME (type))
case ARRAY_TYPE:
type = strip_typedefs (TREE_TYPE (t), remove_attributes, flags);
t0 = strip_typedefs (TYPE_DOMAIN (t), remove_attributes, flags);
- gcc_checking_assert (TYPE_DEPENDENT_P_VALID (t)
- || !dependent_type_p (t));
- result = build_cplus_array_type (type, t0, TYPE_DEPENDENT_P (t));
+ result = build_cplus_array_type (type, t0);
break;
case FUNCTION_TYPE:
case METHOD_TYPE:
gcc_assert (TYPE_P (t1) && TYPE_P (t2));
- /* TYPENAME_TYPEs should be resolved if the qualifying scope is the
- current instantiation, and we don't care about typename
- structural equality. The comparing_typenames check is after the
- code check, in order to early-out the common case. */
- if (TREE_CODE (t1) == TYPENAME_TYPE && !comparing_typenames)
- t1 = resolve_typename_type (t1, /*only_current_p=*/true);
-
- if (TREE_CODE (t2) == TYPENAME_TYPE && !comparing_typenames)
- t2 = resolve_typename_type (t2, /*only_current_p=*/true);
+ if (!comparing_specializations)
+ {
+ /* TYPENAME_TYPEs should be resolved if the qualifying scope is the
+ current instantiation. */
+ if (TREE_CODE (t1) == TYPENAME_TYPE)
+ t1 = resolve_typename_type (t1, /*only_current_p=*/true);
+
+ if (TREE_CODE (t2) == TYPENAME_TYPE)
+ t2 = resolve_typename_type (t2, /*only_current_p=*/true);
+ }
if (TYPE_PTRMEMFUNC_P (t1))
t1 = TYPE_PTRMEMFUNC_FN_TYPE (t1);