]> git.ipfire.org Git - thirdparty/gcc.git/commit - libiberty/ChangeLog
re PR c++/41090 (Using static label reference in c++ class constructor produces wrong...
authorJason Merrill <jason@gcc.gnu.org>
Mon, 23 Dec 2013 17:49:47 +0000 (12:49 -0500)
committerJason Merrill <jason@gcc.gnu.org>
Mon, 23 Dec 2013 17:49:47 +0000 (12:49 -0500)
commit1f26ac87486d92b964b0c56823beabe28e7dcef7
treedeb79005e2132e0ee5c203e13985a93f5dd4714e
parent266d276c4eb2c06d3593ddf1d828776be91f0eea
re PR c++/41090 (Using static label reference in c++ class constructor produces wrong code)

PR c++/41090
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.

From-SVN: r206182
28 files changed:
gcc/ChangeLog
gcc/c-family/ChangeLog
gcc/c-family/c-opts.c
gcc/c-family/c.opt
gcc/cgraph.c
gcc/cgraph.h
gcc/cgraphunit.c
gcc/cif-code.def
gcc/cp/ChangeLog
gcc/cp/decl.c
gcc/cp/mangle.c
gcc/cp/method.c
gcc/cp/optimize.c
gcc/cp/semantics.c
gcc/doc/invoke.texi
gcc/ipa-cp.c
gcc/ipa-inline-analysis.c
gcc/ipa-inline-transform.c
gcc/ipa-inline.c
gcc/ipa.c
gcc/lto-cgraph.c
gcc/symtab.c
gcc/testsuite/g++.dg/ext/label13a.C [new file with mode: 0644]
gcc/testsuite/g++.dg/opt/declone1.C [new file with mode: 0644]
include/ChangeLog
include/demangle.h
libiberty/ChangeLog
libiberty/cp-demangle.c