mirror of
https://github.com/Mercury-Language/mercury.git
synced 2026-04-15 17:33:38 +00:00
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.
2.4 KiB
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.
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.