diff options
author | Jason Merrill <jason@gcc.gnu.org> | 2013-12-23 12:49:47 -0500 |
---|---|---|
committer | Jason Merrill <jason@gcc.gnu.org> | 2013-12-23 12:49:47 -0500 |
commit | 1f26ac87486d92b964b0c56823beabe28e7dcef7 (patch) | |
tree | deb79005e2132e0ee5c203e13985a93f5dd4714e /gcc/c-family | |
parent | 266d276c4eb2c06d3593ddf1d828776be91f0eea (diff) | |
download | gcc-1f26ac87486d92b964b0c56823beabe28e7dcef7.zip gcc-1f26ac87486d92b964b0c56823beabe28e7dcef7.tar.gz gcc-1f26ac87486d92b964b0c56823beabe28e7dcef7.tar.bz2 |
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
Diffstat (limited to 'gcc/c-family')
-rw-r--r-- | gcc/c-family/ChangeLog | 7 | ||||
-rw-r--r-- | gcc/c-family/c-opts.c | 4 | ||||
-rw-r--r-- | gcc/c-family/c.opt | 4 |
3 files changed, 15 insertions, 0 deletions
diff --git a/gcc/c-family/ChangeLog b/gcc/c-family/ChangeLog index ffd8eff..1e0da89 100644 --- a/gcc/c-family/ChangeLog +++ b/gcc/c-family/ChangeLog @@ -1,3 +1,10 @@ +2013-12-23 Stuart Hastings <stuart@apple.com> + Bill Maddox <maddox@google.com> + Jason Merrill <jason@redhat.com> + + * c.opt: Add -fdeclone-ctor-dtor. + * c-opts.c (c_common_post_options): Default to on iff -Os. + 2013-12-18 Balaji V. Iyer <balaji.v.iyer@intel.com> * c-common.c (c_common_attribute_table): Added "cilk simd function" diff --git a/gcc/c-family/c-opts.c b/gcc/c-family/c-opts.c index f368cab..3576f7d 100644 --- a/gcc/c-family/c-opts.c +++ b/gcc/c-family/c-opts.c @@ -899,6 +899,10 @@ c_common_post_options (const char **pfilename) if (warn_implicit_function_declaration == -1) warn_implicit_function_declaration = flag_isoc99; + /* Declone C++ 'structors if -Os. */ + if (flag_declone_ctor_dtor == -1) + flag_declone_ctor_dtor = optimize_size; + if (cxx_dialect >= cxx11) { /* If we're allowing C++0x constructs, don't warn about C++98 diff --git a/gcc/c-family/c.opt b/gcc/c-family/c.opt index bfca1e0..d270f77 100644 --- a/gcc/c-family/c.opt +++ b/gcc/c-family/c.opt @@ -890,6 +890,10 @@ fdeduce-init-list C++ ObjC++ Var(flag_deduce_init_list) Init(0) -fdeduce-init-list enable deduction of std::initializer_list for a template type parameter from a brace-enclosed initializer-list +fdeclone-ctor-dtor +C++ ObjC++ Var(flag_declone_ctor_dtor) Init(-1) +Factor complex constructors and destructors to favor space over speed + fdefault-inline C++ ObjC++ Ignore Does nothing. Preserved for backward compatibility. |