static tree
build_clone (tree fn, tree name)
{
- tree parms;
- tree clone;
-
/* Copy the function. */
- clone = copy_decl (fn);
+ tree clone = copy_decl (fn);
/* Reset the function name. */
DECL_NAME (clone) = name;
/* Remember where this function came from. */
DECL_ABSTRACT_ORIGIN (clone) = fn;
- /* Make it easy to find the CLONE given the FN. */
+
+ /* Make it easy to find the CLONE given the FN. Note the
+ template_result of a template will be chained this way too. */
DECL_CHAIN (clone) = DECL_CHAIN (fn);
DECL_CHAIN (fn) = clone;
{
tree result = build_clone (DECL_TEMPLATE_RESULT (clone), name);
DECL_TEMPLATE_RESULT (clone) = result;
+
DECL_TEMPLATE_INFO (result) = copy_node (DECL_TEMPLATE_INFO (result));
DECL_TI_TEMPLATE (result) = clone;
+
TREE_TYPE (clone) = TREE_TYPE (result);
return clone;
}
- else
- {
- /* Clone constraints. */
- if (flag_concepts)
- if (tree ci = get_constraints (fn))
- set_constraints (clone, copy_node (ci));
- }
+ if (flag_concepts)
+ /* Clone constraints. */
+ if (tree ci = get_constraints (fn))
+ set_constraints (clone, copy_node (ci));
SET_DECL_ASSEMBLER_NAME (clone, NULL_TREE);
DECL_CLONED_FUNCTION (clone) = fn;
if (name == base_dtor_identifier)
{
DECL_VIRTUAL_P (clone) = 0;
- if (TREE_CODE (clone) != TEMPLATE_DECL)
- DECL_VINDEX (clone) = NULL_TREE;
+ DECL_VINDEX (clone) = NULL_TREE;
}
bool ctor_omit_inherited_parms_p = ctor_omit_inherited_parms (clone);
if (ctor_omit_inherited_parms_p)
DECL_CHAIN (DECL_CHAIN (DECL_ARGUMENTS (clone))) = NULL_TREE;
- for (parms = DECL_ARGUMENTS (clone); parms; parms = DECL_CHAIN (parms))
+ for (tree parms = DECL_ARGUMENTS (clone); parms; parms = DECL_CHAIN (parms))
{
DECL_CONTEXT (parms) = clone;
cxx_dup_lang_specific_decl (parms);