Skip to content

Commit

Permalink
Make require_tailrec_N pass with deep profiling.
Browse files Browse the repository at this point in the history
tests/invalid/require_tailrec_1.err_exp3:
tests/invalid/require_tailrec_2.err_exp3:
tests/invalid/require_tailrec_3.err_exp3:
    Add these expected output files for deep profiling grades. They
    differ from the expected output files for both the LLDS and MLDS
    backends because deep profiling does not support *any* tail calls.

tests/invalid/require_tailrec_1.m:
tests/invalid/require_tailrec_2.m:
tests/invalid/require_tailrec_3.m:
    Update the source code of these test cases to document
    what circumstances each expected output file is for.

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:
    Update the existing expected output files to account for the
    changes in line numbers caused by the new documentation.
  • Loading branch information
zsomogyi committed Jul 24, 2020
1 parent 823adf7 commit eb4d94d
Show file tree
Hide file tree
Showing 12 changed files with 244 additions and 142 deletions.
42 changes: 21 additions & 21 deletions tests/invalid/require_tailrec_1.err_exp
Original file line number Diff line number Diff line change
@@ -1,21 +1,21 @@
require_tailrec_1.m:040: In mode number 1 of predicate `map1'/3:
require_tailrec_1.m:040: warning: self-recursive call is not tail recursive.
require_tailrec_1.m:047: In mode number 1 of predicate `map2'/3:
require_tailrec_1.m:047: warning: self-recursive call is not tail recursive.
require_tailrec_1.m:055: In mode number 1 of function `even1'/1:
require_tailrec_1.m:055: warning: mutually recursive call to function
require_tailrec_1.m:055: `odd1'/1 is not tail recursive.
require_tailrec_1.m:075: In mode number 1 of predicate `qsortapp_1'/2:
require_tailrec_1.m:075: warning: self-recursive call is not tail recursive.
require_tailrec_1.m:093: In mode number 1 of predicate `qsortapp_3'/2:
require_tailrec_1.m:093: warning: self-recursive call is not tail recursive.
require_tailrec_1.m:102: In mode number 1 of predicate `qsortapp_4'/2:
require_tailrec_1.m:102: error: self-recursive call is not tail recursive.
require_tailrec_1.m:111: In mode number 1 of predicate `qsortapp_5'/2:
require_tailrec_1.m:111: warning: self-recursive call is not tail recursive.
require_tailrec_1.m:120: In mode number 1 of predicate `qsortapp_6'/2:
require_tailrec_1.m:120: warning: self-recursive call is not tail recursive.
require_tailrec_1.m:127: In `:- pragma require_tail_recursion' for function
require_tailrec_1.m:127: `cons'/2:
require_tailrec_1.m:127: warning: the code defining this function contains no
require_tailrec_1.m:127: recursive calls at all, tail-recursive or otherwise.
require_tailrec_1.m:050: In mode number 1 of predicate `map1'/3:
require_tailrec_1.m:050: warning: self-recursive call is not tail recursive.
require_tailrec_1.m:057: In mode number 1 of predicate `map2'/3:
require_tailrec_1.m:057: warning: self-recursive call is not tail recursive.
require_tailrec_1.m:065: In mode number 1 of function `even1'/1:
require_tailrec_1.m:065: warning: mutually recursive call to function
require_tailrec_1.m:065: `odd1'/1 is not tail recursive.
require_tailrec_1.m:085: In mode number 1 of predicate `qsortapp_1'/2:
require_tailrec_1.m:085: warning: self-recursive call is not tail recursive.
require_tailrec_1.m:103: In mode number 1 of predicate `qsortapp_3'/2:
require_tailrec_1.m:103: warning: self-recursive call is not tail recursive.
require_tailrec_1.m:112: In mode number 1 of predicate `qsortapp_4'/2:
require_tailrec_1.m:112: error: self-recursive call is not tail recursive.
require_tailrec_1.m:121: In mode number 1 of predicate `qsortapp_5'/2:
require_tailrec_1.m:121: warning: self-recursive call is not tail recursive.
require_tailrec_1.m:130: In mode number 1 of predicate `qsortapp_6'/2:
require_tailrec_1.m:130: warning: self-recursive call is not tail recursive.
require_tailrec_1.m:137: In `:- pragma require_tail_recursion' for function
require_tailrec_1.m:137: `cons'/2:
require_tailrec_1.m:137: warning: the code defining this function contains no
require_tailrec_1.m:137: recursive calls at all, tail-recursive or otherwise.
54 changes: 27 additions & 27 deletions tests/invalid/require_tailrec_1.err_exp2
Original file line number Diff line number Diff line change
@@ -1,28 +1,28 @@
require_tailrec_1.m:040: In mode number 1 of predicate `map1'/3:
require_tailrec_1.m:040: warning: self-recursive call is not tail recursive.
require_tailrec_1.m:047: In mode number 1 of predicate `map2'/3:
require_tailrec_1.m:047: warning: self-recursive call is not tail recursive.
require_tailrec_1.m:055: In mode number 1 of function `even1'/1:
require_tailrec_1.m:055: warning: mutually recursive call to function
require_tailrec_1.m:055: `odd1'/1 is not tail recursive.
require_tailrec_1.m:064: In mode number 1 of function `odd1'/1:
require_tailrec_1.m:064: warning: mutually recursive call to function
require_tailrec_1.m:064: `even1'/1 is tail recursive, but tail recursion
require_tailrec_1.m:064: optimization cannot be applied to it, because the
require_tailrec_1.m:064: *callee* cannot reach the caller via tail calls
require_tailrec_1.m:064: only.
require_tailrec_1.m:075: In mode number 1 of predicate `qsortapp_1'/2:
require_tailrec_1.m:075: warning: self-recursive call is not tail recursive.
require_tailrec_1.m:093: In mode number 1 of predicate `qsortapp_3'/2:
require_tailrec_1.m:093: warning: self-recursive call is not tail recursive.
require_tailrec_1.m:102: In mode number 1 of predicate `qsortapp_4'/2:
require_tailrec_1.m:102: error: self-recursive call is not tail recursive.
require_tailrec_1.m:111: In mode number 1 of predicate `qsortapp_5'/2:
require_tailrec_1.m:111: warning: self-recursive call is not tail recursive.
require_tailrec_1.m:120: In mode number 1 of predicate `qsortapp_6'/2:
require_tailrec_1.m:120: warning: self-recursive call is not tail recursive.
require_tailrec_1.m:127: In `:- pragma require_tail_recursion' for function
require_tailrec_1.m:127: `cons'/2:
require_tailrec_1.m:127: warning: the code defining this function contains no
require_tailrec_1.m:127: recursive calls at all, tail-recursive or otherwise.
require_tailrec_1.m:050: In mode number 1 of predicate `map1'/3:
require_tailrec_1.m:050: warning: self-recursive call is not tail recursive.
require_tailrec_1.m:057: In mode number 1 of predicate `map2'/3:
require_tailrec_1.m:057: warning: self-recursive call is not tail recursive.
require_tailrec_1.m:065: In mode number 1 of function `even1'/1:
require_tailrec_1.m:065: warning: mutually recursive call to function
require_tailrec_1.m:065: `odd1'/1 is not tail recursive.
require_tailrec_1.m:074: In mode number 1 of function `odd1'/1:
require_tailrec_1.m:074: warning: mutually recursive call to function
require_tailrec_1.m:074: `even1'/1 is tail recursive, but tail recursion
require_tailrec_1.m:074: optimization cannot be applied to it, because the
require_tailrec_1.m:074: *callee* cannot reach the caller via tail calls
require_tailrec_1.m:074: only.
require_tailrec_1.m:085: In mode number 1 of predicate `qsortapp_1'/2:
require_tailrec_1.m:085: warning: self-recursive call is not tail recursive.
require_tailrec_1.m:103: In mode number 1 of predicate `qsortapp_3'/2:
require_tailrec_1.m:103: warning: self-recursive call is not tail recursive.
require_tailrec_1.m:112: In mode number 1 of predicate `qsortapp_4'/2:
require_tailrec_1.m:112: error: self-recursive call is not tail recursive.
require_tailrec_1.m:121: In mode number 1 of predicate `qsortapp_5'/2:
require_tailrec_1.m:121: warning: self-recursive call is not tail recursive.
require_tailrec_1.m:130: In mode number 1 of predicate `qsortapp_6'/2:
require_tailrec_1.m:130: warning: self-recursive call is not tail recursive.
require_tailrec_1.m:137: In `:- pragma require_tail_recursion' for function
require_tailrec_1.m:137: `cons'/2:
require_tailrec_1.m:137: warning: the code defining this function contains no
require_tailrec_1.m:137: recursive calls at all, tail-recursive or otherwise.
For more information, recompile with `-E'.
24 changes: 24 additions & 0 deletions tests/invalid/require_tailrec_1.err_exp3
Original file line number Diff line number Diff line change
@@ -0,0 +1,24 @@
require_tailrec_1.m:050: In mode number 1 of predicate `map1'/3:
require_tailrec_1.m:050: warning: self-recursive call is not tail recursive.
require_tailrec_1.m:057: In mode number 1 of predicate `map2'/3:
require_tailrec_1.m:057: warning: self-recursive call is not tail recursive.
require_tailrec_1.m:065: In mode number 1 of function `even1'/1:
require_tailrec_1.m:065: warning: mutually recursive call to function
require_tailrec_1.m:065: `odd1'/1 is not tail recursive.
require_tailrec_1.m:074: In mode number 1 of function `odd1'/1:
require_tailrec_1.m:074: warning: mutually recursive call to function
require_tailrec_1.m:074: `even1'/1 is not tail recursive.
require_tailrec_1.m:085: In mode number 1 of predicate `qsortapp_1'/2:
require_tailrec_1.m:085: warning: self-recursive call is not tail recursive.
require_tailrec_1.m:103: In mode number 1 of predicate `qsortapp_3'/2:
require_tailrec_1.m:103: warning: self-recursive call is not tail recursive.
require_tailrec_1.m:112: In mode number 1 of predicate `qsortapp_4'/2:
require_tailrec_1.m:112: error: self-recursive call is not tail recursive.
require_tailrec_1.m:121: In mode number 1 of predicate `qsortapp_5'/2:
require_tailrec_1.m:121: warning: self-recursive call is not tail recursive.
require_tailrec_1.m:130: In mode number 1 of predicate `qsortapp_6'/2:
require_tailrec_1.m:130: warning: self-recursive call is not tail recursive.
require_tailrec_1.m:137: In `:- pragma require_tail_recursion' for function
require_tailrec_1.m:137: `cons'/2:
require_tailrec_1.m:137: warning: the code defining this function contains no
require_tailrec_1.m:137: recursive calls at all, tail-recursive or otherwise.
12 changes: 11 additions & 1 deletion tests/invalid/require_tailrec_1.m
Original file line number Diff line number Diff line change
@@ -1,5 +1,15 @@
%---------------------------------------------------------------------------%
% vim: ft=mercury ts=4 sw=4 et
% Require tail recursion pragma tests with --no-warn-non-tail-recursive
%
% Tests of `pragma require_tail_recursion' wit
% `--no-warn-non-tail-recursion'.
%
% The .exp file is for non-deep-profiling LLDS grades.
% The .exp3 file is for deep profiling LLDS grades.
% The .exp2 file is for MLDS grades.
%
%---------------------------------------------------------------------------%

