https://gcc.gnu.org/bugzilla/show_bug.cgi?id=89075

Richard Biener <rguenth at gcc dot gnu.org> changed:

           What    |Removed                     |Added
----------------------------------------------------------------------------
           Keywords|                            |ice-checking, lto
             Status|UNCONFIRMED                 |NEW
   Last reconfirmed|                            |2019-01-28
                 CC|                            |hubicka at gcc dot gnu.org,
                   |                            |rguenth at gcc dot gnu.org
          Component|lto                         |middle-end
     Ever confirmed|0                           |1

--- Comment #1 from Richard Biener <rguenth at gcc dot gnu.org> ---
Confirmed.

Looks like the pointer type was not properly shared since it looks equal
otherwise.  Both are built via

#6  0x0000000001596d76 in build_qualified_type (
    type=<pointer_type 0x7ffff69c6b28 a>, type_quals=0)
    at /space/rguenther/src/svn/trunk2/gcc/tree.c:6445
#7  0x0000000001592e9b in free_lang_data_in_type (
    type=<function_type 0x7ffff69c65e8 c>, fld=0x7fffffffda60)
    at /space/rguenther/src/svn/trunk2/gcc/tree.c:5462
#8  0x0000000001595f53 in free_lang_data_in_cgraph (fld=0x7fffffffda60)
    at /space/rguenther/src/svn/trunk2/gcc/tree.c:6179

#6  0x0000000001596d76 in build_qualified_type (
    type=<pointer_type 0x7ffff69c6b28 a>, type_quals=0)
    at /space/rguenther/src/svn/trunk2/gcc/tree.c:6445
#7  0x0000000001592e9b in free_lang_data_in_type (
    type=<function_type 0x7ffff69c63f0 b>, fld=0x7fffffffda60)
    at /space/rguenther/src/svn/trunk2/gcc/tree.c:5462
#8  0x0000000001595f53 in free_lang_data_in_cgraph (fld=0x7fffffffda60)
    at /space/rguenther/src/svn/trunk2/gcc/tree.c:6179

but get_qualified_type doesn't find the duplicate becase the type
we're creating the qualified variant off has TYPE_NAME still as TYPE_DECL
while the one on the variant list is fld-ed already with an IDENTIFIER_NODE
because we do

#4  0x0000000001592e9b in free_lang_data_in_type (
    type=<function_type 0x7ffff69c63f0 b>, fld=0x7fffffffda60)
    at /space/rguenther/src/svn/trunk2/gcc/tree.c:5462
(gdb) l
5457              if (TYPE_READONLY (arg_type) || TYPE_VOLATILE (arg_type))
5458                {
5459                  int quals = TYPE_QUALS (arg_type)
5460                              & ~TYPE_QUAL_CONST
5461                              & ~TYPE_QUAL_VOLATILE;
5462                  TREE_VALUE (p) = build_qualified_type (arg_type, quals);
5463                  free_lang_data_in_type (TREE_VALUE (p), fld);

but arg_type itself is only fld'ed later.

Which means we need to free-lang-data in SCCs?

Reply via email to