re PR debug/48163 (ICEs for cris-elf, like gcc.c-torture/compile/calls.c gcc.c-tortur...
authorJakub Jelinek <jakub@redhat.com>
Thu, 17 Mar 2011 20:34:59 +0000 (21:34 +0100)
committerJakub Jelinek <jakub@gcc.gnu.org>
Thu, 17 Mar 2011 20:34:59 +0000 (21:34 +0100)
PR debug/48163
* var-tracking.c (prepare_call_arguments): If CALL target
is a non-SYMBOL_REF CONSTANT_P, just add that into the list as
pc instead of looking it up using cselib_lookup and use
Pmode for it if x has VOIDmode.
* dwarf2out.c (gen_subprogram_die): If also both first and
second CONCAT arguments are VOIDmode, use mode of CONCAT itself.

From-SVN: r171114

gcc/ChangeLog
gcc/dwarf2out.c
gcc/var-tracking.c

index 3e4a5114572fb5d80af39981ebddcdb08ebbc9e7..815ab0ceee20266ef2cdc40addb01a11d94a2865 100644 (file)
@@ -1,5 +1,13 @@
 2011-03-17  Jakub Jelinek  <jakub@redhat.com>
 
+       PR debug/48163
+       * var-tracking.c (prepare_call_arguments): If CALL target
+       is a non-SYMBOL_REF CONSTANT_P, just add that into the list as
+       pc instead of looking it up using cselib_lookup and use
+       Pmode for it if x has VOIDmode.
+       * dwarf2out.c (gen_subprogram_die): If also both first and
+       second CONCAT arguments are VOIDmode, use mode of CONCAT itself.
+
        PR debug/48163
        * function.c (assign_parms): For data.passed_pointer parms
        use MEM of data.entry_parm instead of data.entry_parm itself
index 31d9a0e99256d3178cf725f05e05d9e534403664..74905e3f53efd309ed34c73c10f0e22aba5bbbdc 100644 (file)
@@ -19481,7 +19481,11 @@ gen_subprogram_die (tree decl, dw_die_ref context_die)
                         == REGNO (XEXP (XEXP (XEXP (next_arg, 0), 0), 0)))
                    next_arg = XEXP (next_arg, 1);
                  if (mode == VOIDmode)
-                   mode = GET_MODE (XEXP (XEXP (arg, 0), 0));
+                   {
+                     mode = GET_MODE (XEXP (XEXP (arg, 0), 0));
+                     if (mode == VOIDmode)
+                       mode = GET_MODE (XEXP (arg, 0));
+                   }
                  if (GET_MODE_CLASS (mode) != MODE_INT
                      || GET_MODE_SIZE (mode) > DWARF2_ADDR_SIZE)
                    continue;
index 7c4c2c57b362d26a719e70c3f9e54d6f4e59f152..d92ca59055e841947165e1bfa6a00b472d9617bf 100644 (file)
@@ -5818,7 +5818,16 @@ prepare_call_arguments (basic_block bb, rtx insn)
   if (GET_CODE (x) == CALL && MEM_P (XEXP (x, 0)))
     {
       x = XEXP (XEXP (x, 0), 0);
-      if (GET_CODE (x) != SYMBOL_REF)
+      if (GET_CODE (x) == SYMBOL_REF)
+       /* Don't record anything.  */;
+      else if (CONSTANT_P (x))
+       {
+         x = gen_rtx_CONCAT (GET_MODE (x) == VOIDmode ? Pmode : GET_MODE (x),
+                             pc_rtx, x);
+         call_arguments
+           = gen_rtx_EXPR_LIST (VOIDmode, x, call_arguments);
+       }
+      else
        {
          cselib_val *val = cselib_lookup (x, GET_MODE (x), 0, VOIDmode);
          if (val && cselib_preserved_value_p (val))