[Bug target/63815] g++.dg/other/pr53811.C fails on darwin14

ubizjak at gmail dot com gcc-bugzilla@gcc.gnu.org
Tue Nov 11 18:37:00 GMT 2014


https://gcc.gnu.org/bugzilla/show_bug.cgi?id=63815

Uroš Bizjak <ubizjak at gmail dot com> changed:

           What    |Removed                     |Added
----------------------------------------------------------------------------
             Target|x86_64-apple-darwin14       |x86_64
                 CC|                            |enkovich.gnu at gmail dot com
               Host|x86_64-apple-darwin14       |
              Build|x86_64-apple-darwin14       |

--- Comment #5 from Uroš Bizjak <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


More information about the Gcc-bugs mailing list