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)

Reply via email to