• jason's avatar
    PR c++/41090 · 468088ac
    jason authored
    	Add -fdeclone-ctor-dtor.
    gcc/cp/
    	* optimize.c (can_alias_cdtor, populate_clone_array): Split out
    	from maybe_clone_body.
    	(maybe_thunk_body): New function.
    	(maybe_clone_body): Call it.
    	* mangle.c (write_mangled_name): Remove code to suppress
    	writing of mangled name for cloned constructor or destructor.
    	(write_special_name_constructor): Handle decloned constructor.
    	(write_special_name_destructor): Handle decloned destructor.
    	* method.c (trivial_fn_p): Handle decloning.
    	* semantics.c (expand_or_defer_fn_1): Clone after setting linkage.
    gcc/c-family/
    	* c.opt: Add -fdeclone-ctor-dtor.
    	* c-opts.c (c_common_post_options): Default to on iff -Os.
    gcc/
    	* cgraph.h (struct cgraph_node): Add calls_comdat_local.
    	(symtab_comdat_local_p, symtab_in_same_comdat_p): New.
    	* cif-code.def: Add USES_COMDAT_LOCAL.
    	* symtab.c (verify_symtab_base): Make sure we don't refer to a
    	comdat-local symbol from outside its comdat.
    	* cgraph.c (verify_cgraph_node): Likewise.
    	* cgraphunit.c (mark_functions_to_output): Don't mark comdat-locals.
    	* ipa.c (symtab_remove_unreachable_nodes): Likewise.
    	(function_and_variable_visibility): Handle comdat-local fns.
    	* ipa-cp.c (determine_versionability): Don't clone comdat-locals.
    	* ipa-inline-analysis.c (compute_inline_parameters): Update
    	calls_comdat_local.
    	* ipa-inline-transform.c (inline_call): Likewise.
    	(save_inline_function_body): Don't clear DECL_COMDAT_GROUP.
    	* ipa-inline.c (can_inline_edge_p): Check calls_comdat_local.
    	* lto-cgraph.c (input_overwrite_node): Read calls_comdat_local.
    	(lto_output_node): Write it.
    	* symtab.c (symtab_dissolve_same_comdat_group_list): Clear
    	DECL_COMDAT_GROUP for comdat-locals.
    include/
    	* demangle.h (enum gnu_v3_ctor_kinds):
    	Added literal gnu_v3_unified_ctor.
    	(enum gnu_v3_ctor_kinds):
    	Added literal gnu_v3_unified_dtor.
    libiberty/
    	* cp-demangle.c (cplus_demangle_fill_ctor,cplus_demangle_fill_dtor):
    	Handle unified ctor/dtor.
    	(d_ctor_dtor_name): Handle unified ctor/dtor.
    
    git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@206182 138bc75d-0d04-0410-961f-82ee72b054a4
    468088ac
ChangeLog 31.7 KB