arm: Handle fixed PIC register in require_pic_register (PR target/115485)
Commit r9-4307-g89d7557202d25a forgot to accept a fixed PIC register when extending the assert in require_pic_register. arm_pic_register can be set explicitly by the user (e.g. -mpic-register=r9) or implicitly as the default value with -fpic/-fPIC/-fPIE and -mno-pic-data-is-text-relative -mlong-calls, and we want to use/accept it when recording cfun->machine->pic_reg as used to be the case. PR target/115485 gcc/ * config/arm/arm.cc (require_pic_register): Fix typos in comment. Handle fixed arm_pic_register. gcc/testsuite/ * g++.target/arm/pr115485.C: New test.
This commit is contained in:
parent
e8651b80ae
commit
b1d0ac28de
2 changed files with 19 additions and 2 deletions
|
@ -8086,8 +8086,8 @@ legitimate_pic_operand_p (rtx x)
|
|||
|
||||
/* Record that the current function needs a PIC register. If PIC_REG is null,
|
||||
a new pseudo is allocated as PIC register, otherwise PIC_REG is used. In
|
||||
both case cfun->machine->pic_reg is initialized if we have not already done
|
||||
so. COMPUTE_NOW decide whether and where to set the PIC register. If true,
|
||||
both cases cfun->machine->pic_reg is initialized if we have not already done
|
||||
so. COMPUTE_NOW decides whether and where to set the PIC register. If true,
|
||||
PIC register is reloaded in the current position of the instruction stream
|
||||
irregardless of whether it was loaded before. Otherwise, it is only loaded
|
||||
if not already done so (crtl->uses_pic_offset_table is null). Note that
|
||||
|
@ -8107,6 +8107,7 @@ require_pic_register (rtx pic_reg, bool compute_now)
|
|||
if (!crtl->uses_pic_offset_table || compute_now)
|
||||
{
|
||||
gcc_assert (can_create_pseudo_p ()
|
||||
|| (arm_pic_register != INVALID_REGNUM)
|
||||
|| (pic_reg != NULL_RTX
|
||||
&& REG_P (pic_reg)
|
||||
&& GET_MODE (pic_reg) == Pmode));
|
||||
|
|
16
gcc/testsuite/g++.target/arm/pr115485.C
Normal file
16
gcc/testsuite/g++.target/arm/pr115485.C
Normal file
|
@ -0,0 +1,16 @@
|
|||
/* { dg-do compile } */
|
||||
/* { dg-options "-fPIE -mno-pic-data-is-text-relative -mlong-calls -ffunction-sections" } */
|
||||
|
||||
struct c1 {
|
||||
virtual void func1() = 0;
|
||||
};
|
||||
struct c2 {
|
||||
virtual ~c2() {}
|
||||
};
|
||||
struct c3 : c2, c1 {
|
||||
void func1() override;
|
||||
void func3();
|
||||
};
|
||||
void c3::func1() {
|
||||
func3();
|
||||
}
|
Loading…
Add table
Reference in a new issue