On Tue, Nov 27, 2012 at 3:54 PM, Dehao Chen <de...@google.com> wrote:
> On Tue, Nov 27, 2012 at 1:46 AM, Richard Biener
> <richard.guent...@gmail.com> wrote:
>> On Mon, Nov 26, 2012 at 11:54 PM, Dehao Chen <de...@google.com> wrote:
>>> The new patch is attached. Bootstrapped and passed gcc regression test.
>>>
>>> Ok for trunk?
>>
>> Hmm ... this merely avoids some UNKNOWN_LOCATIONs which should
>> be ok.  I think the issue is that gimplify_expr does:
>>
>>   saved_location = input_location;
>>   if (save_expr != error_mark_node
>>       && EXPR_HAS_LOCATION (*expr_p))
>>     input_location = EXPR_LOCATION (*expr_p);
>>
>> thus it retains input_location from previous recursive invocations (that's 
>> ok).
>>
>> But it doesn't seem to be the case that input_location is UNKNOWN_LOCATION
>> during GIMPLE passes (which it really should be ...).  So to fix the
>> gimplification
>> issue I think that gimplify_ctx should have a location (initialized to
>> UNKNOWN_LOCATION), which it saves/restores across its push/pop
>> operation.
>>
>> Or of course that inside the pass manager before executing passes assert
>> that input_location is UNKNOWN_LOCATION and fix up things according
>> to that.  First offender is in cgraphunit.c in cgraph_analyze_function:
>>
>>   location_t saved_loc = input_location;
>>   input_location = DECL_SOURCE_LOCATION (decl);
>>
>> that should be totally unnecessary (input_location shoud be and stay
>> UNKNOWN_LOCATION).  And finalize_compilation_unit (the last thing
>> the frontends should call) should have input_location = UNKNOWN_LOCATION
>> right at the point it clears current_function_decl / cfun.
>>
>> I'd prefer the 2nd approach (maybe without the assert as we are in stage3
>> already, but the assert would certainly help).  And places in the middle-end
>> that set input_location for purpose of (re-)gimplifying should use the 
>> location
>> in the gimplify ctx (which would need to be added) instead of setting
>> input_location.
>>
>> Maybe as a first try set input_location to UNKNOWN_LOCATION in
>> finalize_compilation_unit.
>>
>> Thanks,
>> Richard.
>
> Shall we check in this patch first, and have another patch to reset
> input_location?

Sure, that works for me.  It might be harder for you to verify that
doing that also fixes the issue though ;)

Richard.

> Thanks,
> Dehao

Reply via email to