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:
parent
c6f0af7314
commit
04461e6012
Notes:
svn2git
2020-12-20 02:59:44 +00:00
svn path=/head/; revision=256642
@ -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
|
||||
{
|
||||
|
Loading…
Reference in New Issue
Block a user