public inbox for gcc@gcc.gnu.org
 help / color / mirror / Atom feed
From: Jeff Law <law@redhat.com>
To: GCC <gcc@gcc.gnu.org>
Subject: (known?) Issue with bitmap iterators
Date: Sat, 20 Jun 2009 14:53:00 -0000	[thread overview]
Message-ID: <4A3CF81C.7050406@redhat.com> (raw)


Imagine a loop like this

EXECUTE_IF_SET_IN_BITMAP (something, 0, i, bi)
  {
    bitmap_clear_bit (something, i)
    [ ... whatever code we want to process i, ... ]
  }

This code is unsafe.

If bit I happens to be the only bit set in the current bitmap word, then 
bitmap_clear_bit will free the current element and return it to the 
element free list where it can be recycled.

So assume the bitmap element gets recycled for some other bitmap...  We 
then come around to the top of the loop where EXECUTE_IF_SET_IN_BITMAP 
will call bmp_iter_set which can reference the recycled element when it 
tries to advance to the next element via bi->elt1 = bi->elt1->next.  So 
we start iterating on elements of a completely different bitmap.  You 
can assume this is not good.

Our documentation clearly states that I is to remain unchanged, but ISTM 
that the bitmap we're iterating over needs to remain unchanged as well. 

Is this a known issue, or am I just the lucky bastard who tripped over 
it and now gets to audit all the EXECUTE_IF_SET_IN_BITMAP loops?

Jeff

             reply	other threads:[~2009-06-20 14:53 UTC|newest]

Thread overview: 22+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2009-06-20 14:53 Jeff Law [this message]
2009-06-20 15:01 ` Richard Guenther
2009-06-21  3:27   ` Peter Bergner
2009-06-22 17:06   ` Jeff Law
2009-06-22 17:46     ` Joe Buck
2009-06-22 19:07       ` Dave Korn
2009-06-25 18:11         ` Daniel Berlin
2009-06-25 18:37       ` Jeff Law
2009-06-25 22:39         ` Dave Korn
2009-07-01  2:14           ` Jeff Law
2009-06-26 10:47         ` Alexander Monakov
2009-06-26 16:51           ` Joe Buck
2009-06-26 19:28             ` Alexander Monakov
2009-07-01  2:21               ` Jeff Law
2009-07-01  6:48                 ` Dave Korn
2009-06-22  2:44 ` Daniel Berlin
2009-06-22 11:33   ` Dave Korn
2009-06-22 11:37     ` Richard Guenther
2009-06-22 13:06       ` Dave Korn
2009-06-22 13:38         ` Paolo Bonzini
2009-06-22 19:03           ` Dave Korn
2009-06-22 14:27   ` Andrew MacLeod

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=4A3CF81C.7050406@redhat.com \
    --to=law@redhat.com \
    --cc=gcc@gcc.gnu.org \
    /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).