debug/101533 - ICE with variant typedef DIE generation
There's a sanity check in gen_type_die_with_usage that trips unnecessarily for a case where the relevant DIE has already been generated successfully in other ways. The following keys the existing TREE_ASM_WRITTEN check on the correct object, honoring this and does nothing instead of ICEing for the testcase at hand. PR debug/101533 * dwarf2out.cc (gen_type_die_with_usage): When we have output the typedef already do nothing for a typedef variant. Do not set TREE_ASM_WRITTEN on the type. * g++.dg/debug/pr101533.C: New testcase.
This commit is contained in:
parent
289867bb29
commit
99a3f013c3
2 changed files with 13 additions and 4 deletions
|
@ -26424,10 +26424,10 @@ gen_type_die_with_usage (tree type, dw_die_ref context_die,
|
|||
for the parent typedef which TYPE is a type of. */
|
||||
if (typedef_variant_p (type))
|
||||
{
|
||||
if (TREE_ASM_WRITTEN (type))
|
||||
tree name = TYPE_NAME (type);
|
||||
if (TREE_ASM_WRITTEN (name))
|
||||
return;
|
||||
|
||||
tree name = TYPE_NAME (type);
|
||||
tree origin = decl_ultimate_origin (name);
|
||||
if (origin != NULL && origin != name)
|
||||
{
|
||||
|
@ -26441,8 +26441,6 @@ gen_type_die_with_usage (tree type, dw_die_ref context_die,
|
|||
/* Give typedefs the right scope. */
|
||||
context_die = scope_die_for (type, context_die);
|
||||
|
||||
TREE_ASM_WRITTEN (type) = 1;
|
||||
|
||||
gen_decl_die (name, NULL, NULL, context_die);
|
||||
return;
|
||||
}
|
||||
|
|
11
gcc/testsuite/g++.dg/debug/pr101533.C
Normal file
11
gcc/testsuite/g++.dg/debug/pr101533.C
Normal file
|
@ -0,0 +1,11 @@
|
|||
// { dg-do compile }
|
||||
// { dg-options "-g" }
|
||||
|
||||
template <typename> class T
|
||||
{
|
||||
typedef struct {} a __attribute__((aligned));
|
||||
};
|
||||
void f ()
|
||||
{
|
||||
T<int>();
|
||||
}
|
Loading…
Add table
Reference in a new issue