public inbox for linux-kernel@vger.kernel.org
 help / color / mirror / Atom feed
From: Momchil Velikov <velco@fadata.bg>
To: Andreas Schwab <schwab@suse.de>
Cc: root@chaos.analogic.com, Jan Hudec <bulb@ucw.cz>,
	linux-kernel@vger.kernel.org
Subject: Re: [BUG] Bad #define, nonportable C, missing {}
Date: 21 Nov 2001 17:48:25 +0200	[thread overview]
Message-ID: <87u1voyvjq.fsf@fadata.bg> (raw)
In-Reply-To: <Pine.LNX.3.95.1011121085737.21389A-100000@chaos.analogic.com> <jelmh09nkt.fsf@sykes.suse.de>
In-Reply-To: <jelmh09nkt.fsf@sykes.suse.de>

>>>>> "Andreas" == Andreas Schwab <schwab@suse.de> writes:

Andreas> "Richard B. Johnson" <root@chaos.analogic.com> writes:
Andreas> |> On Wed, 21 Nov 2001, Jan Hudec wrote:
Andreas> |> 
Andreas> |> > > >     *a++ = byte_rev[*a]
Andreas> |> > > It looks perferctly okay to me. Anyway, whenever would you listen to a
Andreas> |> > > C++ book talking about good C coding :p
Andreas> |> > 
Andreas> |> 
Andreas> |> It's simple. If any object is modified twice without an intervening
Andreas> |> sequence point, the results are undefined. The sequence-point in
Andreas> |> 
Andreas> |> 	*a++ = byte_rev[*a];
Andreas> |> 
Andreas> |> ... is the ';'.
Andreas> |> 
Andreas> |> So, we look at 'a' and see if it's modified twice.

Andreas> No, the rule much stricter. 

Andreas>          -- Between two sequence points, an object is modified more
Andreas>             than once, or  is  modified  and  the  prior  value  is
Andreas>             accessed other than to determine the value to be stored
Andreas>             (6.5).

Hmm, I guess some context is missing here. Let's make it

      Between the previous and next sequence point an object shall
      have its stored value modified at most once by the evaluation of
      an expression. Furthermore, the prior value shall be accessed
      only to determine the value to be stored.

So, the above ``*a++ = byte_rev[*a]'' is undefined, because the value
of ``a'' is accessed other than to determine the value to be stored in
``a'' (as Andreas pointed out).  The side effect of ``a++'' can take
place anywhere before the next sequence point (``;''), that's before
or after the array access, i.e. the statement can be evaluated as

       tmp = *a;
       *a++ = byte_rev[tmp];

 or as 

       tmp = *(a+1);
       *a++ = byte_rev [tmp];

Regards,
-velco


  reply	other threads:[~2001-11-21 15:42 UTC|newest]

Thread overview: 31+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2001-11-21 12:40 [BUG] Bad #define, nonportable C, missing {} vda
2001-11-21 11:10 ` Andreas Schwab
2001-11-21 11:16 ` Tim Waugh
2001-11-21 12:31 ` Ragnar Hojland Espinosa
2001-11-21 13:40   ` Jan Hudec
2001-11-21 14:19     ` Andreas Schwab
2001-11-21 14:52       ` Alexander Viro
2001-11-21 18:23     ` Neil Booth
2001-11-21 12:35 ` Vincent Sweeney
2001-11-21 13:37   ` Jan Hudec
2001-11-21 13:52     ` Mathijs Mohlmann
2001-11-21 17:12       ` vda
2001-11-26 20:28         ` Alan Cox
2001-11-27 18:03           ` vda
2001-11-27 18:38             ` Andreas Dilger
2001-11-28 13:19               ` vda
2001-11-21 14:12     ` Richard B. Johnson
2001-11-21 14:33       ` Eric W. Biederman
2001-11-21 14:56       ` Alexander Viro
2001-11-21 14:59       ` Andreas Schwab
2001-11-21 15:48         ` Momchil Velikov [this message]
2001-11-21 16:52       ` vda
2001-11-21 14:24     ` Sean Hunter
2001-11-21 14:25   ` Andreas Schwab
2001-11-22 20:43   ` Chris Gray
2001-11-22  4:24 ` Stevie O
2001-11-22 11:46   ` Horst von Brand
2001-11-22 12:03     ` Alexander Viro
2001-11-22 20:08   ` J.A. Magallon
     [not found]     ` <01112311540300.00886@manta>
2001-11-23 14:43       ` J.A. Magallon
  -- strict thread matches above, loose matches on Subject: below --
2001-11-27 19:03 Nathan Myers

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=87u1voyvjq.fsf@fadata.bg \
    --to=velco@fadata.bg \
    --cc=bulb@ucw.cz \
    --cc=linux-kernel@vger.kernel.org \
    --cc=root@chaos.analogic.com \
    --cc=schwab@suse.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