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