public inbox for gcc-patches@gcc.gnu.org
 help / color / mirror / Atom feed
From: Richard Sandiford <richard.sandiford@arm.com>
To: Rainer Orth <ro@CeBiTec.Uni-Bielefeld.DE>
Cc: Jeff Law <law@redhat.com>,  gcc-patches@gcc.gnu.org
Subject: Re: Fix reload1.c warning for some targets
Date: Thu, 03 Sep 2015 08:50:00 -0000	[thread overview]
Message-ID: <87lhcn6gn4.fsf@e105548-lin.cambridge.arm.com> (raw)
In-Reply-To: <ydd1tet7yex.fsf@lokon.CeBiTec.Uni-Bielefeld.DE> (Rainer Orth's	message of "Mon, 24 Aug 2015 12:50:46 +0200")

Rainer Orth <ro@CeBiTec.Uni-Bielefeld.DE> writes:
> Richard Sandiford <rdsandiford@googlemail.com> writes:
>> Jeff Law <law@redhat.com> writes:
>>> On 08/05/2015 08:18 AM, Richard Sandiford wrote:
>>>> Building some targets results in a warning about orig_dup[i] potentially
>>>> being used uninitialised.  I think the warning is fair, since it isn't
>>>> obvious that the reog_data-based loop bound remains unchanged between:
>>>>
>>>>    for (i = 0; i < recog_data.n_dups; i++)
>>>>      orig_dup[i] = *recog_data.dup_loc[i];
>>>>
>>>> and:
>>>>
>>>>    for (i = 0; i < recog_data.n_dups; i++)
>>>>      *recog_data.dup_loc[i] = orig_dup[i];
>>>>
>>>> Tested on x86_64-linux-gnu.  OK to install?
>>>>
>>>> Thanks,
>>>> Richard
>>>>
>>>> gcc/
>>>> 	* reload1.c (elimination_costs_in_insn): Make it obvious to the
>>>> 	compiler that the n_dups and n_operands loop bounds are invariant.
>>> So thinking more about this, I think the best way forward is to:
>>>
>>>    1. Create a new BZ with the false positive extracted from c#4.
>>>
>>>    2. Install your patch and close 55035.
>>>
>>> I'll take care of #1, you can handle #2.
>>
>> Thanks, I've now done #2.
>
> Unfortunately the patch broke sparcv9-sun-solaris2* (only,
> sparc-sun-solaris2* is fine) bootstrap:
>
> /vol/gcc/src/hg/trunk/local/gcc/reload1.c: In function 'void elimination_costs_in_insn(rtx_insn*)':
> /vol/gcc/src/hg/trunk/local/gcc/reload1.c:3772:41: error: 'orig_dup[1]' may be used uninitialized in this function [-Werror=maybe-uninitialized]
>      *recog_data.dup_loc[i] = orig_dup[i];
>                                          ^
> /vol/gcc/src/hg/trunk/local/gcc/reload1.c:3772:41: error: 'orig_dup[0]' may be used uninitialized in this function [-Werror=maybe-uninitialized]
>
> 	Rainer

Sorry for the slow reply.  I did try to coerce the current uninit
pass to handle this case, but the patch I ended up with only worked
by accident because of the strange way in which the pass handles
limit cases.  (If we have more than MAX_NUM_CHAINS chains, it silently
drops the excess chains and continues regardless, so it's quite easy
to come up with cases where the predicates for either the definition
or the use consider an arbitrary subset of the actual conditions.)

It sounds like Jeff has a much more radical rewrite in mind,
so for now how about just turning -Wmaybe-uninitialized into
a warning for this function?  The patch will mean that it becomes
a warning even if someone turns off warnings on the command line,
but I don't think that's important.

Bootstrapped and regression-tested on x86_64-linux-gnu.  Also tested
with a cross-compiler to sparc-linux-gnu (which also triggered the
warning for me).  Tested that clang could still compile the file.
OK to install?


gcc/
	* reload1.c (elimination_costs_in_insn): Locally turn
	-Wmaybe-uninitialized into a warning.

diff --git a/gcc/reload1.c b/gcc/reload1.c
index ad243e3..c7cc37b 100644
--- a/gcc/reload1.c
+++ b/gcc/reload1.c
@@ -3636,6 +3636,8 @@ eliminate_regs_in_insn (rtx_insn *insn, int replace)
    eliminations in its operands and record cases where eliminating a reg with
    an invariant equivalence would add extra cost.  */
 
+#pragma GCC diagnostic push
+#pragma GCC diagnostic warning "-Wmaybe-uninitialized"
 static void
 elimination_costs_in_insn (rtx_insn *insn)
 {
@@ -3785,6 +3787,7 @@ elimination_costs_in_insn (rtx_insn *insn)
 
   return;
 }
+#pragma GCC diagnostic pop
 
 /* Loop through all elimination pairs.
    Recalculate the number not at initial offset.

  reply	other threads:[~2015-09-03  8:39 UTC|newest]

Thread overview: 11+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2015-08-05 14:18 Richard Sandiford
2015-08-05 17:01 ` Jeff Law
2015-08-05 17:33   ` Richard Sandiford
2015-08-11 20:05     ` Jeff Law
2015-08-12 17:17 ` Jeff Law
2015-08-13 20:33   ` Richard Sandiford
2015-08-13 21:08     ` Jeff Law
2015-08-24 11:05     ` Rainer Orth
2015-09-03  8:50       ` Richard Sandiford [this message]
2015-09-04 20:16         ` Jeff Law
2015-09-10 19:33           ` Richard Sandiford

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=87lhcn6gn4.fsf@e105548-lin.cambridge.arm.com \
    --to=richard.sandiford@arm.com \
    --cc=gcc-patches@gcc.gnu.org \
    --cc=law@redhat.com \
    --cc=ro@CeBiTec.Uni-Bielefeld.DE \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for read-only IMAP folder(s) and NNTP newsgroup(s).