:- module require_tailrec_1.

:- interface.
Expand Down
46 changes: 23 additions & 23 deletions tests/invalid/require_tailrec_2.err_exp
Original file line number Diff line number Diff line change
@@ -1,23 +1,23 @@
require_tailrec_2.m:039: In mode number 1 of predicate `map1'/3:
require_tailrec_2.m:039: warning: self-recursive call is not tail recursive.
require_tailrec_2.m:046: In mode number 1 of predicate `map2'/3:
require_tailrec_2.m:046: warning: self-recursive call is not tail recursive.
require_tailrec_2.m:054: In mode number 1 of function `even1'/1:
require_tailrec_2.m:054: warning: mutually recursive call to function
require_tailrec_2.m:054: `odd1'/1 is not tail recursive.
require_tailrec_2.m:074: In mode number 1 of predicate `qsortapp_1'/2:
require_tailrec_2.m:074: warning: self-recursive call is not tail recursive.
require_tailrec_2.m:083: In mode number 1 of predicate `qsortapp_2'/2:
require_tailrec_2.m:083: warning: self-recursive call is not tail recursive.
require_tailrec_2.m:092: In mode number 1 of predicate `qsortapp_3'/2:
require_tailrec_2.m:092: warning: self-recursive call is not tail recursive.
require_tailrec_2.m:101: In mode number 1 of predicate `qsortapp_4'/2:
require_tailrec_2.m:101: error: self-recursive call is not tail recursive.
require_tailrec_2.m:110: In mode number 1 of predicate `qsortapp_5'/2:
require_tailrec_2.m:110: warning: self-recursive call is not tail recursive.
require_tailrec_2.m:119: In mode number 1 of predicate `qsortapp_6'/2:
require_tailrec_2.m:119: warning: self-recursive call is not tail recursive.
require_tailrec_2.m:126: In `:- pragma require_tail_recursion' for function
require_tailrec_2.m:126: `cons'/2:
require_tailrec_2.m:126: warning: the code defining this function contains no
require_tailrec_2.m:126: recursive calls at all, tail-recursive or otherwise.
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:084: In mode number 1 of predicate `qsortapp_1'/2:
require_tailrec_2.m:084: warning: self-recursive call is not tail recursive.
require_tailrec_2.m:093: In mode number 1 of predicate `qsortapp_2'/2:
require_tailrec_2.m:093: warning: self-recursive call is not tail recursive.
require_tailrec_2.m:102: In mode number 1 of predicate `qsortapp_3'/2:
require_tailrec_2.m:102: warning: self-recursive call is not tail recursive.
require_tailrec_2.m:111: In mode number 1 of predicate `qsortapp_4'/2:
require_tailrec_2.m:111: error: self-recursive call is not tail recursive.
require_tailrec_2.m:120: In mode number 1 of predicate `qsortapp_5'/2:
require_tailrec_2.m:120: warning: self-recursive call is not tail recursive.
require_tailrec_2.m:129: In mode number 1 of predicate `qsortapp_6'/2:
require_tailrec_2.m:129: warning: self-recursive call is not tail recursive.
require_tailrec_2.m:136: In `:- pragma require_tail_recursion' for function
require_tailrec_2.m:136: `cons'/2:
require_tailrec_2.m:136: warning: the code defining this function contains no
require_tailrec_2.m:136: recursive calls at all, tail-recursive or otherwise.
64 changes: 32 additions & 32 deletions tests/invalid/require_tailrec_2.err_exp2
Original file line number Diff line number Diff line change
@@ -1,32 +1,32 @@
require_tailrec_2.m:039: In mode number 1 of predicate `map1'/3:
require_tailrec_2.m:039: warning: self-recursive call is not tail recursive.
require_tailrec_2.m:046: In mode number 1 of predicate `map2'/3:
require_tailrec_2.m:046: warning: self-recursive call is not tail recursive.
require_tailrec_2.m:054: In mode number 1 of function `even1'/1:
require_tailrec_2.m:054: warning: mutually recursive call to function
require_tailrec_2.m:054: `odd1'/1 is not tail recursive.
require_tailrec_2.m:063: In mode number 1 of function `odd1'/1:
require_tailrec_2.m:063: warning: mutually recursive call to function
require_tailrec_2.m:063: `even1'/1 is tail recursive, but tail recursion
require_tailrec_2.m:063: optimization cannot be applied to it, because the
require_tailrec_2.m:063: *callee* cannot reach the caller via tail calls
require_tailrec_2.m:063: only.
require_tailrec_2.m:063: The MLDS backend can optimize only *mutual* tail
require_tailrec_2.m:063: recursion; it cannot optimize tail recursion if it
require_tailrec_2.m:063: goes only one way between two procedures.
require_tailrec_2.m:074: In mode number 1 of predicate `qsortapp_1'/2:
require_tailrec_2.m:074: warning: self-recursive call is not tail recursive.
require_tailrec_2.m:083: In mode number 1 of predicate `qsortapp_2'/2:
require_tailrec_2.m:083: warning: self-recursive call is not tail recursive.
require_tailrec_2.m:092: In mode number 1 of predicate `qsortapp_3'/2:
require_tailrec_2.m:092: warning: self-recursive call is not tail recursive.
require_tailrec_2.m:101: In mode number 1 of predicate `qsortapp_4'/2:
require_tailrec_2.m:101: error: self-recursive call is not tail recursive.
require_tailrec_2.m:110: In mode number 1 of predicate `qsortapp_5'/2:
require_tailrec_2.m:110: warning: self-recursive call is not tail recursive.
require_tailrec_2.m:119: In mode number 1 of predicate `qsortapp_6'/2:
require_tailrec_2.m:119: warning: self-recursive call is not tail recursive.
require_tailrec_2.m:126: In `:- pragma require_tail_recursion' for function
require_tailrec_2.m:126: `cons'/2:
require_tailrec_2.m:126: warning: the code defining this function contains no
require_tailrec_2.m:126: recursive calls at all, tail-recursive or otherwise.
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
require_tailrec_2.m:073: 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:084: In mode number 1 of predicate `qsortapp_1'/2:
require_tailrec_2.m:084: warning: self-recursive call is not tail recursive.
require_tailrec_2.m:093: In mode number 1 of predicate `qsortapp_2'/2:
require_tailrec_2.m:093: warning: self-recursive call is not tail recursive.
require_tailrec_2.m:102: In mode number 1 of predicate `qsortapp_3'/2:
require_tailrec_2.m:102: warning: self-recursive call is not tail recursive.
require_tailrec_2.m:111: In mode number 1 of predicate `qsortapp_4'/2:
require_tailrec_2.m:111: error: self-recursive call is not tail recursive.
require_tailrec_2.m:120: In mode number 1 of predicate `qsortapp_5'/2:
require_tailrec_2.m:120: warning: self-recursive call is not tail recursive.
require_tailrec_2.m:129: In mode number 1 of predicate `qsortapp_6'/2:
require_tailrec_2.m:129: warning: self-recursive call is not tail recursive.
require_tailrec_2.m:136: In `:- pragma require_tail_recursion' for function
require_tailrec_2.m:136: `cons'/2:
require_tailrec_2.m:136: warning: the code defining this function contains no
require_tailrec_2.m:136: recursive calls at all, tail-recursive or otherwise.
30 changes: 30 additions & 0 deletions tests/invalid/require_tailrec_2.err_exp3
Original file line number Diff line number Diff line change
@@ -0,0 +1,30 @@
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 not tail recursive.
require_tailrec_2.m:084: In mode number 1 of predicate `qsortapp_1'/2:
require_tailrec_2.m:084: warning: self-recursive call is not tail recursive.
require_tailrec_2.m:093: In mode number 1 of predicate `qsortapp_2'/2:
require_tailrec_2.m:093: warning: self-recursive call is not tail recursive.
require_tailrec_2.m:102: In mode number 1 of predicate `qsortapp_3'/2:
require_tailrec_2.m:102: warning: self-recursive call is not tail recursive.
require_tailrec_2.m:111: In mode number 1 of predicate `qsortapp_4'/2:
require_tailrec_2.m:111: error: self-recursive call is not tail recursive.
require_tailrec_2.m:120: In mode number 1 of predicate `qsortapp_5'/2:
require_tailrec_2.m:120: warning: self-recursive call is not tail recursive.
require_tailrec_2.m:129: In mode number 1 of predicate `qsortapp_6'/2:
require_tailrec_2.m:129: warning: self-recursive call is not tail recursive.
require_tailrec_2.m:136: In `:- pragma require_tail_recursion' for function
require_tailrec_2.m:136: `cons'/2:
require_tailrec_2.m:136: warning: the code defining this function contains no
require_tailrec_2.m:136: recursive calls at all, tail-recursive or otherwise.
require_tailrec_2.m:147: In mode number 1 of predicate `partition'/6:
require_tailrec_2.m:147: warning: self-recursive call is not tail recursive.
require_tailrec_2.m:149: In mode number 1 of predicate `partition'/6:
require_tailrec_2.m:149: warning: self-recursive call is not tail recursive.
12 changes: 11 additions & 1 deletion tests/invalid/require_tailrec_2.m
Original file line number Diff line number Diff line change
@@ -1,5 +1,15 @@
%---------------------------------------------------------------------------%
% vim: ft=mercury ts=4 sw=4 et
% Require tail recursion pragma tests with --warn-non-tail-recursive-self
%
% Tests of `pragma require_tail_recursion' with
% `--warn-non-tail-recursion self'.
%
% The .exp file is for non-deep-profiling LLDS grades.
% The .exp3 file is for deep profiling LLDS grades.
% The .exp2 file is for MLDS grades.
%
%---------------------------------------------------------------------------%

:- module require_tailrec_2.

:- interface.
Expand Down
Loading

0 comments on commit eb4d94d

Please sign in to comment.