re PR target/80090 (Incorrect assembler - output_addr_const may generate visibility output between op and address constant)
PR target/80090 * config/pa/pa.c (pa_assemble_integer): When outputting a SYMBOL_REF, handle calling assemble_external ourself. From-SVN: r247873
This commit is contained in:
parent
3ad1ecbb89
commit
e6aed289f5
|
@ -1,5 +1,9 @@
|
|||
2017-05-10 John David Anglin <danglin@gcc.gnu.org>
|
||||
|
||||
PR target/80090
|
||||
* config/pa/pa.c (pa_assemble_integer): When outputting a SYMBOL_REF,
|
||||
handle calling assemble_external ourself.
|
||||
|
||||
PR target/79027
|
||||
* config/pa/pa.c (pa_cannot_change_mode_class): Reject changes to/from
|
||||
modes with zero size. Enhance comment.
|
||||
|
|
|
@ -3299,6 +3299,24 @@ pa_output_64bit_ior (rtx *operands)
|
|||
static bool
|
||||
pa_assemble_integer (rtx x, unsigned int size, int aligned_p)
|
||||
{
|
||||
bool result;
|
||||
tree decl = NULL;
|
||||
|
||||
/* When we have a SYMBOL_REF with a SYMBOL_REF_DECL, we need to call
|
||||
call assemble_external and set the SYMBOL_REF_DECL to NULL before
|
||||
calling output_addr_const. Otherwise, it may call assemble_external
|
||||
in the midst of outputing the assembler code for the SYMBOL_REF.
|
||||
We restore the SYMBOL_REF_DECL after the output is done. */
|
||||
if (GET_CODE (x) == SYMBOL_REF)
|
||||
{
|
||||
decl = SYMBOL_REF_DECL (x);
|
||||
if (decl)
|
||||
{
|
||||
assemble_external (decl);
|
||||
SET_SYMBOL_REF_DECL (x, NULL);
|
||||
}
|
||||
}
|
||||
|
||||
if (size == UNITS_PER_WORD
|
||||
&& aligned_p
|
||||
&& function_label_operand (x, VOIDmode))
|
||||
|
@ -3311,9 +3329,15 @@ pa_assemble_integer (rtx x, unsigned int size, int aligned_p)
|
|||
|
||||
output_addr_const (asm_out_file, x);
|
||||
fputc ('\n', asm_out_file);
|
||||
return true;
|
||||
result = true;
|
||||
}
|
||||
return default_assemble_integer (x, size, aligned_p);
|
||||
else
|
||||
result = default_assemble_integer (x, size, aligned_p);
|
||||
|
||||
if (decl)
|
||||
SET_SYMBOL_REF_DECL (x, decl);
|
||||
|
||||
return result;
|
||||
}
|
||||
|
||||
/* Output an ascii string. */
|
||||
|
|
Loading…
Reference in New Issue