The change to only look at the global binding for non-classes meant that
here, when dealing with decimal32 which is magically mangled like its first
non-static data member, we got a collision with the mangling for float.
Fixed by also looking up an existing binding for such magical classes.
PR c++/100261
gcc/cp/ChangeLog:
* rtti.c (get_tinfo_decl_direct): Check TYPE_TRANSPARENT_AGGR.
gcc/testsuite/ChangeLog:
* g++.dg/dfp/mangle-6.C: New test.
if (!name)
name = mangle_typeinfo_for_type (type);
- if (!CLASS_TYPE_P (type))
+ if (!CLASS_TYPE_P (type) || TYPE_TRANSPARENT_AGGR (type))
d = get_global_binding (name);
if (!d)
--- /dev/null
+// PR c++/100261
+// { dg-do compile }
+
+#include <typeinfo>
+
+namespace std {
+ namespace decimal {
+ class decimal32 {
+ float private__decfloat32;
+ };
+ }
+}
+
+void
+foo ()
+{
+ typeid (float);
+ typeid (std::decimal::decimal32);
+}