[PATCH] Silence some dwarf2out UNSPEC related notes (PR debug/88723)
Richard Biener
rguenther@suse.de
Mon Jan 7 09:50:00 GMT 2019
On Mon, 7 Jan 2019, Jakub Jelinek wrote:
> Hi!
>
> Apparently my recent patch turned on many non-delegitimized UNSPEC notes
> (it is checking only note, goes away in release builds, but anyway).
>
> The problem is that formerly UNSPECs were diagnosed that way only when
> inside of CONST, but now also outside of them. The patch keeps ignoring
> them if they don't have all constant arguments though as before, only tries
> to handle them if they have all constant arguments and thus normally would
> appear inside of CONST but we are processing parts of the CONST
> individually.
>
> The following patch fixes it by determining first if they have all
> CONSTANT_P arguments, and only if they do, follows that with
> const_ok_for_output_1 verification which can emit this diagnostics.
>
> The patch also removes what appears to be a badly applied patch in r255862,
> the posted patch contained just addition of if (CONST_POLY_INT_P (rtl)) return false;
> to the function, but added also the hunk I'm removing, so we have now
> if (targetm.const_not_ok_for_debug_p (rtl))
> {
> if (GET_CODE (rtl) != UNSPEC)
> {
> diagnostics;
> return false;
> }
> another diagnostics;
> return false;
> }
> if (CONST_POLY_INT_P (rtl))
> return false;
> if (targetm.const_not_ok_for_debug_p (rtl))
> {
> diagnostics;
> return false;
> }
> Calling it twice will not help in any way.
>
> Bootstrapped/regtested on x86_64-linux and i686-linux, plus tested on the
> testcase with -> sparc-solaris cross-compiler, ok for trunk?
OK.
Richard.
> 2019-01-07 Jakub Jelinek <jakub@redhat.com>
>
> PR debug/88723
> * dwarf2out.c (const_ok_for_output_1): Remove redundant call to
> const_not_ok_for_debug_p target hook.
> (mem_loc_descriptor) <case UNSPEC>: Only call const_ok_for_output_1
> on UNSPEC and subexpressions thereof if all subexpressions of the
> UNSPEC are CONSTANT_P.
>
> --- gcc/dwarf2out.c.jj 2019-01-05 12:10:36.630753817 +0100
> +++ gcc/dwarf2out.c 2019-01-06 21:33:58.583426865 +0100
> @@ -14445,13 +14445,6 @@ const_ok_for_output_1 (rtx rtl)
> if (CONST_POLY_INT_P (rtl))
> return false;
>
> - if (targetm.const_not_ok_for_debug_p (rtl))
> - {
> - expansion_failed (NULL_TREE, rtl,
> - "Expression rejected for debug by the backend.\n");
> - return false;
> - }
> -
> /* FIXME: Refer to PR60655. It is possible for simplification
> of rtl expressions in var tracking to produce such expressions.
> We should really identify / validate expressions
> @@ -15660,8 +15653,17 @@ mem_loc_descriptor (rtx rtl, machine_mod
> bool not_ok = false;
> subrtx_var_iterator::array_type array;
> FOR_EACH_SUBRTX_VAR (iter, array, rtl, ALL)
> - if ((*iter != rtl && !CONSTANT_P (*iter))
> - || !const_ok_for_output_1 (*iter))
> + if (*iter != rtl && !CONSTANT_P (*iter))
> + {
> + not_ok = true;
> + break;
> + }
> +
> + if (not_ok)
> + break;
> +
> + FOR_EACH_SUBRTX_VAR (iter, array, rtl, ALL)
> + if (!const_ok_for_output_1 (*iter))
> {
> not_ok = true;
> break;
>
>
> Jakub
>
>
--
Richard Biener <rguenther@suse.de>
SUSE LINUX GmbH, GF: Felix Imendoerffer, Jane Smithard, Graham Norton, HRB 21284 (AG Nuernberg)
More information about the Gcc-patches
mailing list