On Fri, Apr 6, 2012 at 6:30 AM, H.J. Lu <hongjiu...@intel.com> wrote: > Hi, > > With ptr_mode = SImode and Pmode == DImode, given > > (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 mem_loc_descriptor: > > 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 mode is DImode > and DWARF2_ADDR_SIZE is 4. arg_pointer_rtx and frame_pointer_rtx are > special cases. They should be allowed for based_loc_descr even if their > mode sizes > DWARF2_ADDR_SIZE. OK for trunk? >
I missed another place where arg_pointer_rtx and frame_pointer_rtx should be allowed for based_loc_descr. Tested on Linux/ia32, Linux/x86-64 and Linux/x32. OK for trunk? Thanks. -- H.J.
gcc-pr52857-2.patch
Description: Binary data