Hi Jason, Richard, This patch:
http://gcc.gnu.org/ml/gcc-patches/2011-03/msg00814.html failed to handle SUBREG in prepare_call_arguments. This patch fixes it. OK for trunk? Thanks. H.J. --- 2011-03-16 H.J. Lu <hongjiu...@intel.com> PR debug/48160 * var-tracking.c (prepare_call_arguments): Check SUBREG. diff --git a/gcc/var-tracking.c b/gcc/var-tracking.c index 266f11f..cfa74a6 100644 --- a/gcc/var-tracking.c +++ b/gcc/var-tracking.c @@ -5763,7 +5763,11 @@ prepare_call_arguments (basic_block bb, rtx insn) /* Try harder, when passing address of a constant pool integer it can be easily read back. */ - val = CSELIB_VAL_PTR (XEXP (item, 1)); + item = XEXP (item, 1); + if (GET_CODE (item) == SUBREG) + item = SUBREG_REG (item); + gcc_assert (GET_CODE (item) == VALUE); + val = CSELIB_VAL_PTR (item); for (l = val->locs; l; l = l->next) if (GET_CODE (l->loc) == SYMBOL_REF && TREE_CONSTANT_POOL_ADDRESS_P (l->loc)