re PR debug/41238 (VTA: bootstrap failure, ICE in loc_cmp, at var-tracking.c:2456)
PR debug/41238 * function.c (assign_parm_find_stack_rtl): Don't set mem attributes on the stack slot if it is passed by invisible reference. * var-tracking.c (vt_add_function_parameters): Handle arguments passed by invisible reference. From-SVN: r151384
This commit is contained in:
parent
eead42e0c5
commit
08ab0acf19
3 changed files with 39 additions and 16 deletions
|
@ -1,3 +1,11 @@
|
|||
2009-09-03 Jakub Jelinek <jakub@redhat.com>
|
||||
|
||||
PR debug/41238
|
||||
* function.c (assign_parm_find_stack_rtl): Don't set mem attributes on
|
||||
the stack slot if it is passed by invisible reference.
|
||||
* var-tracking.c (vt_add_function_parameters): Handle arguments passed by
|
||||
invisible reference.
|
||||
|
||||
2009-09-03 Bernd Schmidt <bernd.schmidt@analog.com>
|
||||
|
||||
* config/bfin/linux.h (TARGET_SUPPORTS_SYNC_CALLS): Define to 1.
|
||||
|
|
|
@ -2433,20 +2433,25 @@ assign_parm_find_stack_rtl (tree parm, struct assign_parm_data_one *data)
|
|||
stack_parm = gen_rtx_PLUS (Pmode, stack_parm, offset_rtx);
|
||||
stack_parm = gen_rtx_MEM (data->promoted_mode, stack_parm);
|
||||
|
||||
set_mem_attributes (stack_parm, parm, 1);
|
||||
/* set_mem_attributes could set MEM_SIZE to the passed mode's size,
|
||||
while promoted mode's size is needed. */
|
||||
if (data->promoted_mode != BLKmode
|
||||
&& data->promoted_mode != DECL_MODE (parm))
|
||||
if (!data->passed_pointer)
|
||||
{
|
||||
set_mem_size (stack_parm, GEN_INT (GET_MODE_SIZE (data->promoted_mode)));
|
||||
if (MEM_EXPR (stack_parm) && MEM_OFFSET (stack_parm))
|
||||
set_mem_attributes (stack_parm, parm, 1);
|
||||
/* set_mem_attributes could set MEM_SIZE to the passed mode's size,
|
||||
while promoted mode's size is needed. */
|
||||
if (data->promoted_mode != BLKmode
|
||||
&& data->promoted_mode != DECL_MODE (parm))
|
||||
{
|
||||
int offset = subreg_lowpart_offset (DECL_MODE (parm),
|
||||
data->promoted_mode);
|
||||
if (offset)
|
||||
set_mem_offset (stack_parm,
|
||||
plus_constant (MEM_OFFSET (stack_parm), -offset));
|
||||
set_mem_size (stack_parm,
|
||||
GEN_INT (GET_MODE_SIZE (data->promoted_mode)));
|
||||
if (MEM_EXPR (stack_parm) && MEM_OFFSET (stack_parm))
|
||||
{
|
||||
int offset = subreg_lowpart_offset (DECL_MODE (parm),
|
||||
data->promoted_mode);
|
||||
if (offset)
|
||||
set_mem_offset (stack_parm,
|
||||
plus_constant (MEM_OFFSET (stack_parm),
|
||||
-offset));
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
@ -7058,10 +7058,20 @@ vt_add_function_parameters (void)
|
|||
|
||||
if (!vt_get_decl_and_offset (incoming, &decl, &offset))
|
||||
{
|
||||
if (!vt_get_decl_and_offset (decl_rtl, &decl, &offset))
|
||||
continue;
|
||||
offset += byte_lowpart_offset (GET_MODE (incoming),
|
||||
GET_MODE (decl_rtl));
|
||||
if (REG_P (incoming) || MEM_P (incoming))
|
||||
{
|
||||
/* This means argument is passed by invisible reference. */
|
||||
offset = 0;
|
||||
decl = parm;
|
||||
incoming = gen_rtx_MEM (GET_MODE (decl_rtl), incoming);
|
||||
}
|
||||
else
|
||||
{
|
||||
if (!vt_get_decl_and_offset (decl_rtl, &decl, &offset))
|
||||
continue;
|
||||
offset += byte_lowpart_offset (GET_MODE (incoming),
|
||||
GET_MODE (decl_rtl));
|
||||
}
|
||||
}
|
||||
|
||||
if (!decl)
|
||||
|
|
Loading…
Add table
Reference in a new issue