public inbox for gcc@gcc.gnu.org
 help / color / mirror / Atom feed
From: Ian Lance Taylor <ian@wasabisystems.com>
To: Diego Novillo <dnovillo@redhat.com>
Cc: "gcc@gcc.gnu.org" <gcc@gcc.gnu.org>
Subject: Re: Question for ISO C standards gurus
Date: Sat, 27 Mar 2004 11:25:00 -0000	[thread overview]
Message-ID: <m3n063ullk.fsf@gossamer.airs.com> (raw)
In-Reply-To: <1080348071.4600.244.camel@localhost.localdomain>

Diego Novillo <dnovillo@redhat.com> writes:

> On Thu, 2004-03-25 at 13:08, Dave Korn wrote:
> 
> > "Here is the complete list of all sequence points in C++: 
> > 
> > at the end of a full expression 
> > 
> > after the evaluation of all function arguments in a function call and before
> > execution of any expressions in the function body 
> > 
> > after copying of a returned value and before execution of any expressions
> > outside the function 
> > 
> > after evaluation of the first expression in a&&b,  a||b,  a?b:c,  or  a,b 
> > 
> > after the initialization of each base and member in the constructor
> > initialization list "
> > 
> So, the program below should print 5?  It certainly doesn't with gcc 3.2
> nor mainline:
> 
> int foo (int x)
> {
>   return x;
> }
> 
> main ()
> {
>   int *p;
>   int a[2];
>   a[0] = 4;
>   a[1] = 5;
>   p = a;
>   printf ("%d\n", foo (*p++));
> }
> 
> It will print 5 if I use pre-increment on 'p', which is what I would've
> expected (I'm no language lawyer, though).

I can't see any reason why that would print 5.  Based on the above, p
should be incremented before the function call to foo().  But that
doesn't change the value of *p++, which means "get the value at *p,
then increment p".  The above just means that this should not happen:
    t1 = *p;
    foo (t1);
    p = p + 1;
(at least, it should not be possible to observe that that happened; in
the above program, p, as a local variable whose address is not taken,
probably could be incremented after the function call, since there is
no way for anything to detect when the increment occurred.)

Ian

  reply	other threads:[~2004-03-27  1:26 UTC|newest]

Thread overview: 9+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2004-03-25 18:47 law
2004-03-25 18:58 ` Dave Korn
2004-03-27  1:35   ` Diego Novillo
2004-03-27 11:25     ` Ian Lance Taylor [this message]
2004-03-27 14:25       ` Diego Novillo
2004-03-29 17:18       ` Dave Korn
2004-03-27 21:56     ` law
2004-03-25 18:59 ` Paul Jarc
2004-03-25 19:14   ` Dale Johannesen

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=m3n063ullk.fsf@gossamer.airs.com \
    --to=ian@wasabisystems.com \
    --cc=dnovillo@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).