aboutsummaryrefslogtreecommitdiff
path: root/libstdc++-v3
diff options
context:
space:
mode:
authorJakub Jelinek <jakub@redhat.com>2009-12-10 22:58:49 +0100
committerJakub Jelinek <jakub@gcc.gnu.org>2009-12-10 22:58:49 +0100
commitb66887e4d016d2496653b1bab49590539b9fa4f8 (patch)
treed4a06720c9f0e8aaf194c011c4b0206f944bc2fd /libstdc++-v3
parent63bcb71f99965d29bc1023b92ae4744d5a897e7a (diff)
downloadgcc-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/ChangeLog6
-rw-r--r--libstdc++-v3/config/abi/pre/gnu.ver41
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;