Update private_typeinfo's `is_equal` implementation after r361913
The libc++ typeinfo implementation is being improved to better
handle non-merged type names.
This patch takes advantage of that more correct behavior by delegating
to std::type_infos default operator== instead of doing pointer equality
ourselves.
However, libc++ still expects unique RTTI by default, and so we
should still fall back to strcmp when explicitly requested.
git-svn-id: https://llvm.org/svn/llvm-project/libcxxabi/trunk@361916 91177308-0d34-0410-b5e6-96231b3b80d8
diff --git a/src/private_typeinfo.cpp b/src/private_typeinfo.cpp
index 2d83dc0..c0a2394 100644
--- a/src/private_typeinfo.cpp
+++ b/src/private_typeinfo.cpp
@@ -58,14 +58,12 @@
bool
is_equal(const std::type_info* x, const std::type_info* y, bool use_strcmp)
{
-#ifndef _WIN32
+ // Use std::type_info's default comparison unless we've explicitly asked
+ // for strcmp.
if (!use_strcmp)
- return x == y;
- return strcmp(x->name(), y->name()) == 0;
-#else
- (void) use_strcmp;
- return (x == y) || (strcmp(x->name(), y->name()) == 0);
-#endif
+ return *x == *y;
+ // Still allow pointer equality to short circut.
+ return x == y || strcmp(x->name(), y->name()) == 0;
}
namespace __cxxabiv1