c++: ICE with bad definition of decimal32 [PR100261]
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.
This commit is contained in:
parent
061fe8c58a
commit
01b2864757
2 changed files with 20 additions and 1 deletions
|
@ -433,7 +433,7 @@ get_tinfo_decl_direct (tree type, tree name, int pseudo_ix)
|
|||
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)
|
||||
|
|
19
gcc/testsuite/g++.dg/dfp/mangle-6.C
Normal file
19
gcc/testsuite/g++.dg/dfp/mangle-6.C
Normal file
|
@ -0,0 +1,19 @@
|
|||
// 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);
|
||||
}
|
Loading…
Add table
Reference in a new issue