diff mbox

[PR,61186]

Message ID 20140611201556.GA30761@virgil.suse
State New
Headers show

Commit Message

Martin Jambor June 11, 2014, 8:15 p.m. UTC
Hi,

in PR 61186 valgrind reports use of uninitialized value.  The reason
is that walk_polymorphic_call_targets uses cache_token before it
checks return value of possible_polymorphic_call_targets which however
does not produce a cache token if it fails early.  This is not the
only place where we make this mistake so I decided to store NULL to
cache_token in these cases instead.  I understand this slightly
controversial as it means that the callers making this error will now
end up with a NULL pointer in their pointer_sets (which they use in
order not to process the same results multiple times).  It just seemed
quite a lot easier and also avoids making the same mistake elsewhere
in future.

Bootstrapped and tested on x86_64-linux, I have of course also
verified it fixes the bug.  OK for trunk?  And perhaps also the 4.9
branch?

Thanks,

Martin


2014-06-11  Martin Jambor  <mjambor@suse.cz>

	PR ipa/61186
	* ipa-devirt.c (possible_polymorphic_call_targets): Store NULL to
	cache_token if returning early.

Comments

Jan Hubicka June 11, 2014, 10:22 p.m. UTC | #1
> Hi,
> 
> in PR 61186 valgrind reports use of uninitialized value.  The reason
> is that walk_polymorphic_call_targets uses cache_token before it
> checks return value of possible_polymorphic_call_targets which however
> does not produce a cache token if it fails early.  This is not the
> only place where we make this mistake so I decided to store NULL to
> cache_token in these cases instead.  I understand this slightly
> controversial as it means that the callers making this error will now
> end up with a NULL pointer in their pointer_sets (which they use in
> order not to process the same results multiple times).  It just seemed
> quite a lot easier and also avoids making the same mistake elsewhere
> in future.
> 
> Bootstrapped and tested on x86_64-linux, I have of course also
> verified it fixes the bug.  OK for trunk?  And perhaps also the 4.9
> branch?

OK for mainline and branch.
Honza
diff mbox

Patch

diff --git a/gcc/ipa-devirt.c b/gcc/ipa-devirt.c
index d733461..a90d1dc 100644
--- a/gcc/ipa-devirt.c
+++ b/gcc/ipa-devirt.c
@@ -1603,6 +1603,8 @@  possible_polymorphic_call_targets (tree otr_type,
     {
       if (completep)
 	*completep = false;
+      if (cache_token)
+	*cache_token = NULL;
       if (nonconstruction_targetsp)
 	*nonconstruction_targetsp = 0;
       return nodes;
@@ -1613,6 +1615,8 @@  possible_polymorphic_call_targets (tree otr_type,
     {
       if (completep)
 	*completep = true;
+      if (cache_token)
+	*cache_token = NULL;
       if (nonconstruction_targetsp)
 	*nonconstruction_targetsp = 0;
       return nodes;
@@ -1626,6 +1630,8 @@  possible_polymorphic_call_targets (tree otr_type,
     {
       if (completep)
 	*completep = false;
+      if (cache_token)
+	*cache_token = NULL;
       if (nonconstruction_targetsp)
 	*nonconstruction_targetsp = 0;
       return nodes;