From: Jakub Jelinek Date: Thu, 17 Mar 2011 20:34:59 +0000 (+0100) Subject: re PR debug/48163 (ICEs for cris-elf, like gcc.c-torture/compile/calls.c gcc.c-tortur... X-Git-Url: https://git.libre-soc.org/?a=commitdiff_plain;h=8b29c87a61bf1ea9aa4691dd3c07ef79119d790a;p=gcc.git re PR debug/48163 (ICEs for cris-elf, like gcc.c-torture/compile/calls.c gcc.c-torture/execute/complex-1.c) 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 --- diff --git a/gcc/ChangeLog b/gcc/ChangeLog index 3e4a5114572..815ab0ceee2 100644 --- a/gcc/ChangeLog +++ b/gcc/ChangeLog @@ -1,5 +1,13 @@ 2011-03-17 Jakub Jelinek + 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 diff --git a/gcc/dwarf2out.c b/gcc/dwarf2out.c index 31d9a0e9925..74905e3f53e 100644 --- a/gcc/dwarf2out.c +++ b/gcc/dwarf2out.c @@ -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; diff --git a/gcc/var-tracking.c b/gcc/var-tracking.c index 7c4c2c57b36..d92ca59055e 100644 --- a/gcc/var-tracking.c +++ b/gcc/var-tracking.c @@ -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))