[m-rev.] for post-commit review: fix failure of hard_coded/trace_goal_opt
    Julien Fischer 
    jfischer at opturion.com
       
    Fri Oct  1 13:27:40 AEST 2021
    
    
  
Hi Zoltan,
On Thu, 30 Sep 2021, Zoltan Somogyi wrote:
> Fix output of trace goals in .opt.
> 
> compiler/hlds_out_goal.m:
>     Do not output io() and state() components in trace goals
>     when generating output that is intended to be parsed as Mercury code
>     (as opposed to when generating HLDS dumps), since in the goal
>     in the scope will already have had applied to it the transformations
>     needed to implement those components.
>
>     This fixes the failure of tests/hard_coded/trace_goal_opt.
> 
> diff --git a/compiler/hlds_out_goal.m b/compiler/hlds_out_goal.m
> index 856a560ea..bdb0d73ad 100644
> --- a/compiler/hlds_out_goal.m
> +++ b/compiler/hlds_out_goal.m
...
> @@ -2181,6 +2181,57 @@ write_goal_scope(!.Info, Stream, ModuleInfo, VarSet, TypeQual, VarNamePrint,
>              ;
>                  MaybeRunTime = no
>              ),
> +            Lang = get_output_lang(!.Info ^ hoi_merc_out_info),
> +            (
> +                Lang = output_mercury,
> +                % After we have read in trace goals as expressions,
> +                % goal_expr_to_goal.m, in the process of converting
> +                % those goal_exprs to HLDS goals, wraps the goal
> +                % in the scope with code to get and set the I/O state
> +                % and/or any mutables mentioned by the scope.
> +                %
> +                % Therefore when generate Mercury code, we don't write
s/generate/generating/
> +                % these parts of the trace goal out. If we did, then
> +                % two problems would arise.
Looking at what the compiler is generating for trace_goal_opt_2.opt now,
we have:
   :- pragma inline(pred((trace_goal_opt_2.require_lt)/2)).
   trace_goal_opt_2.require_lt(V_3, V_4) :-
     trace [
       compile_time((flag("abc")) or (flag("\"xyz\"") and grade(debug))),
       runtime(env("TRACE_ABC"))
       % quantified vars []
     ] (
       semipure trace_goal_opt_2.get_x(V_6),
       trace_goal_opt_2.require_lt0(V_3, V_4),
       impure trace_goal_opt_2.set_x(V_6)
     ).
Is the comment reading "quantified vars []" really supposed to be present
in the .opt file?
The diff is fine otherwise.
Julien.
    
    
More information about the reviews
mailing list