[m-rev.] for review: handling of unused arguments in ml_gen_wrapper_arg_lvals

Peter Wang novalazy at gmail.com
Fri May 22 17:01:17 AEST 2009


2009/5/22 Julien Fischer <juliensf at csse.unimelb.edu.au>:
>
> On Fri, 22 May 2009, Peter Wang wrote:
>
>> Bootchecked in hlc.gc.
>
> Did you try the buggy code with the C-backend before?

Yes.

> Do you know why it worked and the Java version didn't?

It aborts in the Java backend here:

        Results = [_, _ | _],
        FuncInfo = func_info(FuncName, Params),
        Params = mlds_func_params(_Args, ReturnTypes),
        TypesAndResults = assoc_list.from_corresponding_lists(
            ReturnTypes, Results),
        io.write_string("return new java.lang.Object[] {\n", !IO),
	...

where ReturnTypes contains only the type for the `out' variable,
but Results contains both the `unused' and `out' variables.

In the high level C backend output variables are passed by reference
instead of by value, so it doesn't do something similar.
The generated code isn't affect by the patch either.

> What happens in hl.gc?

Works there too.

Browsing the change history a bit, I see that the offending code was
originally written as an if-then-else before being converted to a switch.
My guess is that originally the top_unused possibility didn't exist
and the code didn't get updated when top_unused was added,
or it was just overlooked.

Peter
--------------------------------------------------------------------------
mercury-reviews mailing list
Post messages to:       mercury-reviews at csse.unimelb.edu.au
Administrative Queries: owner-mercury-reviews at csse.unimelb.edu.au
Subscriptions:          mercury-reviews-request at csse.unimelb.edu.au
--------------------------------------------------------------------------



More information about the reviews mailing list