Re: ancient sequence point bug

From: Tom Lane <tgl(at)sss(dot)pgh(dot)pa(dot)us>
To: Peter Eisentraut <peter_e(at)gmx(dot)net>
Cc: pgsql-hackers(at)postgresql(dot)org
Subject: Re: ancient sequence point bug
Date: 2013-04-17 02:51:39
Message-ID: 16321.1366167099@sss.pgh.pa.us
Views: Raw Message | Whole Thread | Download mbox | Resend email
Thread:
Lists: pgsql-hackers

Peter Eisentraut <peter_e(at)gmx(dot)net> writes:
> This code in bootstrap.c contains a sequence point violation (or
> whatever that is really called):

> while ((tup = heap_getnext(scan, ForwardScanDirection)) != NULL)
> {
> (*app)->am_oid = HeapTupleGetOid(tup);
> memmove((char *) &(*app++)->am_typ,
> (char *) GETSTRUCT(tup),
> sizeof((*app)->am_typ));
> }

What exactly is the violation? sizeof() is a side-effect-free compile
time constant, and the first value to be passed to memmove seems
perfectly well defined.

I grant that this is not terribly good coding style, but I don't believe
there's an actual risk here.

> In commit 1aebc361, another place in the same file was fixed like this:

Well, I don't really remember why I did that twelve years ago, but
seeing that there are a number of purely-cosmetic changes in that
commit, I'm thinking it was only meant to be cosmetic.

I certainly have no objection to making this code look more like that
code, I'm just not seeing that it's a bug.

regards, tom lane

In response to

Responses

Browse pgsql-hackers by date

  From Date Subject
Next Message Dann Corbit 2013-04-17 03:18:35 Re: ancient sequence point bug
Previous Message Peter Eisentraut 2013-04-17 02:35:31 ancient sequence point bug