[m-rev.] for review: implement --warn-suspicious-recursion
jfischer at opturion.com
Wed May 1 15:34:20 AEST 2019
On Wed, 1 May 2019, Zoltan Somogyi wrote:
> For review by anyone, but I would like the person who last worked on
> to_char_list in string.m to review the diff to string.m, even if he does not
> look at the rest of the diff.
A couple more comments in addition to those from Peter:
> Implement warnings for suspicious recursion.
> If the --warn-suspicious-recursion option is set, and if the warning
> isn't disable, generate warnings for two different kinds of suspicious
> recursion. They are both related to, but separate from, the warning
> we have long generated for infinite recursion, which occurs when
> the input args of a recursive call are the same as the corresponding
> args in the clause head.
> Both kinds suspicious recursion look at the input args of a recursive call
> that are NOT the same as the corresponding args in the clause head.
> Both require these args to have non-unique modes. (If they have unique
> modes, then the depth of the recursion may be controlled by state outside
> the view of the Mercury compiler, which means that a warning would be
> likely to be misleading.)
Unless the unique arguments *only* occur in the recursive calls, in which case
you could issue the warning. That may be a case worth including here since
it's not unheard of for users to thread the I/O (or other unique) state through
a predicate and then not use it.
More information about the reviews