Groups | Search | Server Info | Keyboard shortcuts | Login | Register [http] [https] [nntp] [nntps]


Groups > comp.lang.c > #389157

Re: 80386 C compiler

From Tim Rentsch <tr.17687@z991.linuxsc.com>
Newsgroups comp.lang.c
Subject Re: 80386 C compiler
Date 2024-11-27 16:45 -0800
Organization A noiseless patient Spider
Message-ID <86zflkp4o2.fsf@linuxsc.com> (permalink)
References (2 earlier) <vi0dt1$2el7m$1@dont-email.me> <20241125101701.894@kylheku.com> <qrp9kjd09n2v3srmabqccmnsbr1r6nkm2m@4ax.com> <20241125132021.212@kylheku.com> <875xo9ln93.fsf@nosuchdomain.example.com>

Show all headers | View raw


Keith Thompson <Keith.S.Thompson+u@gmail.com> writes:

> Kaz Kylheku <643-408-1753@kylheku.com> writes:
>
>> On 2024-11-25, Rosario19 <Ros@invalid.invalid> wrote:
>>
>>> On Mon, 25 Nov 2024 18:23:58 -0000 (UTC), Kaz Kylheku  wrote:
>>>
>>>> void fn(int a)
>>>> {
>>>>   int x[3] = { foo(), bar(), a }; /* not in C90 */
>>>
>>> is in the above foo() called before bar()?
>>
>> No, you cannot rely on that.  Maybe it's fixed in a more recent standard,
>> but C99 (which I happen to have open in a PDF reader tab) stated that
>> "The order in which any side effects occur among the initialization list
>> expressions is unspecified.".  This implies that there is no sequence
>> point between any two initializing expressions, which means we don't
>> know whose expression's function call takes place first.
>
> N3096 (C23 draft) has :
> """
> The evaluations of the initialization list expressions are
> indeterminately sequenced with respect to one another and thus the order
> in which any side effects occur is unspecified.
> """
>
> C23 is more explicit (redundant?) than C99, which doesn't mention the
> lack of a sequence point.  (C11 dropped sequence points, replacing them
> with "sequenced before", "sequenced after", and "unsequenced", basically
> a new way of describing the same semantics.)
>
> Given:
>
>     int n = 42;
>     int a[] = { n++, n++ };
>
> C99 could imply that the value of a is merely unspecified, either {
> 42, 43 } or { 43, 42 }.  Though it can almost certainly be inferred
> from other parts of the C99 standard that there is no sequence
> point between the two evaluations of n++ (I haven't taken the time
> to check).

Under C99 rules, I believe this initializer has undefined
behavior, because of more than one modification of an object
without an intervening sequence point.

Back to comp.lang.c | Previous | Next | Find similar


Thread

Re: 80386 C compiler Tim Rentsch <tr.17687@z991.linuxsc.com> - 2024-11-27 16:45 -0800

csiph-web