https://gcc.gnu.org/bugzilla/show_bug.cgi?id=63824
Bug ID: 63824
Summary: [5.0 Regression]: ICE with -mcmodel=large -fpic and
pseudo PIC
Product: gcc
Version: 5.0
Status: UNCONFIRMED
Severity: normal
Priority: P3
Component: target
Assignee: unassigned at gcc dot gnu.org
Reporter: ubizjak at gmail dot com
This ICE can be seen in [1] as FAIL: g++.dg/other/pr53811.C on Darwin, but can
be triggered also on x86_64 linux with -mcmodel=large -fpic
The problem starts in x86_output_mi_thunk, where we have:
if (ix86_cmodel == CM_LARGE_PIC && SYMBOLIC_CONST (fnaddr))
fnaddr = legitimize_pic_address (fnaddr,
gen_rtx_REG (Pmode, tmp_regno));
and legitimize_pic_address does:
13537 if (reg != 0)
13538 {
13539 new_rtx = expand_simple_binop (Pmode, PLUS, reg,
pic_offset_table_rtx,
13540 tmpreg, 1, OPTAB_DIRECT);
13541 new_rtx = reg;
13542 }
Please note that x86_output_mi_thunk runs after reload, and the above code
emits RTX with a pseudo pic_offset_table_rtx register.
[1] https://gcc.gnu.org/ml/gcc-testresults/2014-11/msg01024.html