http://gcc.gnu.org/bugzilla/show_bug.cgi?id=52857

--- Comment #3 from H.J. Lu <hjl.tools at gmail dot com> 2012-04-06 13:05:49 
UTC ---
For

(note 21 8 17 2 (expr_list:REG_DEP_TRUE (concat:SI (reg:SI 5 di) 
        (subreg:SI (plus:DI (reg/f:DI 16 argp)
                (const_int -20 [0xffffffffffffffec])) 0)) 
    (nil)) NOTE_INSN_CALL_ARG_LOCATION)

when

(plus:DI (reg/f:DI 16 argp)
    (const_int -20 [0xffffffffffffffec]))

reaches

   case PLUS: 
    plus: 
      if (is_based_loc (rtl) 
          && GET_MODE_SIZE (mode) <= DWARF2_ADDR_SIZE
          && GET_MODE_CLASS (mode) == MODE_INT)
        mem_loc_result = based_loc_descr (XEXP (rtl, 0),
                                          INTVAL (XEXP (rtl, 1)),
                                          VAR_INIT_STATUS_INITIALIZED);
      else  

it fails "GET_MODE_SIZE (mode) <= DWARF2_ADDR_SIZE" since
we have ptr_mode = SImode and Pmode == DImode.  However,
arg_pointer_rtx and frame_pointer_rtx are special cases.
They should be allowed even if their mode sizes >
DWARF2_ADDR_SIZE.

Reply via email to