This is the mail archive of the
libstdc++@gcc.gnu.org
mailing list for the libstdc++ project.
[PATCH] <stdexcept> visibility
- From: Howard Hinnant <hhinnant at apple dot com>
- To: libstdc++ <libstdc++ at gcc dot gnu dot org>
- Date: Thu, 15 Dec 2005 14:34:44 -0500
- Subject: [PATCH] <stdexcept> visibility
I would like to get the following existing test:
testsuite/23_containers/vector/element_access/1.cc
to work correctly when the libstdc++ is compiled as a dynamic library
and used with -fvisiblity=hidden from the command line. At issue is
that (most of) the exceptions defined in <stdexcept> have no "key
function" (reference http://www.codesourcery.com/cxx-abi/
abi.html#vague ), and thus their type_info's are emitted everywhere
used. Since we compare type_info's only by address, when libstdc++
throw's an out_of_range, the client can't catch it because it has a
local type_info for out_of_range that doesn't match the one internal
to libstdc++.
We already wrap <exception> this way and for this purpose. The patch
below does the same thing for <stdexcept>. I would also like to add
a copy of testsuite/23_containers/vector/element_access/1.cc, named
testsuite/23_containers/vector/element_access/2.cc which has the
single additional line:
// { dg-options "-fvisibility=hidden" }
Only I don't know the proper way to ask for a new file. :-)
Thanks,
Howard
Index: include/std/std_stdexcept.h
===================================================================
--- include/std/std_stdexcept.h (revision 108591)
+++ include/std/std_stdexcept.h (working copy)
@@ -43,6 +43,8 @@
#include <exception>
#include <string>
+#pragma GCC visibility push(default)
+
namespace std
{
/** Logic errors represent problems in the internal logic of a
program;
@@ -144,4 +146,6 @@
};
} // namespace std
+#pragma GCC visibility pop
+
#endif /* _GLIBCXX_STDEXCEPT */
Index: ChangeLog
===================================================================
--- ChangeLog (revision 108591)
+++ ChangeLog (working copy)
@@ -1,3 +1,9 @@
+2005-12-15 Howard Hinnant <hhinnant@apple.com>
+
+ * Added pragma visibility wrappers around <stdexcept> as is
already done
+ for <exception>. Added testsuite/23_containers/vector/
element_access/2.cc
+ to test for catching out_of_range when -fvisibility=hidden.
+
2005-12-15 Paolo Carlini <pcarlini@suse.de>
* include/bits/stl_vector.h (vector<>::_M_get_Tp_allocator):
Change