[m-rev.] diff: enable termination2_info pragmas

Julien Fischer juliensf at cs.mu.OZ.AU
Thu Jun 2 19:07:04 AEST 2005


Estimated hours taken: 1
Branches: main

Enable the support for writing out termination2_info pragmas
in the .opt and .trans_opt files.

Test both termination analyses when running the test suite.

compiler/term_constr_main.m:
compiler/trans_opt.m:
	Uncomment the code that causes termination2_info pragmas
	to be written out the .opt and .trans_opt files.

tests/term/Mmakefile:
	Run the new termination analyser on these tests as well.

tests/term/*.trans_opt_exp:
	Include the expected termination2_info pragmas.

Julien.

Workspace:/home/swordfish/juliensf/ws-term2-intermod
Index: compiler/term_constr_main.m
===================================================================
RCS file: /home/mercury1/repository/mercury/compiler/term_constr_main.m,v
retrieving revision 1.1
diff -u -r1.1 term_constr_main.m
--- compiler/term_constr_main.m	7 Apr 2005 06:32:15 -0000	1.1
+++ compiler/term_constr_main.m	1 Jun 2005 07:35:40 -0000
@@ -509,38 +509,33 @@

 :- pred make_opt_int(list(pred_id)::in, module_info::in, io::di, io::uo) is det.

-make_opt_int(_PredIds, _ModuleInfo, !IO).
-
-% XXX The code for writing .opt files is currently disabled.
-% NOTE: in order to enable this you also need to uncomment the relevant
-% code in trans_opt.m.
-%
-%   module_info_name(ModuleInfo, ModuleName),
-%   module_name_to_file_name(ModuleName, ".opt.tmp", no, OptFileName, !IO),
-%   globals.io_lookup_bool_option(verbose, Verbose, !IO),
-%   maybe_write_string(Verbose,
-%       "% Appending termination2_info pragmas to `", !IO),
-%   maybe_write_string(Verbose, OptFileName, !IO),
-%   maybe_write_string(Verbose, "'...", !IO),
-%   maybe_flush_output(Verbose, !IO),
-%   io.open_append(OptFileName, OptFileRes, !IO),
-%   (
-%       OptFileRes = ok(OptFile),
-%       io.set_output_stream(OptFile, OldStream, !IO),
-%         list.foldl(output_pred_termination2_info(ModuleInfo), PredIds,
-%           !IO),
-%       io.set_output_stream(OldStream, _, !IO),
-%       io.close_output(OptFile, !IO),
-%       maybe_write_string(Verbose, " done.\n", !IO)
-%   ;
-%       OptFileRes = error(IOError),
-%           % failed to open the .opt file for processing
-%       maybe_write_string(Verbose, " failed!\n", !IO),
-%       io.error_message(IOError, IOErrorMessage),
-%       io.write_strings(["Error opening file `",
-%           OptFileName, "' for output: ", IOErrorMessage], !IO),
-%       io.set_exit_status(1, !IO)
-%   ).
+make_opt_int(PredIds, ModuleInfo, !IO) :-
+  module_info_name(ModuleInfo, ModuleName),
+  module_name_to_file_name(ModuleName, ".opt.tmp", no, OptFileName, !IO),
+  globals.io_lookup_bool_option(verbose, Verbose, !IO),
+  maybe_write_string(Verbose,
+      "% Appending termination2_info pragmas to `", !IO),
+  maybe_write_string(Verbose, OptFileName, !IO),
+  maybe_write_string(Verbose, "'...", !IO),
+  maybe_flush_output(Verbose, !IO),
+  io.open_append(OptFileName, OptFileRes, !IO),
+  (
+      OptFileRes = ok(OptFile),
+      io.set_output_stream(OptFile, OldStream, !IO),
+        list.foldl(output_pred_termination2_info(ModuleInfo), PredIds,
+          !IO),
+      io.set_output_stream(OldStream, _, !IO),
+      io.close_output(OptFile, !IO),
+      maybe_write_string(Verbose, " done.\n", !IO)
+  ;
+      OptFileRes = error(IOError),
+          % failed to open the .opt file for processing
+      maybe_write_string(Verbose, " failed!\n", !IO),
+      io.error_message(IOError, IOErrorMessage),
+      io.write_strings(["Error opening file `",
+          OptFileName, "' for output: ", IOErrorMessage], !IO),
+      io.set_exit_status(1, !IO)
+  ).

 output_pred_termination2_info(ModuleInfo, PredId, !IO) :-
     %
Index: compiler/trans_opt.m
===================================================================
RCS file: /home/mercury1/repository/mercury/compiler/trans_opt.m,v
retrieving revision 1.28
diff -u -r1.28 trans_opt.m
--- compiler/trans_opt.m	7 Apr 2005 06:32:17 -0000	1.28
+++ compiler/trans_opt.m	1 Jun 2005 07:35:54 -0000
@@ -133,10 +133,8 @@
 		module_info_predids(Module, PredIds),
 		list__foldl(termination__write_pred_termination_info(Module),
 			PredIds, !IO),
-% XXX Writing termination2_info pragma to .trans_opt files is currently
-% disabled.  (The code in term_constr_main also needs to be uncommented).
-% 		list__foldl(term_constr_main.output_pred_termination2_info(Module),
-% 			PredIds, !IO),
+		list__foldl(term_constr_main.output_pred_termination2_info(Module),
+			PredIds, !IO),

 		module_info_exception_info(Module, ExceptionInfo),
 		list__foldl(
Index: tests/term/Mmakefile
===================================================================
RCS file: /home/mercury1/repository/tests/term/Mmakefile,v
retrieving revision 1.26
diff -u -r1.26 Mmakefile
--- tests/term/Mmakefile	10 Dec 2004 07:03:44 -0000	1.26
+++ tests/term/Mmakefile	1 Jun 2005 07:56:17 -0000
@@ -96,7 +96,7 @@

 #-----------------------------------------------------------------------------#

-MCTERMFLAGS = --enable-termination --term-single-arg 5
+MCTERMFLAGS = --enable-termination --term-single-arg 5 --enable-termination2
 MCOPTFLAGS  = --no-inlining --no-optimize-unused-args --no-deforestation \
 	      --no-optimize-higher-order
 MCTRANSOPTFLAGS = $(MCTERMFLAGS) $(MCOPTFLAGS)
Index: tests/term/ack.trans_opt_exp
===================================================================
RCS file: /home/mercury1/repository/tests/term/ack.trans_opt_exp,v
retrieving revision 1.4
diff -u -r1.4 ack.trans_opt_exp
--- tests/term/ack.trans_opt_exp	17 Jan 2003 05:57:15 -0000	1.4
+++ tests/term/ack.trans_opt_exp	2 Jun 2005 08:49:21 -0000
@@ -1,2 +1,3 @@
 :- module ack.
 :- pragma termination_info(ack.ack((builtin.in), (builtin.in), (builtin.out)), infinite, can_loop).
+:- pragma termination2_info(ack.ack((builtin.in), (builtin.in), (builtin.out)), [1, 2, 3], constraints([le([term(2, r(-1, 1))], r(0, 1)), le([term(1, r(-1, 1)), term(3, r(-1, 1))], r(-1, 1))]), not_set, can_loop).
Index: tests/term/append.trans_opt_exp
===================================================================
RCS file: /home/mercury1/repository/tests/term/append.trans_opt_exp,v
retrieving revision 1.4
diff -u -r1.4 append.trans_opt_exp
--- tests/term/append.trans_opt_exp	17 Jan 2003 05:57:15 -0000	1.4
+++ tests/term/append.trans_opt_exp	2 Jun 2005 08:49:21 -0000
@@ -1,2 +1,3 @@
 :- module append.
 :- pragma termination_info(append.app((builtin.out), (builtin.out), (builtin.in)), finite(0, [no, no, no, yes]), cannot_loop).
+:- pragma termination2_info(append.app((builtin.out), (builtin.out), (builtin.in)), [7, 1, 2, 3], constraints([eq([term(1, r(1, 1)), term(2, r(1, 1)), term(3, r(-1, 1))], r(0, 1)), le([term(2, r(-1, 1))], r(0, 1))]), not_set, cannot_loop).
Index: tests/term/arit_exp.trans_opt_exp
===================================================================
RCS file: /home/mercury1/repository/tests/term/arit_exp.trans_opt_exp,v
retrieving revision 1.6
diff -u -r1.6 arit_exp.trans_opt_exp
--- tests/term/arit_exp.trans_opt_exp	17 Jan 2003 05:57:15 -0000	1.6
+++ tests/term/arit_exp.trans_opt_exp	2 Jun 2005 08:49:21 -0000
@@ -1,2 +1,3 @@
 :- module arit_exp.
 :- pragma termination_info(arit_exp.e((builtin.in)), finite(0, [no]), cannot_loop).
+:- pragma termination2_info(arit_exp.e((builtin.in)), [1], constraints([le([term(1, r(-1, 1))], r(-1, 1))]), not_set, cannot_loop).
Index: tests/term/associative.trans_opt_exp
===================================================================
RCS file: /home/mercury1/repository/tests/term/associative.trans_opt_exp,v
retrieving revision 1.9
diff -u -r1.9 associative.trans_opt_exp
--- tests/term/associative.trans_opt_exp	17 Jan 2003 05:57:15 -0000	1.9
+++ tests/term/associative.trans_opt_exp	2 Jun 2005 08:49:21 -0000
@@ -1,3 +1,5 @@
 :- module associative.
 :- pragma termination_info(associative.normal_form((builtin.in), (builtin.out)), finite(0, [yes, no]), can_loop).
 :- pragma termination_info(associative.rewrite((builtin.in), (builtin.out)), finite(0, [yes, no]), cannot_loop).
+:- pragma termination2_info(associative.normal_form((builtin.in), (builtin.out)), [1, 2], constraints([eq([term(1, r(1, 1)), term(2, r(-1, 1))], r(0, 1))]), not_set, can_loop).
+:- pragma termination2_info(associative.rewrite((builtin.in), (builtin.out)), [1, 2], constraints([le([term(2, r(-1, 1))], r(-4, 1)), eq([term(1, r(1, 1)), term(2, r(-1, 1))], r(0, 1))]), not_set, cannot_loop).
Index: tests/term/dds1_2.trans_opt_exp
===================================================================
RCS file: /home/mercury1/repository/tests/term/dds1_2.trans_opt_exp,v
retrieving revision 1.5
diff -u -r1.5 dds1_2.trans_opt_exp
--- tests/term/dds1_2.trans_opt_exp	8 Dec 2003 03:37:45 -0000	1.5
+++ tests/term/dds1_2.trans_opt_exp	2 Jun 2005 08:49:21 -0000
@@ -1,2 +1,3 @@
 :- module dds1_2.
 :- pragma termination_info(dds1_2.permute((builtin.in), (builtin.out)), finite(0, [no, yes, no]), cannot_loop).
+:- pragma termination2_info(dds1_2.permute((builtin.in), (builtin.out)), [6, 1, 2], constraints([eq([term(1, r(1, 1)), term(2, r(-1, 1))], r(0, 1)), le([term(2, r(-1, 1))], r(0, 1))]), not_set, cannot_loop).
Index: tests/term/dds3_13.trans_opt_exp
===================================================================
RCS file: /home/mercury1/repository/tests/term/dds3_13.trans_opt_exp,v
retrieving revision 1.5
diff -u -r1.5 dds3_13.trans_opt_exp
--- tests/term/dds3_13.trans_opt_exp	8 Dec 2003 03:37:45 -0000	1.5
+++ tests/term/dds3_13.trans_opt_exp	2 Jun 2005 08:49:21 -0000
@@ -1,2 +1,3 @@
 :- module dds3_13.
 :- pragma termination_info(dds3_13.duplicate((builtin.in), (builtin.out)), infinite, cannot_loop).
+:- pragma termination2_info(dds3_13.duplicate((builtin.in), (builtin.out)), [7, 1, 2], constraints([le([term(1, r(-1, 1))], r(0, 1)), eq([term(1, r(1, 1)), term(2, r(-1, 2))], r(0, 1))]), not_set, cannot_loop).
Index: tests/term/dds3_14.trans_opt_exp
===================================================================
RCS file: /home/mercury1/repository/tests/term/dds3_14.trans_opt_exp,v
retrieving revision 1.5
diff -u -r1.5 dds3_14.trans_opt_exp
--- tests/term/dds3_14.trans_opt_exp	8 Dec 2003 03:37:45 -0000	1.5
+++ tests/term/dds3_14.trans_opt_exp	2 Jun 2005 08:49:21 -0000
@@ -1,2 +1,3 @@
 :- module dds3_14.
 :- pragma termination_info(dds3_14.sum((builtin.in), (builtin.in), (builtin.out)), infinite, cannot_loop).
+:- pragma termination2_info(dds3_14.sum((builtin.in), (builtin.in), (builtin.out)), [1, 2, 3], constraints([eq([term(1, r(1, 1)), term(3, r(-1, 1))], r(0, 1)), eq([term(2, r(1, 1)), term(3, r(-1, 1))], r(0, 1))]), not_set, cannot_loop).
Index: tests/term/dds3_15.trans_opt_exp
===================================================================
RCS file: /home/mercury1/repository/tests/term/dds3_15.trans_opt_exp,v
retrieving revision 1.5
diff -u -r1.5 dds3_15.trans_opt_exp
--- tests/term/dds3_15.trans_opt_exp	8 Dec 2003 03:37:45 -0000	1.5
+++ tests/term/dds3_15.trans_opt_exp	2 Jun 2005 08:49:21 -0000
@@ -1,2 +1,3 @@
 :- module dds3_15.
 :- pragma termination_info(dds3_15.merge((builtin.in), (builtin.in), (builtin.out)), finite(0, [yes, yes, no]), cannot_loop).
+:- pragma termination2_info(dds3_15.merge((builtin.in), (builtin.in), (builtin.out)), [1, 2, 3], constraints([le([term(3, r(-1, 1))], r(0, 1))]), not_set, cannot_loop).
Index: tests/term/dds3_17.trans_opt_exp
===================================================================
RCS file: /home/mercury1/repository/tests/term/dds3_17.trans_opt_exp,v
retrieving revision 1.5
diff -u -r1.5 dds3_17.trans_opt_exp
--- tests/term/dds3_17.trans_opt_exp	8 Dec 2003 03:37:45 -0000	1.5
+++ tests/term/dds3_17.trans_opt_exp	2 Jun 2005 08:49:21 -0000
@@ -1,3 +1,5 @@
 :- module dds3_17.
 :- pragma termination_info(dds3_17.dis((builtin.in)), finite(0, [no]), cannot_loop).
 :- pragma termination_info(dds3_17.con((builtin.in)), finite(0, [no]), cannot_loop).
+:- pragma termination2_info(dds3_17.dis((builtin.in)), [1], constraints([]), not_set, cannot_loop).
+:- pragma termination2_info(dds3_17.con((builtin.in)), [4], constraints([]), not_set, cannot_loop).
Index: tests/term/dds3_8.trans_opt_exp
===================================================================
RCS file: /home/mercury1/repository/tests/term/dds3_8.trans_opt_exp,v
retrieving revision 1.5
diff -u -r1.5 dds3_8.trans_opt_exp
--- tests/term/dds3_8.trans_opt_exp	8 Dec 2003 03:37:45 -0000	1.5
+++ tests/term/dds3_8.trans_opt_exp	2 Jun 2005 08:49:21 -0000
@@ -1,2 +1,3 @@
 :- module dds3_8.
 :- pragma termination_info(dds3_8.reverse((builtin.in), (builtin.out), (builtin.in)), finite(0, [no, yes, no, yes]), cannot_loop).
+:- pragma termination2_info(dds3_8.reverse((builtin.in), (builtin.out), (builtin.in)), [7, 1, 2, 3], constraints([eq([term(1, r(1, 1)), term(2, r(-1, 1)), term(3, r(1, 1))], r(0, 1))]), not_set, can_loop).
Index: tests/term/exception_analysis_test.trans_opt_exp
===================================================================
RCS file: /home/mercury1/repository/tests/term/exception_analysis_test.trans_opt_exp,v
retrieving revision 1.1
diff -u -r1.1 exception_analysis_test.trans_opt_exp
--- tests/term/exception_analysis_test.trans_opt_exp	16 Oct 2004 15:08:55 -0000	1.1
+++ tests/term/exception_analysis_test.trans_opt_exp	2 Jun 2005 08:49:21 -0000
@@ -6,6 +6,13 @@
 :- pragma termination_info(exception_analysis_test.mutual_test1((builtin.in), (builtin.in)), finite(0, [no, no, no]), can_loop).
 :- pragma termination_info(exception_analysis_test.mutual_test2((builtin.in), (builtin.in)), finite(0, [no, no]), can_loop).
 :- pragma termination_info(exception_analysis_test.wrap_equals((builtin.in), (builtin.in)), infinite, cannot_loop).
+:- pragma termination2_info(exception_analysis_test.test1((builtin.in)), [3, 1], constraints([]), not_set, can_loop).
+:- pragma termination2_info(exception_analysis_test.test2((builtin.in), (builtin.in)), [5, 1, 2], constraints([eq([term(1, r(1, 1)), term(2, r(-1, 1))], r(0, 1))]), not_set, can_loop).
+:- pragma termination2_info(exception_analysis_test.test3((builtin.in), (builtin.in)), [3, 1, 2], constraints([eq([term(1, r(1, 1)), term(2, r(-1, 1))], r(0, 1))]), not_set, can_loop).
+:- pragma termination2_info(exception_analysis_test.test4((builtin.in), (builtin.in)), [4, 1, 2], constraints([eq([term(1, r(1, 1)), term(2, r(-1, 1))], r(0, 1))]), not_set, can_loop).
+:- pragma termination2_info(exception_analysis_test.mutual_test1((builtin.in), (builtin.in)), [7, 1, 2], constraints([]), not_set, can_loop).
+:- pragma termination2_info(exception_analysis_test.mutual_test2((builtin.in), (builtin.in)), [9, 10], constraints([]), not_set, can_loop).
+:- pragma termination2_info(exception_analysis_test.wrap_equals((builtin.in), (builtin.in)), [2, 3, 4], constraints([]), not_set, can_loop).
 :- pragma exceptions(predicate, (exception_analysis_test.test1), 1, 0, will_not_throw).
 :- pragma exceptions(predicate, (exception_analysis_test.test2), 2, 0, may_throw(type_exception)).
 :- pragma exceptions(predicate, (exception_analysis_test.test3), 2, 0, conditional).
Index: tests/term/existential_error1.trans_opt_exp
===================================================================
RCS file: /home/mercury1/repository/tests/term/existential_error1.trans_opt_exp,v
retrieving revision 1.1
diff -u -r1.1 existential_error1.trans_opt_exp
--- tests/term/existential_error1.trans_opt_exp	8 Oct 2003 05:12:40 -0000	1.1
+++ tests/term/existential_error1.trans_opt_exp	2 Jun 2005 08:49:21 -0000
@@ -1,2 +1,3 @@
 :- module existential_error1.
 :- pragma termination_info(existential_error1.deconstruct_univ((builtin.in), (builtin.out)), infinite, can_loop).
+:- pragma termination2_info(existential_error1.deconstruct_univ((builtin.in), (builtin.out)), [4, 1, 2], constraints([le([term(1, r(-1, 1))], r(-1, 1))]), not_set, can_loop).
Index: tests/term/existential_error2.trans_opt_exp
===================================================================
RCS file: /home/mercury1/repository/tests/term/existential_error2.trans_opt_exp,v
retrieving revision 1.1
diff -u -r1.1 existential_error2.trans_opt_exp
--- tests/term/existential_error2.trans_opt_exp	8 Oct 2003 05:12:40 -0000	1.1
+++ tests/term/existential_error2.trans_opt_exp	2 Jun 2005 08:49:21 -0000
@@ -1,2 +1,3 @@
 :- module existential_error2.
 :- pragma termination_info(existential_error2.construct_list_of_any((builtin.out)), finite(1, [no]), cannot_loop).
+:- pragma termination2_info(existential_error2.construct_list_of_any((builtin.out)), [1], constraints([eq([term(1, r(1, 1))], r(2, 1))]), not_set, cannot_loop).
Index: tests/term/existential_error3.trans_opt_exp
===================================================================
RCS file: /home/mercury1/repository/tests/term/existential_error3.trans_opt_exp,v
retrieving revision 1.1
diff -u -r1.1 existential_error3.trans_opt_exp
--- tests/term/existential_error3.trans_opt_exp	8 Dec 2003 03:37:45 -0000	1.1
+++ tests/term/existential_error3.trans_opt_exp	2 Jun 2005 08:49:21 -0000
@@ -1,2 +1,3 @@
 :- module existential_error3.
 :- pragma termination_info(existential_error3.test((builtin.in)), finite(0, [no]), cannot_loop).
+:- pragma termination2_info(existential_error3.test((builtin.in)), [1], constraints([le([term(1, r(-1, 1))], r(-2, 1))]), not_set, cannot_loop).
Index: tests/term/fold.trans_opt_exp
===================================================================
RCS file: /home/mercury1/repository/tests/term/fold.trans_opt_exp,v
retrieving revision 1.4
diff -u -r1.4 fold.trans_opt_exp
--- tests/term/fold.trans_opt_exp	17 Jan 2003 05:57:16 -0000	1.4
+++ tests/term/fold.trans_opt_exp	2 Jun 2005 08:49:21 -0000
@@ -1,2 +1,3 @@
 :- module fold.
 :- pragma termination_info(fold.fold((builtin.in), (builtin.in), (builtin.out)), finite(0, [yes, no, no]), cannot_loop).
+:- pragma termination2_info(fold.fold((builtin.in), (builtin.in), (builtin.out)), [1, 2, 3], constraints([le([term(2, r(-1, 1))], r(0, 1))]), not_set, cannot_loop).
Index: tests/term/foreign_valid.trans_opt_exp
===================================================================
RCS file: /home/mercury1/repository/tests/term/foreign_valid.trans_opt_exp,v
retrieving revision 1.1
diff -u -r1.1 foreign_valid.trans_opt_exp
--- tests/term/foreign_valid.trans_opt_exp	12 Feb 2004 03:36:17 -0000	1.1
+++ tests/term/foreign_valid.trans_opt_exp	2 Jun 2005 08:49:21 -0000
@@ -9,3 +9,13 @@
 :- pragma termination_info(foreign_valid.test8((builtin.out)), infinite, can_loop).
 :- pragma termination_info(foreign_valid.test9((builtin.out)), infinite, cannot_loop).
 :- pragma termination_info(foreign_valid.test10((builtin.out)), infinite, can_loop).
+:- pragma termination2_info(foreign_valid.test1((builtin.out)), [1], constraints([]), not_set, cannot_loop).
+:- pragma termination2_info(foreign_valid.test2((builtin.out)), [1], constraints([]), not_set, can_loop).
+:- pragma termination2_info(foreign_valid.test3((builtin.out)), [1], constraints([]), not_set, can_loop).
+:- pragma termination2_info(foreign_valid.test4((builtin.out)), [1], constraints([]), not_set, cannot_loop).
+:- pragma termination2_info(foreign_valid.test5((builtin.out)), [1], constraints([]), not_set, cannot_loop).
+:- pragma termination2_info(foreign_valid.test6((builtin.out)), [1], constraints([]), not_set, can_loop).
+:- pragma termination2_info(foreign_valid.test7((builtin.out)), [1], constraints([]), not_set, cannot_loop).
+:- pragma termination2_info(foreign_valid.test8((builtin.out)), [1], constraints([]), not_set, can_loop).
+:- pragma termination2_info(foreign_valid.test9((builtin.out)), [1], constraints([]), not_set, cannot_loop).
+:- pragma termination2_info(foreign_valid.test10((builtin.out)), [1], constraints([]), not_set, can_loop).
Index: tests/term/inf_const_bug.trans_opt_exp
===================================================================
RCS file: /home/mercury1/repository/tests/term/inf_const_bug.trans_opt_exp,v
retrieving revision 1.1
diff -u -r1.1 inf_const_bug.trans_opt_exp
--- tests/term/inf_const_bug.trans_opt_exp	15 Dec 2003 07:11:06 -0000	1.1
+++ tests/term/inf_const_bug.trans_opt_exp	2 Jun 2005 08:49:21 -0000
@@ -4,3 +4,8 @@
 :- pragma termination_info(inf_const_bug.square((builtin.in)) = (builtin.out), infinite, cannot_loop).
 :- pragma termination_info(inf_const_bug.multiply((builtin.in), (builtin.in)) = (builtin.out), infinite, cannot_loop).
 :- pragma termination_info(inf_const_bug.map((builtin.in), (builtin.in)) = (builtin.out), infinite, can_loop).
+:- pragma termination2_info(inf_const_bug.foo((builtin.in)) = (builtin.out), [1, 2], constraints([le([term(2, r(-1, 1))], r(-3, 1)), le([term(1, r(-1, 1))], r(-3, 1))]), not_set, can_loop).
+:- pragma termination2_info(inf_const_bug.bar((builtin.in)) = (builtin.out), [1, 2], constraints([le([term(2, r(-1, 1))], r(-1, 1)), le([term(1, r(-1, 1))], r(-1, 1))]), not_set, can_loop).
+:- pragma termination2_info(inf_const_bug.square((builtin.in)) = (builtin.out), [2, 1], constraints([le([term(2, r(-1, 1))], r(0, 1))]), not_set, cannot_loop).
+:- pragma termination2_info(inf_const_bug.multiply((builtin.in), (builtin.in)) = (builtin.out), [1, 2, 3], constraints([le([term(1, r(-1, 1))], r(0, 1))]), not_set, cannot_loop).
+:- pragma termination2_info(inf_const_bug.map((builtin.in), (builtin.in)) = (builtin.out), [8, 9, 1, 2, 3], constraints([]), not_set, can_loop).
Index: tests/term/lte.trans_opt_exp
===================================================================
RCS file: /home/mercury1/repository/tests/term/lte.trans_opt_exp,v
retrieving revision 1.3
diff -u -r1.3 lte.trans_opt_exp
--- tests/term/lte.trans_opt_exp	17 Jan 2003 05:57:16 -0000	1.3
+++ tests/term/lte.trans_opt_exp	2 Jun 2005 08:49:21 -0000
@@ -1,2 +1,3 @@
 :- module lte.
 :- pragma termination_info((lte.goal), finite(0, []), cannot_loop).
+:- pragma termination2_info((lte.goal), [], constraints([]), not_set, cannot_loop).
Index: tests/term/member.trans_opt_exp
===================================================================
RCS file: /home/mercury1/repository/tests/term/member.trans_opt_exp,v
retrieving revision 1.4
diff -u -r1.4 member.trans_opt_exp
--- tests/term/member.trans_opt_exp	17 Jan 2003 05:57:16 -0000	1.4
+++ tests/term/member.trans_opt_exp	2 Jun 2005 08:49:21 -0000
@@ -1,2 +1,3 @@
 :- module member.
 :- pragma termination_info(member.member((builtin.out), (builtin.in)), finite(-1, [no, no, yes]), cannot_loop).
+:- pragma termination2_info(member.member((builtin.out), (builtin.in)), [3, 1, 2], constraints([le([term(2, r(-1, 1))], r(-2, 1)), le([term(1, r(-1, 1))], r(0, 1))]), not_set, cannot_loop).
Index: tests/term/mergesort.trans_opt_exp
===================================================================
RCS file: /home/mercury1/repository/tests/term/mergesort.trans_opt_exp,v
retrieving revision 1.4
diff -u -r1.4 mergesort.trans_opt_exp
--- tests/term/mergesort.trans_opt_exp	17 Jan 2003 05:57:16 -0000	1.4
+++ tests/term/mergesort.trans_opt_exp	2 Jun 2005 08:49:21 -0000
@@ -1,2 +1,3 @@
 :- module mergesort.
 :- pragma termination_info(mergesort.mergesort((builtin.in), (builtin.out)), finite(0, [yes, no]), can_loop).
+:- pragma termination2_info(mergesort.mergesort((builtin.in), (builtin.out)), [1, 2], constraints([le([term(1, r(-1, 1))], r(0, 1))]), not_set, can_loop).
Index: tests/term/mergesort_ap.trans_opt_exp
===================================================================
RCS file: /home/mercury1/repository/tests/term/mergesort_ap.trans_opt_exp,v
retrieving revision 1.4
diff -u -r1.4 mergesort_ap.trans_opt_exp
--- tests/term/mergesort_ap.trans_opt_exp	17 Jan 2003 05:57:16 -0000	1.4
+++ tests/term/mergesort_ap.trans_opt_exp	2 Jun 2005 08:49:21 -0000
@@ -1,2 +1,3 @@
 :- module mergesort_ap.
 :- pragma termination_info(mergesort_ap.mergesort((builtin.in), (builtin.out), (builtin.in)), finite(0, [yes, no, no]), cannot_loop).
+:- pragma termination2_info(mergesort_ap.mergesort((builtin.in), (builtin.out), (builtin.in)), [1, 2, 3], constraints([le([term(1, r(-1, 1))], r(0, 1))]), not_set, cannot_loop).
Index: tests/term/mergesort_t.trans_opt_exp
===================================================================
RCS file: /home/mercury1/repository/tests/term/mergesort_t.trans_opt_exp,v
retrieving revision 1.4
diff -u -r1.4 mergesort_t.trans_opt_exp
--- tests/term/mergesort_t.trans_opt_exp	17 Jan 2003 05:57:16 -0000	1.4
+++ tests/term/mergesort_t.trans_opt_exp	2 Jun 2005 08:49:21 -0000
@@ -1,2 +1,3 @@
 :- module mergesort_t.
 :- pragma termination_info(mergesort_t.mergesort((builtin.in), (builtin.out)), infinite, can_loop).
+:- pragma termination2_info(mergesort_t.mergesort((builtin.in), (builtin.out)), [1, 2], constraints([le([term(1, r(-1, 1))], r(0, 1))]), not_set, cannot_loop).
Index: tests/term/mmatrix.trans_opt_exp
===================================================================
RCS file: /home/mercury1/repository/tests/term/mmatrix.trans_opt_exp,v
retrieving revision 1.4
diff -u -r1.4 mmatrix.trans_opt_exp
--- tests/term/mmatrix.trans_opt_exp	17 Jan 2003 05:57:16 -0000	1.4
+++ tests/term/mmatrix.trans_opt_exp	2 Jun 2005 08:49:21 -0000
@@ -1,2 +1,3 @@
 :- module mmatrix.
 :- pragma termination_info(mmatrix.mmultiply((builtin.in), (builtin.in), (builtin.out)), infinite, cannot_loop).
+:- pragma termination2_info(mmatrix.mmultiply((builtin.in), (builtin.in), (builtin.out)), [1, 2, 3], constraints([le([term(3, r(-1, 1))], r(0, 1))]), not_set, cannot_loop).
Index: tests/term/money.trans_opt_exp
===================================================================
RCS file: /home/mercury1/repository/tests/term/money.trans_opt_exp,v
retrieving revision 1.4
diff -u -r1.4 money.trans_opt_exp
--- tests/term/money.trans_opt_exp	17 Jan 2003 05:57:16 -0000	1.4
+++ tests/term/money.trans_opt_exp	2 Jun 2005 08:49:21 -0000
@@ -1,2 +1,3 @@
 :- module money.
 :- pragma termination_info(money.solve((builtin.out)), finite(10, [no]), cannot_loop).
+:- pragma termination2_info(money.solve((builtin.out)), [1], constraints([eq([term(1, r(1, 1))], r(16, 1))]), not_set, cannot_loop).
Index: tests/term/my_list.trans_opt_exp
===================================================================
RCS file: /home/mercury1/repository/tests/term/my_list.trans_opt_exp,v
retrieving revision 1.5
diff -u -r1.5 my_list.trans_opt_exp
--- tests/term/my_list.trans_opt_exp	17 Jan 2003 05:57:16 -0000	1.5
+++ tests/term/my_list.trans_opt_exp	2 Jun 2005 08:49:21 -0000
@@ -1,2 +1,3 @@
 :- module my_list.
 :- pragma termination_info(my_list.list((builtin.in)), finite(0, [no, no]), cannot_loop).
+:- pragma termination2_info(my_list.list((builtin.in)), [4, 1], constraints([le([term(1, r(-1, 1))], r(0, 1))]), not_set, cannot_loop).
Index: tests/term/my_map.trans_opt_exp
===================================================================
RCS file: /home/mercury1/repository/tests/term/my_map.trans_opt_exp,v
retrieving revision 1.5
diff -u -r1.5 my_map.trans_opt_exp
--- tests/term/my_map.trans_opt_exp	17 Jan 2003 05:57:16 -0000	1.5
+++ tests/term/my_map.trans_opt_exp	2 Jun 2005 08:49:21 -0000
@@ -1,2 +1,3 @@
 :- module my_map.
 :- pragma termination_info(my_map.map((builtin.in), (builtin.out)), infinite, cannot_loop).
+:- pragma termination2_info(my_map.map((builtin.in), (builtin.out)), [1, 2], constraints([eq([term(1, r(1, 1)), term(2, r(-1, 1))], r(0, 1))]), not_set, cannot_loop).
Index: tests/term/naive_rev.trans_opt_exp
===================================================================
RCS file: /home/mercury1/repository/tests/term/naive_rev.trans_opt_exp,v
retrieving revision 1.4
diff -u -r1.4 naive_rev.trans_opt_exp
--- tests/term/naive_rev.trans_opt_exp	17 Jan 2003 05:57:16 -0000	1.4
+++ tests/term/naive_rev.trans_opt_exp	2 Jun 2005 08:49:21 -0000
@@ -1,2 +1,3 @@
 :- module naive_rev.
 :- pragma termination_info(naive_rev.reverse((builtin.in), (builtin.out)), finite(0, [no, yes, no]), cannot_loop).
+:- pragma termination2_info(naive_rev.reverse((builtin.in), (builtin.out)), [8, 1, 2], constraints([eq([term(1, r(1, 1)), term(2, r(-1, 1))], r(0, 1))]), not_set, cannot_loop).
Index: tests/term/occur.trans_opt_exp
===================================================================
RCS file: /home/mercury1/repository/tests/term/occur.trans_opt_exp,v
retrieving revision 1.4
diff -u -r1.4 occur.trans_opt_exp
--- tests/term/occur.trans_opt_exp	17 Jan 2003 05:57:16 -0000	1.4
+++ tests/term/occur.trans_opt_exp	2 Jun 2005 08:49:21 -0000
@@ -1,2 +1,3 @@
 :- module occur.
 :- pragma termination_info(occur.occurall((builtin.in), (builtin.in), (builtin.out)), infinite, cannot_loop).
+:- pragma termination2_info(occur.occurall((builtin.in), (builtin.in), (builtin.out)), [1, 2, 3], constraints([eq([term(1, r(1, 1)), term(3, r(-1, 3))], r(0, 1)), le([term(1, r(-1, 1)), term(3, r(2, 9))], r(0, 1))]), not_set, cannot_loop).
Index: tests/term/ordered.trans_opt_exp
===================================================================
RCS file: /home/mercury1/repository/tests/term/ordered.trans_opt_exp,v
retrieving revision 1.4
diff -u -r1.4 ordered.trans_opt_exp
--- tests/term/ordered.trans_opt_exp	17 Jan 2003 05:57:16 -0000	1.4
+++ tests/term/ordered.trans_opt_exp	2 Jun 2005 08:49:21 -0000
@@ -1,2 +1,3 @@
 :- module ordered.
 :- pragma termination_info(ordered.ordered((builtin.in)), finite(0, [no]), cannot_loop).
+:- pragma termination2_info(ordered.ordered((builtin.in)), [1], constraints([le([term(1, r(-1, 1))], r(0, 1))]), not_set, cannot_loop).
Index: tests/term/overlap.trans_opt_exp
===================================================================
RCS file: /home/mercury1/repository/tests/term/overlap.trans_opt_exp,v
retrieving revision 1.4
diff -u -r1.4 overlap.trans_opt_exp
--- tests/term/overlap.trans_opt_exp	17 Jan 2003 05:57:16 -0000	1.4
+++ tests/term/overlap.trans_opt_exp	2 Jun 2005 08:49:21 -0000
@@ -1,2 +1,3 @@
 :- module overlap.
 :- pragma termination_info(overlap.overlap((builtin.in), (builtin.in)), finite(0, [no, no, no]), cannot_loop).
+:- pragma termination2_info(overlap.overlap((builtin.in), (builtin.in)), [4, 1, 2], constraints([le([term(1, r(-1, 1))], r(-2, 1)), le([term(2, r(-1, 1))], r(-2, 1))]), not_set, cannot_loop).
Index: tests/term/permutation.trans_opt_exp
===================================================================
RCS file: /home/mercury1/repository/tests/term/permutation.trans_opt_exp,v
retrieving revision 1.4
diff -u -r1.4 permutation.trans_opt_exp
--- tests/term/permutation.trans_opt_exp	17 Jan 2003 05:57:16 -0000	1.4
+++ tests/term/permutation.trans_opt_exp	2 Jun 2005 08:49:21 -0000
@@ -1,2 +1,3 @@
 :- module permutation.
 :- pragma termination_info(permutation.perm((builtin.in), (builtin.out)), finite(0, [no, yes, no]), cannot_loop).
+:- pragma termination2_info(permutation.perm((builtin.in), (builtin.out)), [9, 1, 2], constraints([eq([term(1, r(1, 1)), term(2, r(-1, 1))], r(0, 1))]), not_set, cannot_loop).
Index: tests/term/pl1_1.trans_opt_exp
===================================================================
RCS file: /home/mercury1/repository/tests/term/pl1_1.trans_opt_exp,v
retrieving revision 1.5
diff -u -r1.5 pl1_1.trans_opt_exp
--- tests/term/pl1_1.trans_opt_exp	8 Dec 2003 03:42:15 -0000	1.5
+++ tests/term/pl1_1.trans_opt_exp	2 Jun 2005 08:49:21 -0000
@@ -1,3 +1,5 @@
 :- module pl1_1.
 :- pragma termination_info(pl1_1.append((builtin.in), (builtin.in), (builtin.out)), finite(0, [no, yes, yes, no]), cannot_loop).
 :- pragma termination_info(pl1_1.append((builtin.out), (builtin.out), (builtin.in)), finite(0, [no, no, no, yes]), cannot_loop).
+:- pragma termination2_info(pl1_1.append((builtin.in), (builtin.in), (builtin.out)), [7, 1, 2, 3], constraints([eq([term(1, r(1, 1)), term(2, r(1, 1)), term(3, r(-1, 1))], r(0, 1))]), not_set, cannot_loop).
+:- pragma termination2_info(pl1_1.append((builtin.out), (builtin.out), (builtin.in)), [7, 1, 2, 3], constraints([eq([term(1, r(1, 1)), term(2, r(1, 1)), term(3, r(-1, 1))], r(0, 1))]), not_set, cannot_loop).
Index: tests/term/pl1_2.trans_opt_exp
===================================================================
RCS file: /home/mercury1/repository/tests/term/pl1_2.trans_opt_exp,v
retrieving revision 1.5
diff -u -r1.5 pl1_2.trans_opt_exp
--- tests/term/pl1_2.trans_opt_exp	8 Dec 2003 03:42:15 -0000	1.5
+++ tests/term/pl1_2.trans_opt_exp	2 Jun 2005 08:49:21 -0000
@@ -1,2 +1,3 @@
 :- module pl1_2.
 :- pragma termination_info(pl1_2.perm((builtin.in), (builtin.out)), finite(0, [no, yes, no]), cannot_loop).
+:- pragma termination2_info(pl1_2.perm((builtin.in), (builtin.out)), [9, 1, 2], constraints([eq([term(1, r(1, 1)), term(2, r(-1, 1))], r(0, 1))]), not_set, cannot_loop).
Index: tests/term/pl2_3_1.trans_opt_exp
===================================================================
RCS file: /home/mercury1/repository/tests/term/pl2_3_1.trans_opt_exp,v
retrieving revision 1.5
diff -u -r1.5 pl2_3_1.trans_opt_exp
--- tests/term/pl2_3_1.trans_opt_exp	8 Dec 2003 03:42:15 -0000	1.5
+++ tests/term/pl2_3_1.trans_opt_exp	2 Jun 2005 08:49:21 -0000
@@ -1,2 +1,3 @@
 :- module pl2_3_1.
 :- pragma termination_info(pl2_3_1.p((builtin.in), (builtin.out)), finite(0, [yes, no]), can_loop).
+:- pragma termination2_info(pl2_3_1.p((builtin.in), (builtin.out)), [1, 2], constraints([]), not_set, can_loop).
Index: tests/term/pl3_1_1.trans_opt_exp
===================================================================
RCS file: /home/mercury1/repository/tests/term/pl3_1_1.trans_opt_exp,v
retrieving revision 1.3
diff -u -r1.3 pl3_1_1.trans_opt_exp
--- tests/term/pl3_1_1.trans_opt_exp	8 Dec 2003 03:42:15 -0000	1.3
+++ tests/term/pl3_1_1.trans_opt_exp	2 Jun 2005 08:49:21 -0000
@@ -6,3 +6,10 @@
 :- pragma termination_info((pl3_1_1.e), finite(0, []), can_loop).
 :- pragma termination_info((pl3_1_1.f), finite(0, []), can_loop).
 :- pragma termination_info((pl3_1_1.g), finite(0, []), can_loop).
+:- pragma termination2_info((pl3_1_1.a), [], constraints([]), not_set, can_loop).
+:- pragma termination2_info((pl3_1_1.b), [], constraints([]), not_set, can_loop).
+:- pragma termination2_info((pl3_1_1.c), [], constraints([]), not_set, can_loop).
+:- pragma termination2_info((pl3_1_1.d), [], constraints([]), not_set, can_loop).
+:- pragma termination2_info((pl3_1_1.e), [], constraints([]), not_set, can_loop).
+:- pragma termination2_info((pl3_1_1.f), [], constraints([]), not_set, can_loop).
+:- pragma termination2_info((pl3_1_1.g), [], constraints([]), not_set, can_loop).
Index: tests/term/pl3_5_6.trans_opt_exp
===================================================================
RCS file: /home/mercury1/repository/tests/term/pl3_5_6.trans_opt_exp,v
retrieving revision 1.5
diff -u -r1.5 pl3_5_6.trans_opt_exp
--- tests/term/pl3_5_6.trans_opt_exp	8 Dec 2003 03:42:15 -0000	1.5
+++ tests/term/pl3_5_6.trans_opt_exp	2 Jun 2005 08:49:21 -0000
@@ -1,2 +1,3 @@
 :- module pl3_5_6.
 :- pragma termination_info(pl3_5_6.p((builtin.out)), infinite, can_loop).
+:- pragma termination2_info(pl3_5_6.p((builtin.out)), [1], constraints([le([term(1, r(-1, 1))], r(-2, 1))]), not_set, can_loop).
Index: tests/term/pl3_5_6a.trans_opt_exp
===================================================================
RCS file: /home/mercury1/repository/tests/term/pl3_5_6a.trans_opt_exp,v
retrieving revision 1.4
diff -u -r1.4 pl3_5_6a.trans_opt_exp
--- tests/term/pl3_5_6a.trans_opt_exp	17 Jan 2003 05:57:16 -0000	1.4
+++ tests/term/pl3_5_6a.trans_opt_exp	2 Jun 2005 08:49:21 -0000
@@ -1,2 +1,3 @@
 :- module pl3_5_6a.
 :- pragma termination_info(pl3_5_6a.p((builtin.out)), infinite, can_loop).
+:- pragma termination2_info(pl3_5_6a.p((builtin.out)), [1], constraints([eq([term(1, r(1, 1))], r(2, 1))]), not_set, can_loop).
Index: tests/term/pl4_01.trans_opt_exp
===================================================================
RCS file: /home/mercury1/repository/tests/term/pl4_01.trans_opt_exp,v
retrieving revision 1.5
diff -u -r1.5 pl4_01.trans_opt_exp
--- tests/term/pl4_01.trans_opt_exp	8 Dec 2003 03:42:15 -0000	1.5
+++ tests/term/pl4_01.trans_opt_exp	2 Jun 2005 08:49:21 -0000
@@ -1,3 +1,5 @@
 :- module pl4_01.
 :- pragma termination_info(pl4_01.append3((builtin.in), (builtin.in), (builtin.in), (builtin.out)), finite(0, [no, yes, yes, yes, no]), cannot_loop).
 :- pragma termination_info(pl4_01.append3((builtin.out), (builtin.out), (builtin.out), (builtin.in)), finite(0, [no, no, no, no, yes]), cannot_loop).
+:- pragma termination2_info(pl4_01.append3((builtin.in), (builtin.in), (builtin.in), (builtin.out)), [6, 1, 2, 3, 4], constraints([eq([term(1, r(1, 1)), term(2, r(1, 1)), term(3, r(1, 1)), term(4, r(-1, 1))], r(0, 1))]), not_set, cannot_loop).
+:- pragma termination2_info(pl4_01.append3((builtin.out), (builtin.out), (builtin.out), (builtin.in)), [6, 1, 2, 3, 4], constraints([eq([term(1, r(1, 1)), term(2, r(1, 1)), term(3, r(1, 1)), term(4, r(-1, 1))], r(0, 1))]), not_set, cannot_loop).
Index: tests/term/pl4_4_3.trans_opt_exp
===================================================================
RCS file: /home/mercury1/repository/tests/term/pl4_4_3.trans_opt_exp,v
retrieving revision 1.5
diff -u -r1.5 pl4_4_3.trans_opt_exp
--- tests/term/pl4_4_3.trans_opt_exp	8 Dec 2003 03:42:15 -0000	1.5
+++ tests/term/pl4_4_3.trans_opt_exp	2 Jun 2005 08:49:21 -0000
@@ -1,2 +1,3 @@
 :- module pl4_4_3.
 :- pragma termination_info(pl4_4_3.merge((builtin.in), (builtin.in), (builtin.out)), finite(0, [yes, yes, no]), cannot_loop).
+:- pragma termination2_info(pl4_4_3.merge((builtin.in), (builtin.in), (builtin.out)), [1, 2, 3], constraints([le([term(3, r(-1, 1))], r(0, 1))]), not_set, cannot_loop).
Index: tests/term/pl4_4_6a.trans_opt_exp
===================================================================
RCS file: /home/mercury1/repository/tests/term/pl4_4_6a.trans_opt_exp,v
retrieving revision 1.4
diff -u -r1.4 pl4_4_6a.trans_opt_exp
--- tests/term/pl4_4_6a.trans_opt_exp	17 Jan 2003 05:57:16 -0000	1.4
+++ tests/term/pl4_4_6a.trans_opt_exp	2 Jun 2005 08:49:21 -0000
@@ -1,2 +1,3 @@
 :- module pl4_4_6a.
 :- pragma termination_info(pl4_4_6a.perm((builtin.in), (builtin.out)), finite(0, [no, yes, no]), cannot_loop).
+:- pragma termination2_info(pl4_4_6a.perm((builtin.in), (builtin.out)), [6, 1, 2], constraints([eq([term(1, r(1, 1)), term(2, r(-1, 1))], r(0, 1)), le([term(2, r(-1, 1))], r(0, 1))]), not_set, cannot_loop).
Index: tests/term/pl4_5_2.trans_opt_exp
===================================================================
RCS file: /home/mercury1/repository/tests/term/pl4_5_2.trans_opt_exp,v
retrieving revision 1.5
diff -u -r1.5 pl4_5_2.trans_opt_exp
--- tests/term/pl4_5_2.trans_opt_exp	8 Dec 2003 03:42:16 -0000	1.5
+++ tests/term/pl4_5_2.trans_opt_exp	2 Jun 2005 08:49:21 -0000
@@ -1,2 +1,3 @@
 :- module pl4_5_2.
 :- pragma termination_info(pl4_5_2.s((builtin.in), (builtin.out)), infinite, can_loop).
+:- pragma termination2_info(pl4_5_2.s((builtin.in), (builtin.out)), [1, 2], constraints([le([term(1, r(-1, 1))], r(-2, 1))]), not_set, can_loop).
Index: tests/term/pl4_5_3a.trans_opt_exp
===================================================================
RCS file: /home/mercury1/repository/tests/term/pl4_5_3a.trans_opt_exp,v
retrieving revision 1.4
diff -u -r1.4 pl4_5_3a.trans_opt_exp
--- tests/term/pl4_5_3a.trans_opt_exp	17 Jan 2003 05:57:16 -0000	1.4
+++ tests/term/pl4_5_3a.trans_opt_exp	2 Jun 2005 08:49:21 -0000
@@ -1,3 +1,5 @@
 :- module pl4_5_3a.
 :- pragma termination_info(pl4_5_3a.p((builtin.in)), finite(0, [no]), can_loop).
 :- pragma termination_info(pl4_5_3a.p((builtin.out)), finite(0, [no]), can_loop).
+:- pragma termination2_info(pl4_5_3a.p((builtin.in)), [1], constraints([]), not_set, can_loop).
+:- pragma termination2_info(pl4_5_3a.p((builtin.out)), [1], constraints([]), not_set, can_loop).
Index: tests/term/pl5_2_2.trans_opt_exp
===================================================================
RCS file: /home/mercury1/repository/tests/term/pl5_2_2.trans_opt_exp,v
retrieving revision 1.7
diff -u -r1.7 pl5_2_2.trans_opt_exp
--- tests/term/pl5_2_2.trans_opt_exp	8 Dec 2003 03:42:16 -0000	1.7
+++ tests/term/pl5_2_2.trans_opt_exp	2 Jun 2005 08:49:21 -0000
@@ -1,2 +1,3 @@
 :- module pl5_2_2.
 :- pragma termination_info(pl5_2_2.turing((builtin.in), (builtin.in), (builtin.in), (builtin.out)), infinite, can_loop).
+:- pragma termination2_info(pl5_2_2.turing((builtin.in), (builtin.in), (builtin.in), (builtin.out)), [1, 2, 3, 4], constraints([le([term(1, r(-1, 1))], r(-3, 1)), le([term(3, r(-1, 1))], r(-2, 1))]), not_set, can_loop).
Index: tests/term/pl6_1_1.trans_opt_exp
===================================================================
RCS file: /home/mercury1/repository/tests/term/pl6_1_1.trans_opt_exp,v
retrieving revision 1.5
diff -u -r1.5 pl6_1_1.trans_opt_exp
--- tests/term/pl6_1_1.trans_opt_exp	8 Dec 2003 03:42:16 -0000	1.5
+++ tests/term/pl6_1_1.trans_opt_exp	2 Jun 2005 08:49:21 -0000
@@ -1,2 +1,3 @@
 :- module pl6_1_1.
 :- pragma termination_info(pl6_1_1.qsort((builtin.in), (builtin.out)), finite(0, [yes, no]), cannot_loop).
+:- pragma termination2_info(pl6_1_1.qsort((builtin.in), (builtin.out)), [1, 2], constraints([eq([term(1, r(1, 1)), term(2, r(-1, 1))], r(0, 1)), le([term(2, r(-1, 1))], r(0, 1))]), not_set, cannot_loop).
Index: tests/term/pl7_2_9.trans_opt_exp
===================================================================
RCS file: /home/mercury1/repository/tests/term/pl7_2_9.trans_opt_exp,v
retrieving revision 1.5
diff -u -r1.5 pl7_2_9.trans_opt_exp
--- tests/term/pl7_2_9.trans_opt_exp	8 Dec 2003 03:42:16 -0000	1.5
+++ tests/term/pl7_2_9.trans_opt_exp	2 Jun 2005 08:49:21 -0000
@@ -1,2 +1,3 @@
 :- module pl7_2_9.
 :- pragma termination_info(pl7_2_9.mult((builtin.in), (builtin.in), (builtin.out)), infinite, cannot_loop).
+:- pragma termination2_info(pl7_2_9.mult((builtin.in), (builtin.in), (builtin.out)), [1, 2, 3], constraints([le([term(1, r(-1, 1))], r(0, 1))]), not_set, cannot_loop).
Index: tests/term/pl7_6_2a.trans_opt_exp
===================================================================
RCS file: /home/mercury1/repository/tests/term/pl7_6_2a.trans_opt_exp,v
retrieving revision 1.4
diff -u -r1.4 pl7_6_2a.trans_opt_exp
--- tests/term/pl7_6_2a.trans_opt_exp	17 Jan 2003 05:57:17 -0000	1.4
+++ tests/term/pl7_6_2a.trans_opt_exp	2 Jun 2005 08:49:21 -0000
@@ -1,2 +1,3 @@
 :- module pl7_6_2a.
 :- pragma termination_info(pl7_6_2a.reach((builtin.in), (builtin.in), (builtin.in)), finite(0, [no, no, no, no]), can_loop).
+:- pragma termination2_info(pl7_6_2a.reach((builtin.in), (builtin.in), (builtin.in)), [11, 1, 2, 3], constraints([le([term(3, r(-1, 1))], r(-2, 1))]), not_set, can_loop).
Index: tests/term/pl7_6_2b.trans_opt_exp
===================================================================
RCS file: /home/mercury1/repository/tests/term/pl7_6_2b.trans_opt_exp,v
retrieving revision 1.4
diff -u -r1.4 pl7_6_2b.trans_opt_exp
--- tests/term/pl7_6_2b.trans_opt_exp	17 Jan 2003 05:57:17 -0000	1.4
+++ tests/term/pl7_6_2b.trans_opt_exp	2 Jun 2005 08:49:21 -0000
@@ -1,2 +1,3 @@
 :- module pl7_6_2b.
 :- pragma termination_info(pl7_6_2b.reach((builtin.in), (builtin.in), (builtin.in), (builtin.in)), finite(0, [no, no, no, no, no]), can_loop).
+:- pragma termination2_info(pl7_6_2b.reach((builtin.in), (builtin.in), (builtin.in), (builtin.in)), [13, 1, 2, 3, 4], constraints([le([term(3, r(-1, 1))], r(-2, 1)), le([term(1, r(-1, 1))], r(0, 1))]), not_set, can_loop).
Index: tests/term/pl7_6_2c.trans_opt_exp
===================================================================
RCS file: /home/mercury1/repository/tests/term/pl7_6_2c.trans_opt_exp,v
retrieving revision 1.4
diff -u -r1.4 pl7_6_2c.trans_opt_exp
--- tests/term/pl7_6_2c.trans_opt_exp	17 Jan 2003 05:57:17 -0000	1.4
+++ tests/term/pl7_6_2c.trans_opt_exp	2 Jun 2005 08:49:21 -0000
@@ -1,2 +1,3 @@
 :- module pl7_6_2c.
 :- pragma termination_info(pl7_6_2c.reach((builtin.in), (builtin.in), (builtin.in), (builtin.in)), finite(0, [no, no, no, no, no]), cannot_loop).
+:- pragma termination2_info(pl7_6_2c.reach((builtin.in), (builtin.in), (builtin.in), (builtin.in)), [13, 1, 2, 3, 4], constraints([le([term(2, r(-1, 1))], r(0, 1)), le([term(3, r(-1, 1))], r(-2, 1))]), not_set, cannot_loop).
Index: tests/term/pl8_2_1.trans_opt_exp
===================================================================
RCS file: /home/mercury1/repository/tests/term/pl8_2_1.trans_opt_exp,v
retrieving revision 1.5
diff -u -r1.5 pl8_2_1.trans_opt_exp
--- tests/term/pl8_2_1.trans_opt_exp	8 Dec 2003 03:42:16 -0000	1.5
+++ tests/term/pl8_2_1.trans_opt_exp	2 Jun 2005 08:49:21 -0000
@@ -1,2 +1,3 @@
 :- module pl8_2_1.
 :- pragma termination_info(pl8_2_1.mergesort((builtin.in), (builtin.out)), finite(0, [yes, no]), can_loop).
+:- pragma termination2_info(pl8_2_1.mergesort((builtin.in), (builtin.out)), [1, 2], constraints([le([term(1, r(-1, 1))], r(0, 1))]), not_set, can_loop).
Index: tests/term/pl8_2_1a.trans_opt_exp
===================================================================
RCS file: /home/mercury1/repository/tests/term/pl8_2_1a.trans_opt_exp,v
retrieving revision 1.4
diff -u -r1.4 pl8_2_1a.trans_opt_exp
--- tests/term/pl8_2_1a.trans_opt_exp	17 Jan 2003 05:57:17 -0000	1.4
+++ tests/term/pl8_2_1a.trans_opt_exp	2 Jun 2005 08:49:21 -0000
@@ -1,2 +1,3 @@
 :- module pl8_2_1a.
 :- pragma termination_info(pl8_2_1a.mergesort((builtin.in), (builtin.out)), finite(0, [yes, no]), cannot_loop).
+:- pragma termination2_info(pl8_2_1a.mergesort((builtin.in), (builtin.out)), [1, 2], constraints([le([term(1, r(-1, 1))], r(0, 1))]), not_set, cannot_loop).
Index: tests/term/pl8_3_1.trans_opt_exp
===================================================================
RCS file: /home/mercury1/repository/tests/term/pl8_3_1.trans_opt_exp,v
retrieving revision 1.5
diff -u -r1.5 pl8_3_1.trans_opt_exp
--- tests/term/pl8_3_1.trans_opt_exp	8 Dec 2003 03:42:16 -0000	1.5
+++ tests/term/pl8_3_1.trans_opt_exp	2 Jun 2005 08:49:21 -0000
@@ -1,2 +1,3 @@
 :- module pl8_3_1.
 :- pragma termination_info(pl8_3_1.xminsort((builtin.in), (builtin.out)), infinite, can_loop).
+:- pragma termination2_info(pl8_3_1.xminsort((builtin.in), (builtin.out)), [1, 2], constraints([]), not_set, can_loop).
Index: tests/term/pl8_3_1a.trans_opt_exp
===================================================================
RCS file: /home/mercury1/repository/tests/term/pl8_3_1a.trans_opt_exp,v
retrieving revision 1.4
diff -u -r1.4 pl8_3_1a.trans_opt_exp
--- tests/term/pl8_3_1a.trans_opt_exp	17 Jan 2003 05:57:17 -0000	1.4
+++ tests/term/pl8_3_1a.trans_opt_exp	2 Jun 2005 08:49:21 -0000
@@ -1,2 +1,3 @@
 :- module pl8_3_1a.
 :- pragma termination_info(pl8_3_1a.xminsort((builtin.in), (builtin.out)), infinite, cannot_loop).
+:- pragma termination2_info(pl8_3_1a.xminsort((builtin.in), (builtin.out)), [1, 2], constraints([eq([term(1, r(1, 1)), term(2, r(-1, 1))], r(0, 1))]), not_set, cannot_loop).
Index: tests/term/pl8_4_1.trans_opt_exp
===================================================================
RCS file: /home/mercury1/repository/tests/term/pl8_4_1.trans_opt_exp,v
retrieving revision 1.5
diff -u -r1.5 pl8_4_1.trans_opt_exp
--- tests/term/pl8_4_1.trans_opt_exp	8 Dec 2003 03:42:16 -0000	1.5
+++ tests/term/pl8_4_1.trans_opt_exp	2 Jun 2005 08:49:21 -0000
@@ -1,3 +1,5 @@
 :- module pl8_4_1.
 :- pragma termination_info(pl8_4_1.even((builtin.in)), finite(0, [no]), cannot_loop).
 :- pragma termination_info(pl8_4_1.odd((builtin.in)), finite(0, [no]), cannot_loop).
+:- pragma termination2_info(pl8_4_1.even((builtin.in)), [1], constraints([le([term(1, r(-1, 1))], r(0, 1))]), not_set, cannot_loop).
+:- pragma termination2_info(pl8_4_1.odd((builtin.in)), [3], constraints([le([term(3, r(-1, 1))], r(-1, 1))]), not_set, cannot_loop).
Index: tests/term/pl8_4_2.trans_opt_exp
===================================================================
RCS file: /home/mercury1/repository/tests/term/pl8_4_2.trans_opt_exp,v
retrieving revision 1.5
diff -u -r1.5 pl8_4_2.trans_opt_exp
--- tests/term/pl8_4_2.trans_opt_exp	8 Dec 2003 03:42:16 -0000	1.5
+++ tests/term/pl8_4_2.trans_opt_exp	2 Jun 2005 08:49:21 -0000
@@ -1,2 +1,3 @@
 :- module pl8_4_2.
 :- pragma termination_info(pl8_4_2.e((builtin.in), (builtin.out)), finite(-1, [yes, no]), cannot_loop).
+:- pragma termination2_info(pl8_4_2.e((builtin.in), (builtin.out)), [1, 2], constraints([le([term(1, r(-1, 1)), term(2, r(1, 1))], r(-2, 1)), le([term(2, r(-1, 1))], r(0, 1))]), not_set, cannot_loop).
Index: tests/term/pragma_non_term.trans_opt_exp
===================================================================
RCS file: /home/mercury1/repository/tests/term/pragma_non_term.trans_opt_exp,v
retrieving revision 1.1
diff -u -r1.1 pragma_non_term.trans_opt_exp
--- tests/term/pragma_non_term.trans_opt_exp	25 Jun 2003 06:57:34 -0000	1.1
+++ tests/term/pragma_non_term.trans_opt_exp	2 Jun 2005 08:49:21 -0000
@@ -1,2 +1,3 @@
 :- module pragma_non_term.
 :- pragma termination_info((pragma_non_term.a), finite(0, []), can_loop).
+:- pragma termination2_info((pragma_non_term.a), [], constraints([]), not_set, can_loop).
Index: tests/term/pragma_term.trans_opt_exp
===================================================================
RCS file: /home/mercury1/repository/tests/term/pragma_term.trans_opt_exp,v
retrieving revision 1.1
diff -u -r1.1 pragma_term.trans_opt_exp
--- tests/term/pragma_term.trans_opt_exp	25 Jun 2003 06:57:34 -0000	1.1
+++ tests/term/pragma_term.trans_opt_exp	2 Jun 2005 08:49:21 -0000
@@ -1,2 +1,3 @@
 :- module pragma_term.
 :- pragma termination_info((pragma_term.a), finite(0, []), cannot_loop).
+:- pragma termination2_info((pragma_term.a), [], constraints([]), not_set, cannot_loop).
Index: tests/term/promise_will_not_throw.trans_opt_exp
===================================================================
RCS file: /home/mercury1/repository/tests/term/promise_will_not_throw.trans_opt_exp,v
retrieving revision 1.1
diff -u -r1.1 promise_will_not_throw.trans_opt_exp
--- tests/term/promise_will_not_throw.trans_opt_exp	10 Dec 2004 07:03:44 -0000	1.1
+++ tests/term/promise_will_not_throw.trans_opt_exp	2 Jun 2005 08:49:21 -0000
@@ -3,6 +3,10 @@
 :- pragma termination_info(promise_will_not_throw.bar((builtin.in), (builtin.out)), infinite, can_loop).
 :- pragma termination_info(promise_will_not_throw.baz((builtin.in), (builtin.out)), infinite, cannot_loop).
 :- pragma termination_info(promise_will_not_throw.quux((builtin.in), (builtin.out)), infinite, cannot_loop).
+:- pragma termination2_info(promise_will_not_throw.foo((builtin.in), (builtin.out)), [1, 2], constraints([]), not_set, can_loop).
+:- pragma termination2_info(promise_will_not_throw.bar((builtin.in), (builtin.out)), [1, 2], constraints([]), not_set, can_loop).
+:- pragma termination2_info(promise_will_not_throw.baz((builtin.in), (builtin.out)), [1, 2], constraints([]), not_set, cannot_loop).
+:- pragma termination2_info(promise_will_not_throw.quux((builtin.in), (builtin.out)), [1, 2], constraints([]), not_set, cannot_loop).
 :- pragma exceptions(predicate, (promise_will_not_throw.foo), 2, 0, will_not_throw).
 :- pragma exceptions(predicate, (promise_will_not_throw.bar), 2, 0, may_throw(user_exception)).
 :- pragma exceptions(predicate, (promise_will_not_throw.baz), 2, 0, will_not_throw).
Index: tests/term/queens.trans_opt_exp
===================================================================
RCS file: /home/mercury1/repository/tests/term/queens.trans_opt_exp,v
retrieving revision 1.4
diff -u -r1.4 queens.trans_opt_exp
--- tests/term/queens.trans_opt_exp	17 Jan 2003 05:57:17 -0000	1.4
+++ tests/term/queens.trans_opt_exp	2 Jun 2005 08:49:21 -0000
@@ -1,2 +1,3 @@
 :- module queens.
 :- pragma termination_info(queens.queens((builtin.in), (builtin.out)), finite(0, [yes, no]), cannot_loop).
+:- pragma termination2_info(queens.queens((builtin.in), (builtin.out)), [1, 2], constraints([eq([term(1, r(1, 1)), term(2, r(-1, 1))], r(0, 1)), le([term(2, r(-1, 1))], r(0, 1))]), not_set, cannot_loop).
Index: tests/term/quicksort.trans_opt_exp
===================================================================
RCS file: /home/mercury1/repository/tests/term/quicksort.trans_opt_exp,v
retrieving revision 1.4
diff -u -r1.4 quicksort.trans_opt_exp
--- tests/term/quicksort.trans_opt_exp	17 Jan 2003 05:57:17 -0000	1.4
+++ tests/term/quicksort.trans_opt_exp	2 Jun 2005 08:49:21 -0000
@@ -1,2 +1,3 @@
 :- module quicksort.
 :- pragma termination_info(quicksort.qs((builtin.in), (builtin.out)), finite(0, [yes, no]), cannot_loop).
+:- pragma termination2_info(quicksort.qs((builtin.in), (builtin.out)), [1, 2], constraints([eq([term(1, r(1, 1)), term(2, r(-1, 1))], r(0, 1))]), not_set, cannot_loop).
Index: tests/term/select.trans_opt_exp
===================================================================
RCS file: /home/mercury1/repository/tests/term/select.trans_opt_exp,v
retrieving revision 1.4
diff -u -r1.4 select.trans_opt_exp
--- tests/term/select.trans_opt_exp	17 Jan 2003 05:57:17 -0000	1.4
+++ tests/term/select.trans_opt_exp	2 Jun 2005 08:49:21 -0000
@@ -1,2 +1,3 @@
 :- module select.
 :- pragma termination_info(select.select((builtin.out), (builtin.in), (builtin.out)), finite(-1, [no, no, yes, no]), cannot_loop).
+:- pragma termination2_info(select.select((builtin.out), (builtin.in), (builtin.out)), [5, 1, 2, 3], constraints([eq([term(1, r(1, 1)), term(2, r(-1, 1)), term(3, r(1, 1))], r(-2, 1)), le([term(3, r(-1, 1))], r(0, 1)), le([term(2, r(-1, 1))], r(0, 1))]), not_set, cannot_loop).
Index: tests/term/subset.trans_opt_exp
===================================================================
RCS file: /home/mercury1/repository/tests/term/subset.trans_opt_exp,v
retrieving revision 1.4
diff -u -r1.4 subset.trans_opt_exp
--- tests/term/subset.trans_opt_exp	17 Jan 2003 05:57:17 -0000	1.4
+++ tests/term/subset.trans_opt_exp	2 Jun 2005 08:49:21 -0000
@@ -1,3 +1,5 @@
 :- module subset.
 :- pragma termination_info(subset.subset((builtin.in), (builtin.in)), finite(0, [no, no, no]), cannot_loop).
 :- pragma termination_info(subset.subset((builtin.out), (builtin.in)), infinite, can_loop).
+:- pragma termination2_info(subset.subset((builtin.in), (builtin.in)), [5, 1, 2], constraints([le([term(1, r(-1, 1))], r(0, 1))]), not_set, cannot_loop).
+:- pragma termination2_info(subset.subset((builtin.out), (builtin.in)), [5, 1, 2], constraints([le([term(1, r(-1, 1))], r(0, 1))]), not_set, can_loop).
Index: tests/term/sum.trans_opt_exp
===================================================================
RCS file: /home/mercury1/repository/tests/term/sum.trans_opt_exp,v
retrieving revision 1.4
diff -u -r1.4 sum.trans_opt_exp
--- tests/term/sum.trans_opt_exp	17 Jan 2003 05:57:17 -0000	1.4
+++ tests/term/sum.trans_opt_exp	2 Jun 2005 08:49:21 -0000
@@ -1,2 +1,3 @@
 :- module sum.
 :- pragma termination_info(sum.sum((builtin.out), (builtin.out), (builtin.in)), finite(0, [no, no, yes]), cannot_loop).
+:- pragma termination2_info(sum.sum((builtin.out), (builtin.out), (builtin.in)), [1, 2, 3], constraints([eq([term(1, r(1, 1)), term(2, r(1, 1)), term(3, r(-1, 1))], r(0, 1)), le([term(1, r(-1, 1))], r(0, 1))]), not_set, cannot_loop).
Index: tests/term/vangelder.trans_opt_exp
===================================================================
RCS file: /home/mercury1/repository/tests/term/vangelder.trans_opt_exp,v
retrieving revision 1.6
diff -u -r1.6 vangelder.trans_opt_exp
--- tests/term/vangelder.trans_opt_exp	17 Jan 2003 05:57:17 -0000	1.6
+++ tests/term/vangelder.trans_opt_exp	2 Jun 2005 08:49:21 -0000
@@ -1,2 +1,3 @@
 :- module vangelder.
 :- pragma termination_info(vangelder.q((builtin.in), (builtin.in)), finite(0, [no, no]), can_loop).
+:- pragma termination2_info(vangelder.q((builtin.in), (builtin.in)), [1, 2], constraints([eq([term(1, r(1, 1))], r(0, 1)), le([term(2, r(-1, 1))], r(0, 1))]), not_set, can_loop).

--------------------------------------------------------------------------
mercury-reviews mailing list
post:  mercury-reviews at cs.mu.oz.au
administrative address: owner-mercury-reviews at cs.mu.oz.au
unsubscribe: Address: mercury-reviews-request at cs.mu.oz.au Message: unsubscribe
subscribe:   Address: mercury-reviews-request at cs.mu.oz.au Message: subscribe
--------------------------------------------------------------------------



More information about the reviews mailing list