Deutsch   English   Français   Italiano  
<86zflkp4o2.fsf@linuxsc.com>

View for Bookmarking (what is this?)
Look up another Usenet article

Path: ...!eternal-september.org!feeder3.eternal-september.org!news.eternal-september.org!.POSTED!not-for-mail
From: Tim Rentsch <tr.17687@z991.linuxsc.com>
Newsgroups: comp.lang.c
Subject: Re: 80386 C compiler
Date: Wed, 27 Nov 2024 16:45:17 -0800
Organization: A noiseless patient Spider
Lines: 47
Message-ID: <86zflkp4o2.fsf@linuxsc.com>
References: <vhvbhf$28opb$1@dont-email.me> <vhvsm9$2bmq9$1@dont-email.me> <vi0dt1$2el7m$1@dont-email.me> <20241125101701.894@kylheku.com> <qrp9kjd09n2v3srmabqccmnsbr1r6nkm2m@4ax.com> <20241125132021.212@kylheku.com> <875xo9ln93.fsf@nosuchdomain.example.com>
MIME-Version: 1.0
Content-Type: text/plain; charset=us-ascii
Injection-Date: Thu, 28 Nov 2024 01:45:18 +0100 (CET)
Injection-Info: dont-email.me; posting-host="8f1c290f3ddf609884269e518a4a547d";
	logging-data="257886"; mail-complaints-to="abuse@eternal-september.org";	posting-account="U2FsdGVkX1+R9QPMMr/o8FOf/Ru/XTjTcB8HidoPHko="
User-Agent: Gnus/5.11 (Gnus v5.11) Emacs/22.4 (gnu/linux)
Cancel-Lock: sha1:7t1YXGtPnu3ADz12mketlTOjQkc=
	sha1:8T4NuF07LEZcG7z7ejCudgc3dqg=
Bytes: 2988

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.