diff options
author | Jakub Jelinek <jakub@redhat.com> | 2009-12-10 22:58:49 +0100 |
---|---|---|
committer | Jakub Jelinek <jakub@gcc.gnu.org> | 2009-12-10 22:58:49 +0100 |
commit | b66887e4d016d2496653b1bab49590539b9fa4f8 (patch) | |
tree | d4a06720c9f0e8aaf194c011c4b0206f944bc2fd /libstdc++-v3 | |
parent | 63bcb71f99965d29bc1023b92ae4744d5a897e7a (diff) | |
download | gcc-b66887e4d016d2496653b1bab49590539b9fa4f8.zip gcc-b66887e4d016d2496653b1bab49590539b9fa4f8.tar.gz gcc-b66887e4d016d2496653b1bab49590539b9fa4f8.tar.bz2 |
re PR c++/42317 (Issues with comdat virtual dtors)
PR c++/42317
* cgraph.h (struct cgraph_node): Add same_comdat_group field.
* cgraph.c (cgraph_remove_node): Unchain node from same_comdat_group
circular list.
(cgraph_node_can_be_local_p): Return false for DECL_COMDAT with
node->same_comdat_group.
* ipa.c (cgraph_remove_unreachable_nodes): For any reachable node
mark all its same_comdat_group nodes as also reachable.
(cgraph_externally_visible_p): Return true even if any of
same_comdat_group nodes has address taken.
* lto-cgraph.c (lto_output_node): Stream out same_comdat_group.
(output_cgraph): Ensure other same_comdat_group nodes are also
included.
(input_node): Stream in same_comdat_group.
(input_cgraph_1): Fix up same_comdat_group fields from references
to pointers.
* cgraphunit.c (cgraph_analyze_functions): Mark all other
same_comdat_group nodes as reachable.
(cgraph_mark_functions_to_output): For each node->process process
also other same_comdat_group nodes.
* ipa-inline.c (cgraph_clone_inlined_nodes): Don't reuse nodes
with same_comdat_group non-NULL.
(cgraph_mark_inline_edge): Likewise.
* decl2.c (cp_write_global_declarations): Clear DECL_EXTERNAL
also on all other functions in the same comdat group.
* optimize.c (maybe_clone_body): Also optimize virtual implicit
dtors. For virtual comdat dtors tell cgraph that base and deleting
dtor are in the same comdat group.
* config/abi/pre/gnu.ver: Don't export certain base dtors that
weren't previously exported.
* g++.dg/opt/dtor2.C: New test.
* g++.dg/opt/dtor2.h: New file.
* g++.dg/opt/dtor2-aux.cc: New file.
From-SVN: r155143
Diffstat (limited to 'libstdc++-v3')
-rw-r--r-- | libstdc++-v3/ChangeLog | 6 | ||||
-rw-r--r-- | libstdc++-v3/config/abi/pre/gnu.ver | 41 |
2 files changed, 38 insertions, 9 deletions
diff --git a/libstdc++-v3/ChangeLog b/libstdc++-v3/ChangeLog index da30ea7..cab2d6b 100644 --- a/libstdc++-v3/ChangeLog +++ b/libstdc++-v3/ChangeLog @@ -1,3 +1,9 @@ +2009-12-10 Jakub Jelinek <jakub@redhat.com> + + PR c++/42317 + * config/abi/pre/gnu.ver: Don't export certain base dtors that + weren't previously exported. + 2009-12-10 Paolo Carlini <paolo.carlini@oracle.com> PR libstdc++/42261 (take 2) diff --git a/libstdc++-v3/config/abi/pre/gnu.ver b/libstdc++-v3/config/abi/pre/gnu.ver index 20baa96..4ed1cfe 100644 --- a/libstdc++-v3/config/abi/pre/gnu.ver +++ b/libstdc++-v3/config/abi/pre/gnu.ver @@ -72,13 +72,18 @@ GLIBCXX_3.4 { std::c[v-z]*; # std::[d-g]*; std::d[a-d]*; - std::d[f-z]*; + std::d[f-n]*; + std::domain_error::d*; +# std::domain_error::~d*; + std::d[p-z]*; std::e[a-q]*; std::error[^_]*; std::e[s-z]*; std::gslice*; std::h[^a]*; - std::i[a-n]*; + std::i[a-m]*; + std::invalid_argument::i*; +# std::invalid_argument::~i*; # std::ios_base::[A-Ha-z]*; std::ios_base::[A-Ha-f]*; std::ios_base::goodbit; @@ -94,7 +99,8 @@ GLIBCXX_3.4 { std::istrstream*; std::i[t-z]*; std::[A-Zj-k]*; - std::length_error*; + std::length_error::l*; +# std::length_error::~l*; std::logic_error*; std::locale::[A-Za-e]*; std::locale::facet::[A-Za-z]*; @@ -122,10 +128,14 @@ GLIBCXX_3.4 { std::nu[^m]*; std::num[^e]*; std::ostrstream*; - std::out_of_range*; - std::overflow_error*; + std::out_of_range::o*; +# std::out_of_range::~o*; + std::overflow_error::o*; +# std::overflow_error::~o*; # std::[p-q]*; - std::r[^e]*; + std::r[^ae]*; + std::range_error::r*; +# std::range_error::~r*; std::re[^t]*; # std::rethrow_exception std::set_new_handler*; @@ -143,7 +153,8 @@ GLIBCXX_3.4 { std::tr1::h[^a]*; std::t[s-z]*; # std::[A-Zu-z]*; - std::underflow_error*; + std::underflow_error::u*; +# std::underflow_error::~u*; std::uncaught_exception*; std::unexpected*; std::[A-Zv-z]*; @@ -284,7 +295,8 @@ GLIBCXX_3.4 { _ZNSt15basic_streambufI[cw]St11char_traitsI[cw]EEaSERKS2_; # std::basic_stringbuf - _ZNSt15basic_stringbufI[cw]St11char_traitsI[cw]ESaI[cw]EE[CD]*; + _ZNSt15basic_stringbufI[cw]St11char_traitsI[cw]ESaI[cw]EEC*; + _ZNSt15basic_stringbufI[cw]St11char_traitsI[cw]ESaI[cw]EED[^2]*; _ZNSt15basic_stringbufI[cw]St11char_traitsI[cw]ESaI[cw]EE[0-9][a-r]*; _ZNSt15basic_stringbufI[cw]St11char_traitsI[cw]ESaI[cw]EE[0-9]seek*; _ZNSt15basic_stringbufI[cw]St11char_traitsI[cw]ESaI[cw]EE[0-9]set*; @@ -639,6 +651,16 @@ GLIBCXX_3.4 { _ZGVNSt[^1]*; _ZGVNSt1[^7]*; + # complete and deleting destructors where base destructors should not + # be exported. + _ZNSt11range_errorD[01]Ev; + _ZNSt12domain_errorD[01]Ev; + _ZNSt12length_errorD[01]Ev; + _ZNSt12out_of_rangeD[01]Ev; + _ZNSt14overflow_errorD[01]Ev; + _ZNSt15underflow_errorD[01]Ev; + _ZNSt16invalid_argumentD[01]Ev; + # virtual function thunks _ZThn8_NS*; _ZThn16_NS*; @@ -891,7 +913,8 @@ GLIBCXX_3.4.10 { _ZNSt15basic_streambufI[cw]St11char_traitsI[cw]EE6stosscEv; _ZN9__gnu_cxx18stdio_sync_filebufI[cw]St11char_traitsI[cw]EE4syncEv; - _ZN9__gnu_cxx18stdio_sync_filebufI[cw]St11char_traitsI[cw]EE[5-9CD]*; + _ZN9__gnu_cxx18stdio_sync_filebufI[cw]St11char_traitsI[cw]EE[5-9C]*; + _ZN9__gnu_cxx18stdio_sync_filebufI[cw]St11char_traitsI[cw]EED[^2]*; } GLIBCXX_3.4.9; |