mirror of
https://github.com/Mercury-Language/mercury.git
synced 2026-04-18 19:03:45 +00:00
This fixes github issue #85. A complication is that the compiler itself has code, in make.util.m, in which a disjunct has no solutions in only one mode of a two mode function, but in this case, the code works (though its programming style is pretty bad), so to get this change to bootstrap, we also need a way to disable the "this disjunct can't have solutions" warning in a scope. compiler/simplify_goal_disj.m: When we generate a "this disjunct can't succeed" warning, do not insist on all modes generating that warning. We used to insist on that because in a multi-mode predicate, such warnings can be inappropriate for other modes. Instead, achieve the same objective of minimizing programmer confusion by adding a codicil explicitly mentioninging this possibility. Make the generation of this warning conditional on a simplify task that can be disabled by "disable_warnings" scope. compiler/prog_data.m: Add "no_solution_disjunct" as a warning kind that may be disabled. compiler/parse_goal.m: Parse the new kind of warning. compiler/prog_out.m: Output the new kind of warning. Improve some adjacent though unrelated code. compiler/make.util.m: Add code disable this warning in the affected predicate. Comment out this code until installed compilers know how to parse it and understand it. compiler/Mercury.options: Don't turn warnings into errors for make.util.m until then. compiler/simplify_goal_scope.m: compiler/simplify_info.m: compiler/simplify_tasks.m: Provide the mechanism needed to make it possible to disable warnings about no solution disjuncts. doc/reference_manual.texi: Document the new disable-able warning. NEWS: Document both the changed behavior of the old warning and the new way to disable it. tests/warnings/gh85.{m,exp}: A regression test for the bug, based on the code in the github issue. It also tests the way to disable the warning. tests/warnings/Mmakefile: Enable the new test case.
4 lines
192 B
Plaintext
4 lines
192 B
Plaintext
gh85.m:061: Warning: this disjunct will never have any solutions. This warning
|
|
gh85.m:061: applies to the first mode of this predicate. It may or may not
|
|
gh85.m:061: apply to other modes.
|