This is the mail archive of the
gcc-patches@gcc.gnu.org
mailing list for the GCC project.
Re: PATCH: PR bootstrap/53963: [4.8 Regression] LTO bootstrap failed with bootstrap-profiled
On Sat, Jul 14, 2012 at 10:23 PM, H.J. Lu <hjl.tools@gmail.com> wrote:
> On Sat, Jul 14, 2012 at 11:54 AM, Steven Bosscher <stevenb.gcc@gmail.com> wrote:
>> On Sat, Jul 14, 2012 at 8:49 PM, H.J. Lu <hongjiu.lu@intel.com> wrote:
>>> Hi,
>>>
>>> Revision 189453:
>>>
>>> http://gcc.gnu.org/ml/gcc-cvs/2012-07/msg00357.html
>>>
>>> removes type attribute comparison in gimple_types_compatible_p_1 and
>>> caused PR middle-end/53959 and PR bootstrap/53963. This restores type
>>> attribute comparison. Tested on Linux/x86-64. OK to install?
>>>
>>> Thanks.
>>>
>>>
>>> H.J.
>>> ---
>>> 2012-07-14 H.J. Lu <hongjiu.lu@intel.com>
>>>
>>> PR middle-end/53959
>>> PR bootstrap/53963
>>> * gimple.c (gimple_types_compatible_p_1): Restore type attribute
>>> comparison.
>>
>> I think this deserves a bit more understanding of the problem before
>> reverting. Which type attributes survive up to this point?
>>
>
> Here they are:
>
> (gdb) call debug_tree (t1)
> <function_type 0x7ffff1affbd0
> type <void_type 0x7ffff19babd0 void VOID
> align 8 symtab 0 alias set -1 canonical type 0x7ffff19babd0
> pointer_to_this <pointer_type 0x7ffff19bac78>>
> QI
> size <integer_cst 0x7ffff19a9ea0 type <integer_type 0x7ffff19ba0a8
> bitsizetype> constant 8>
> unit size <integer_cst 0x7ffff19a9ec0 type <integer_type
> 0x7ffff19ba000 sizetype> constant 1>
> align 8 symtab 0 alias set -1 canonical type 0x7ffff1affbd0
> attributes <tree_list 0x7ffff1b00a00
> purpose <identifier_node 0x7ffff19dfd98 fn spec>
> value <tree_list 0x7ffff1b00a28
> value <string_cst 0x7ffff1b01138 constant ".wR">>>
> arg-types <tree_list 0x7ffff1b00a50
> value <pointer_type 0x7ffff1aff738 type <record_type
> 0x7ffff1aff7e0 __st_parameter_dt>
> unsigned DI
> size <integer_cst 0x7ffff19a9d20 constant 64>
> unit size <integer_cst 0x7ffff19a9d40 constant 8>
> align 64 symtab 0 alias set -1 canonical type 0x7ffff1aff738>
> chain <tree_list 0x7ffff1b00a78 value <pointer_type 0x7ffff19bac78>
> chain <tree_list 0x7ffff1b00aa0 value <integer_type
> 0x7ffff19ba5e8 int>
> chain <tree_list 0x7ffff19b4708 value <void_type
> 0x7ffff19babd0 void>>>>>>
> (gdb) call debug_tree (t2)
> <function_type 0x7ffff1b052a0
> type <void_type 0x7ffff19babd0 void VOID
> align 8 symtab 0 alias set -1 canonical type 0x7ffff19babd0
> pointer_to_this <pointer_type 0x7ffff19bac78>>
> QI
> size <integer_cst 0x7ffff19a9ea0 type <integer_type 0x7ffff19ba0a8
> bitsizetype> constant 8>
> unit size <integer_cst 0x7ffff19a9ec0 type <integer_type
> 0x7ffff19ba000 sizetype> constant 1>
> align 8 symtab 0 alias set -1 structural equality
> attributes <tree_list 0x7ffff1b06258
> purpose <identifier_node 0x7ffff19dfd98 fn spec>
> value <tree_list 0x7ffff1b06280
> value <string_cst 0x7ffff1b01288 constant ".wW">>>
> arg-types <tree_list 0x7ffff1b00a50
> value <pointer_type 0x7ffff1aff738 type <record_type
> 0x7ffff1aff7e0 __st_parameter_dt>
> unsigned DI
> size <integer_cst 0x7ffff19a9d20 constant 64>
> unit size <integer_cst 0x7ffff19a9d40 constant 8>
> align 64 symtab 0 alias set -1 canonical type 0x7ffff1aff738>
> chain <tree_list 0x7ffff1b00a78 value <pointer_type 0x7ffff19bac78>
> chain <tree_list 0x7ffff1b00aa0 value <integer_type
> 0x7ffff19ba5e8 int>
> chain <tree_list 0x7ffff19b4708 value <void_type
> 0x7ffff19babd0 void>>>>>>
> (gdb)
>
You only have different ATTR_FNSPEC attributes. I don't know whether
that should result in the types being incompatible, but I don't think
so.
How does this lead to failure? Is one of the types chosen as
prevailing so that one of the functions ends up with the wrong
ATTR_FNSPEC?
Ciao!
Steven