1
0
mirror of https://git.FreeBSD.org/src.git synced 2025-01-27 16:39:08 +00:00

Since C++ typeinfo objects are currently not guaranteed to be merged at

runtime by the dynamic linker, check for their equality in libcxxrt by
not only comparing the typeinfo's name pointers, but also comparing the
full names, if necessary.  (This is similar to what GNU libstdc++ does
in its default configuration.)  The 'deep' check can be turned off again
by defining LIBCXXRT_MERGED_TYPEINFO, and recompiling libcxxrt.

Reviewed by:	theraven
MFC after:	3 days
This commit is contained in:
Dimitry Andric 2013-10-16 17:00:21 +00:00
parent c6f0af7314
commit 04461e6012
Notes: svn2git 2020-12-20 02:59:44 +00:00
svn path=/head/; revision=256642

View File

@ -35,15 +35,23 @@ type_info::~type_info() {}
bool type_info::operator==(const type_info &other) const
{
#ifdef LIBCXXRT_MERGED_TYPEINFO
return __type_name == other.__type_name;
#else
return __type_name == other.__type_name || strcmp(__type_name, other.__type_name) == 0;
#endif
}
bool type_info::operator!=(const type_info &other) const
{
return __type_name != other.__type_name;
return !operator==(other);
}
bool type_info::before(const type_info &other) const
{
#ifdef LIBCXXRT_MERGED_TYPEINFO
return __type_name < other.__type_name;
#else
return strcmp(__type_name, other.__type_name) < 0;
#endif
}
const char* type_info::name() const
{