Files
mercury/tests/invalid/require_tailrec_2.err_exp2
Zoltan Somogyi 4398974007 More tweaks to diagnostics.
compiler/typecheck_errors.m:
    Redo the way we generate diagnostics for unproven typeclass constraints.
    The old approach was: for each type assign (of which there can be many),
    print the list of unproven constraints in that type_assign. Given N
    type assigns, this could print a constraint up to N times.

    This diff switches to a new approach that computes

    - the set of constraints that are unproven in *all* type assigns,
      and which are therefore *definitely* errors, and

    - the set of constraints that are unproven in *some but not all*
      type assigns, which therefore *may be* errors, but also may be
      non-errors,

    and then prints both sets with an explanation of each. Besides the
    classification being helpful to users, telling them which constraints
    to concentrate on fixing first, this approach also guarantees that
    each constraint in its output will appear just once. In other words,
    it has much better worst-case behavior. (Unfortunately, the test suite
    has no test cases that are more complicated than two unproven constraints
    in a single type assign.)

compiler/mark_tail_calls.m:
    Add color to the diagnostics generated by this module.

compiler/add_clause.m:
compiler/check_type_inst_mode_defns.m:
compiler/field_access.m:
    Tweaks to move towards a situation where the messages generated
    for similar errors either in different circumstances or to different
    kinds of entities use the same terminology and use color the same way
    to the extent possible.

tests/invalid/record_syntax_errors.err_exp:
tests/invalid/ref_to_implicit_comma.err_exp:
tests/invalid/repeated_field_name.err_exp:
tests/invalid/repeated_instance_vars_unsat.err_exp:
tests/invalid/require_tailrec_1.err_exp:
tests/invalid/require_tailrec_1.err_exp2:
tests/invalid/require_tailrec_2.err_exp:
tests/invalid/require_tailrec_2.err_exp2:
tests/invalid/require_tailrec_3.err_exp:
tests/invalid/require_tailrec_3.err_exp2:
tests/invalid/typeclass_test_13.err_exp:
tests/invalid/typeclass_test_7.err_exp:
tests/invalid/unsatisfiable_constraint_bug.err_exp:
tests/invalid/unsatisfiable_constraint_msg.err_exp:
tests/invalid/unsatisfiable_super.err_exp:
tests/invalid_nodepend/typeclass_test_1.err_exp:
tests/invalid_nodepend/typeclass_test_2.err_exp:
    Expect updated diagnostics.
2024-05-31 20:09:44 +10:00

2.4 KiB

require_tailrec_2.m:049: In mode number 1 of predicate `map1'/3:
require_tailrec_2.m:049: warning: self-recursive call is not tail recursive.
require_tailrec_2.m:056: In mode number 1 of predicate `map2'/3:
require_tailrec_2.m:056: warning: self-recursive call is not tail recursive.
require_tailrec_2.m:064: In mode number 1 of function `even1'/1:
require_tailrec_2.m:064: warning: mutually recursive call to function
require_tailrec_2.m:064: `odd1'/1 is not tail recursive.
require_tailrec_2.m:073: In mode number 1 of function `odd1'/1:
require_tailrec_2.m:073: warning: mutually recursive call to function
require_tailrec_2.m:073: `even1'/1 is tail recursive, but tail recursion
require_tailrec_2.m:073: optimization cannot be applied to it, because the
require_tailrec_2.m:073: callee cannot reach the caller via tail calls only.
require_tailrec_2.m:073: The MLDS backend can optimize only *mutual* tail
require_tailrec_2.m:073: recursion; it cannot optimize tail recursion if it
require_tailrec_2.m:073: goes only one way between two procedures.
require_tailrec_2.m:089: In mode number 1 of predicate `qsortapp_1'/2:
require_tailrec_2.m:089: warning: self-recursive call is not tail recursive.
require_tailrec_2.m:098: In mode number 1 of predicate `qsortapp_2'/2:
require_tailrec_2.m:098: warning: self-recursive call is not tail recursive.
require_tailrec_2.m:107: In mode number 1 of predicate `qsortapp_3'/2:
require_tailrec_2.m:107: warning: self-recursive call is not tail recursive.
require_tailrec_2.m:116: In mode number 1 of predicate `qsortapp_4'/2:
require_tailrec_2.m:116: error: self-recursive call is not tail recursive.
require_tailrec_2.m:125: In mode number 1 of predicate `qsortapp_5'/2:
require_tailrec_2.m:125: warning: self-recursive call is not tail recursive.
require_tailrec_2.m:134: In mode number 1 of predicate `qsortapp_6'/2:
require_tailrec_2.m:134: warning: self-recursive call is not tail recursive.
require_tailrec_2.m:141: In `:- pragma require_tail_recursion' for function
require_tailrec_2.m:141: `cons'/2:
require_tailrec_2.m:141: warning: the code defining this function contains no
require_tailrec_2.m:141: recursive calls at all, tail-recursive or otherwise.