Patchwork dead_debug_local_finish may be used uninit warning

login
register
mail settings
Submitter Alexandre Oliva
Date Oct. 30, 2012, 11 p.m.
Message ID <or1ugfmuox.fsf@livre.localdomain>
Download mbox | patch
Permalink /patch/195648/
State New
Headers show

Comments

Alexandre Oliva - Oct. 30, 2012, 11 p.m.
On Oct 30, 2012, Roland McGrath <roland@hack.frob.com> wrote:

> The only initialization is conditional, but at least the first and last
> uses are unconditional.  (I don't understand the conditions of the second
> use enough to know whether it's always kosher.)

Lawrence let me know about that warning earlier today.  I don't get the
warning myself (my experiment to see what kind of warnings Googlers rely
on was a total success ;-), but I can explain why the code ended up this
way: before I made sure the condition protecting the assignment had to
be true, I had an else branch that initialized entry.  When I confirmed
the condition had to hold and the then branch was always taken, I
removed the else, but somehow I failed to turn the if into an assert.
Oops.  Sorry about that.

Here's a ready-to-install version of the patch I sent Lawrence earlier
today.  I'm nearly done testing the patch, and I'll check it as obvious
when it's done.

Patch

Avoid uninitialized warning when globalizing dead debug uses

From: Alexandre Oliva <aoliva@redhat.com>

for  gcc/ChangeLog

	PR debug/54551
	PR debug/54693
	* valtrack.c (dead_debug_promote_uses): Assert-check that
	global used bit was clear and initialize entry
	unconditionally.
---

 gcc/valtrack.c |    8 +++++---
 1 files changed, 5 insertions(+), 3 deletions(-)


diff --git a/gcc/valtrack.c b/gcc/valtrack.c
index c1de41c..5eefabd 100644
--- a/gcc/valtrack.c
+++ b/gcc/valtrack.c
@@ -380,9 +380,11 @@  dead_debug_promote_uses (struct dead_debug_local *debug)
       if (!debug->global->used)
 	debug->global->used = BITMAP_ALLOC (NULL);
 
-      if (bitmap_set_bit (debug->global->used, REGNO (reg)))
-	entry = dead_debug_global_insert (debug->global, reg,
-					  make_debug_expr_from_rtl (reg));
+      bool added = bitmap_set_bit (debug->global->used, REGNO (reg));
+      gcc_checking_assert (added);
+
+      entry = dead_debug_global_insert (debug->global, reg,
+					make_debug_expr_from_rtl (reg));
 
       gcc_checking_assert (entry->dtemp);