Order of evaluation - aka hidden undefined behaviours.
David Nadlinger
see at klickverbot.at
Wed Sep 26 08:25:18 PDT 2012
On Wednesday, 26 September 2012 at 12:29:38 UTC, Iain Buclaw
wrote:
> On 26 September 2012 13:07, monarch_dodra
> <monarchdodra at gmail.com> wrote:
>> I don't see how the "extern(C)" is involved here, since it is
>> the D compiler
>> that first evaluates A(), B() and C() before passing the
>> making the C
>> function call. Or did I miss something?
>>
>
> There is no physical code generation from the frontend that says
> "evaluate this". What it passes to be backend for this
> operation is a
> function call. So the backend determines the order of evaluation
> depending on the order of parameters.
I'm not quite sure what you are trying to say here; I guess it
depends on the definition of "backend". monarch_dodra is right in
so far as the effects of "extern(C)" are an implementation detail
coming from the particular way your compiler "glue code" is
written; there is no fundamental reason why it should be
important for parameter evaluation at all.
Speaking of it, what is the reason that the actual order of
formal parameters (in terms of register allocation/stack layout)
is reversed in the D calling convention, compared to extern (C)
(e.g. on *nix x86_64)?
David
More information about the Digitalmars-d
mailing list