Lines Matching refs:clone
37 /* CLONED_PARM is a copy of CLONE, generated for a cloned constructor
86 CFG. CLONE is a function whose body is to be set to a copy of FN,
90 clone_body (tree clone, tree fn, void *arg_map)
95 /* Clone the body, as if we were making an inline call. But, remap
99 id.dst_fn = clone;
117 if (DECL_NAME (clone) == base_dtor_identifier
118 || DECL_NAME (clone) == base_ctor_identifier)
127 append_to_statement_list_force (stmts, &DECL_SAVED_TREE (clone));
242 tree clone;
248 FOR_EACH_CLONE (clone, fn)
249 if (DECL_NAME (clone) == complete_dtor_identifier
250 || DECL_NAME (clone) == complete_ctor_identifier)
251 fns[1] = clone;
252 else if (DECL_NAME (clone) == base_dtor_identifier
253 || DECL_NAME (clone) == base_ctor_identifier)
254 fns[0] = clone;
255 else if (DECL_NAME (clone) == deleting_dtor_identifier)
256 fns[2] = clone;
270 tree bind, block, call, clone, clone_result, fn_parm, fn_parm_typelist;
295 /* Don't use thunks if the base clone omits inherited parameters. */
357 FOR_EACH_CLONE (clone, fn)
366 FOR_EACH_CLONE (clone, fn)
370 /* If we've already generated a body for this clone, avoid
371 duplicating it. (Is it possible for a clone-list to grow after we
373 if (DECL_SAVED_TREE (clone) || TREE_ASM_WRITTEN (clone))
377 start_preparsed_function (clone, NULL_TREE, SF_PRE_PARSED);
379 if (clone == fns[2])
381 for (clone_parm = DECL_ARGUMENTS (clone); clone_parm;
386 build_delete_destructor_body (clone, fns[1]);
395 clone_parm = DECL_ARGUMENTS (clone);
400 if (parmno == vtt_parmno && ! DECL_HAS_VTT_PARM_P (clone))
411 = copy_node (in_charge_arg_for_name (DECL_NAME (clone)));
440 clone_result = DECL_RESULT (clone);
450 bind = c_build_bind_expr (DECL_SOURCE_LOCATION (clone),
452 DECL_SAVED_TREE (clone) = push_stmt_list ();
456 DECL_ABSTRACT_ORIGIN (clone) = NULL;
462 /* FN is a function that has a complete body. Clone the body as
470 tree clone;
476 /* We only clone constructors and destructors. */
495 clone = fns[idx];
496 if (!clone)
499 /* Update CLONE's source position information to match FN's. */
500 DECL_SOURCE_LOCATION (clone) = DECL_SOURCE_LOCATION (fn);
501 DECL_DECLARED_INLINE_P (clone) = DECL_DECLARED_INLINE_P (fn);
502 DECL_DECLARED_CONSTEXPR_P (clone) = DECL_DECLARED_CONSTEXPR_P (fn);
503 DECL_COMDAT (clone) = DECL_COMDAT (fn);
504 DECL_WEAK (clone) = DECL_WEAK (fn);
506 /* We don't copy the comdat group from fn to clone because the assembler
510 cgraph_node::get_create (clone)->set_comdat_group (cxx_comdat_group (clone));
511 DECL_USE_TEMPLATE (clone) = DECL_USE_TEMPLATE (fn);
512 DECL_EXTERNAL (clone) = DECL_EXTERNAL (fn);
513 DECL_INTERFACE_KNOWN (clone) = DECL_INTERFACE_KNOWN (fn);
514 DECL_NOT_REALLY_EXTERN (clone) = DECL_NOT_REALLY_EXTERN (fn);
515 TREE_PUBLIC (clone) = TREE_PUBLIC (fn);
516 DECL_VISIBILITY (clone) = DECL_VISIBILITY (fn);
517 DECL_VISIBILITY_SPECIFIED (clone) = DECL_VISIBILITY_SPECIFIED (fn);
518 DECL_DLLIMPORT_P (clone) = DECL_DLLIMPORT_P (fn);
519 DECL_ATTRIBUTES (clone) = copy_list (DECL_ATTRIBUTES (fn));
520 DECL_DISREGARD_INLINE_LIMITS (clone) = DECL_DISREGARD_INLINE_LIMITS (fn);
521 set_decl_section_name (clone, fn);
525 clone_parm = DECL_ARGUMENTS (clone);
534 if (DECL_HAS_VTT_PARM_P (clone))
565 clone = fns[idx];
566 if (!clone)
570 start_preparsed_function (clone, NULL_TREE, SF_PRE_PARSED);
578 (clone, fns[0]))
588 if (symtab_node::get (clone)->same_comdat_group)
589 symtab_node::get (clone)->remove_from_same_comdat_group ();
590 symtab_node::get (clone)->add_to_same_comdat_group
599 build_delete_destructor_body (clone, fns[1]);
603 cgraph_node::get_create (clone)->add_to_same_comdat_group
625 clone_parm = DECL_ARGUMENTS (clone);
634 in_charge = in_charge_arg_for_name (DECL_NAME (clone));
642 from the CLONE to this parameter. */
643 if (DECL_HAS_VTT_PARM_P (clone))
670 clone. Replace them with null lvalues. */
682 clone_parm = DECL_RESULT (clone);
686 /* Clone the body. */
687 clone_body (clone, fn, decl_map);
693 /* The clone can throw iff the original function can throw. */
698 BLOCK_ABSTRACT_ORIGIN (DECL_INITIAL (clone)) = DECL_INITIAL (fn);
701 if (expand_or_defer_fn_1 (clone))
702 emit_associated_thunks (clone);
704 DECL_SAVED_TREE (clone) = NULL_TREE;
707 expand_or_defer_fn (clone);