[m-rev.] for review: fix another termination analysis bug

Julien Fischer juliensf at students.cs.mu.OZ.AU
Fri Dec 5 17:28:45 AEDT 2003


Estimated hours taken: 2
Branches: main

Fix a bug in the termination analyser where setting the termination
norm to `num-data-elems' causes an internal abort when analysing
code involving existential typeclass constraints.

The bug is caused by the length of the list of arguments of a
functor differing from the length of the list in the weight table that
tells the compiler which arguments to count when computing the size
of that functor.

The length mismatch is caused by typeinfo related variables that
are introduced by the compiler for existentially typed terms.  The
termination analyser includes them but the weight table does not.
I committed a diff a few months ago that partially fixed this problem,
but programs that use existential typeclass constraints break that fix
as well.

The diff implements the easiest solution to all this which is to
have the termination analyser remove all the typeinfo related arguments
of a term before calling term_norm.functor_norm/9.

This diff also fixes a few things in the tests/term directory, namely
making sure that we actually run the tests, updating the module qualifier
in a few .trans_opt_exp files and updating some comments.


compiler/term_norm.m:
	Ignore any typeinfo related arguments that a term has when
	building the weight table.

compiler/term_traversal.m:
	Remove any typeinfo related arguments from the lists of
	arguments and modes before computing the size of a term.

tests/term/Mercury.options:
tests/term/existential_error3.m:
tests/term/existential_error3.trans_opt_exp:
	Add a regression test for this bug.

tests/term/Mmakefile:
	Set the value of the TESTS variable after setting the value of
	PROGS, otherwise the tests will not be run.
	Add the new regression test.

tests/term/existential_error1.m:
tests/term/existential_error2.m:
	The code that caused these bugs has been moved from term_util.m
	to term_norm.m.  Update the references to the old filename.

tests/term/*.trans_opt_exp:
	Replaces instances of `:' as the module qualifier with `.'.
	Quite a few tests cases were failing because the .trans_opt
	files use the latter.



Index: compiler/term_norm.m
===================================================================
RCS file: /home/mercury1/repository/mercury/compiler/term_norm.m,v
retrieving revision 1.2
diff -u -r1.2 term_norm.m
--- compiler/term_norm.m	30 Oct 2003 14:12:39 -0000	1.2
+++ compiler/term_norm.m	5 Dec 2003 02:38:09 -0000
@@ -146,26 +146,23 @@
 :- pred find_weights_for_cons(type_ctor::in, list(type_param)::in,
 	constructor::in, weight_table::in, weight_table::out) is det.

-% XXX Currently, the weight of a functor is not affected by the presence
-% of any arguments that are type_info related.  However, the set of
-% arguments whose sizes should be counted towards the total size of
-% the term will include any type-info related arguments.
+% For existentially typed data items the compiler may insert some
+% type-info related arguments into the functor.  As these have zero-size
+% they are not counted towards the weight of the functor.

 find_weights_for_cons(TypeCtor, Params, Ctor, !Weights) :-
-	Ctor = ctor(ExistQVars, _Constraints, SymName, Args),
-	list__length(ExistQVars, NumExistQVars),
+	Ctor = ctor(_ExistQVars, _Constraints, SymName, Args),
 	list__length(Args, Arity),
 	( Arity > 0 ->
 		find_and_count_nonrec_args(Args, TypeCtor, Params,
 			NumNonRec, ArgInfos0),
 		( NumNonRec = 0 ->
 			Weight = 1,
-			list__duplicate(Arity, yes, ArgInfos1)
+			list__duplicate(Arity, yes, ArgInfos)
 		;
 			Weight = NumNonRec,
-			ArgInfos1 = ArgInfos0
+			ArgInfos = ArgInfos0
 		),
-		ArgInfos = list__duplicate(NumExistQVars, no) ++ ArgInfos1,
 		WeightInfo = weight(Weight, ArgInfos)
 	;
 		WeightInfo = weight(0, [])
Index: compiler/term_traversal.m
===================================================================
RCS file: /home/mercury1/repository/mercury/compiler/term_traversal.m,v
retrieving revision 1.24
diff -u -r1.24 term_traversal.m
--- compiler/term_traversal.m	22 Oct 2003 07:05:17 -0000	1.24
+++ compiler/term_traversal.m	5 Dec 2003 02:55:27 -0000
@@ -105,7 +105,7 @@
 :- import_module check_hlds__type_util.
 :- import_module hlds__hlds_data.

-:- import_module bool, int, require.
+:- import_module assoc_list, bool, int, require.

 traverse_goal(Goal, Params, Info0, Info) :-
 	Goal = GoalExpr - GoalInfo,
@@ -453,12 +453,25 @@
 	\+ type_is_higher_order(Type, _, _, _, _),
 	( type_to_ctor_and_args(Type, TypeCtor, _) ->
 		params_get_module_info(Params, Module),
+		filter_args_and_modes(VarTypes, Args0, Args1, Modes0, Modes1),
 		functor_norm(FunctorInfo, TypeCtor, ConsId, Module,
-			Gamma, Args0, Args, Modes0, Modes),
+			Gamma, Args1, Args, Modes1, Modes),
 		split_unification_vars(Args, Modes, Module, InVars, OutVars)
 	;
 		error("variable type in traverse_goal_2")
 	).
+
+:- pred filter_args_and_modes(map(prog_var, (type))::in, list(prog_var)::in,
+	list(prog_var)::out, list(uni_mode)::in, list(uni_mode)::out) is det.
+
+filter_args_and_modes(VarTypes, Args0, Args, Modes0, Modes) :-
+	assoc_list__from_corresponding_lists(Args0, Modes0, ArgsAndModes0),
+	IsNotTypeInfo = (pred(ArgMode::in) is semidet :-
+		map__lookup(VarTypes, fst(ArgMode), Type),
+		not is_introduced_type_info_type(Type)
+	),
+	list__filter(IsNotTypeInfo, ArgsAndModes0, ArgsAndModes),
+	assoc_list__keys_and_values(ArgsAndModes, Args, Modes).

 %-----------------------------------------------------------------------------%

Index: tests/term/Mercury.options
===================================================================
RCS file: /home/mercury1/repository/tests/term/Mercury.options,v
retrieving revision 1.2
diff -u -r1.2 Mercury.options
--- tests/term/Mercury.options	8 Oct 2003 05:12:40 -0000	1.2
+++ tests/term/Mercury.options	5 Dec 2003 02:39:44 -0000
@@ -10,6 +10,7 @@
 MCFLAGS-dds3_8=--term-norm=simple
 MCFLAGS-existential_error1=--term-norm=num-data-elems
 MCFLAGS-existential_error2=--term-norm=num-data-elems
+MCFLAGS-existential_error3=--term-norm=num-data-elems
 MCFLAGS-fold=--term-norm=simple
 MCFLAGS-my_list=--term-norm=simple
 MCFLAGS-lte=--term-norm=simple
Index: tests/term/Mmakefile
===================================================================
RCS file: /home/mercury1/repository/tests/term/Mmakefile,v
retrieving revision 1.21
diff -u -r1.21 Mmakefile
--- tests/term/Mmakefile	8 Oct 2003 05:12:40 -0000	1.21
+++ tests/term/Mmakefile	5 Dec 2003 06:05:27 -0000
@@ -21,6 +21,7 @@
 	dds3_8 \
 	existential_error1 \
 	existential_error2 \
+	existential_error3 \
 	fold \
 	my_list \
 	lte \
@@ -69,11 +70,6 @@
 	vangelder
 endif	# $(MMAKE_USE_MMC_MAKE) == no

-TESTS=$(PROGS)
-SUBDIRS=
-TESTS_DIR=..
-include $(TESTS_DIR)/Mmake.common
-
 # Module-specific options should go in Mercury.options so they
 # can be found by `mmc --make'.
 include Mercury.options
@@ -84,6 +80,13 @@
 else
 	PROGS=$(TERM_PROGS)
 endif
+
+#-----------------------------------------------------------------------------#
+
+TESTS=$(PROGS)
+SUBDIRS=
+TESTS_DIR=..
+include $(TESTS_DIR)/Mmake.common

 %.runtest: %.trans_opt_res ;

Index: tests/term/dds1_2.trans_opt_exp
===================================================================
RCS file: /home/mercury1/repository/tests/term/dds1_2.trans_opt_exp,v
retrieving revision 1.4
diff -u -r1.4 dds1_2.trans_opt_exp
--- tests/term/dds1_2.trans_opt_exp	17 Jan 2003 05:57:15 -0000	1.4
+++ tests/term/dds1_2.trans_opt_exp	5 Dec 2003 05:47:31 -0000
@@ -1,2 +1,2 @@
 :- module dds1_2.
-:- pragma termination_info(dds1_2:permute((builtin.in), (builtin.out)), finite(0, [no, yes, no]), cannot_loop).
+:- pragma termination_info(dds1_2.permute((builtin.in), (builtin.out)), finite(0, [no, yes, no]), 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.4
diff -u -r1.4 dds3_13.trans_opt_exp
--- tests/term/dds3_13.trans_opt_exp	17 Jan 2003 05:57:15 -0000	1.4
+++ tests/term/dds3_13.trans_opt_exp	5 Dec 2003 05:47:45 -0000
@@ -1,2 +1,2 @@
 :- module dds3_13.
-:- pragma termination_info(dds3_13:duplicate((builtin.in), (builtin.out)), infinite, cannot_loop).
+:- pragma termination_info(dds3_13.duplicate((builtin.in), (builtin.out)), infinite, 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.4
diff -u -r1.4 dds3_14.trans_opt_exp
--- tests/term/dds3_14.trans_opt_exp	17 Jan 2003 05:57:15 -0000	1.4
+++ tests/term/dds3_14.trans_opt_exp	5 Dec 2003 05:48:24 -0000
@@ -1,2 +1,2 @@
 :- module dds3_14.
-:- pragma termination_info(dds3_14:sum((builtin.in), (builtin.in), (builtin.out)), infinite, cannot_loop).
+:- pragma termination_info(dds3_14.sum((builtin.in), (builtin.in), (builtin.out)), infinite, 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.4
diff -u -r1.4 dds3_15.trans_opt_exp
--- tests/term/dds3_15.trans_opt_exp	17 Jan 2003 05:57:16 -0000	1.4
+++ tests/term/dds3_15.trans_opt_exp	5 Dec 2003 05:48:36 -0000
@@ -1,2 +1,2 @@
 :- module dds3_15.
-:- pragma termination_info(dds3_15:merge((builtin.in), (builtin.in), (builtin.out)), finite(0, [yes, yes, no]), cannot_loop).
+:- pragma termination_info(dds3_15.merge((builtin.in), (builtin.in), (builtin.out)), finite(0, [yes, yes, no]), 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.4
diff -u -r1.4 dds3_17.trans_opt_exp
--- tests/term/dds3_17.trans_opt_exp	17 Jan 2003 05:57:16 -0000	1.4
+++ tests/term/dds3_17.trans_opt_exp	5 Dec 2003 05:48:56 -0000
@@ -1,3 +1,3 @@
 :- 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 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).
Index: tests/term/dds3_8.trans_opt_exp
===================================================================
RCS file: /home/mercury1/repository/tests/term/dds3_8.trans_opt_exp,v
retrieving revision 1.4
diff -u -r1.4 dds3_8.trans_opt_exp
--- tests/term/dds3_8.trans_opt_exp	17 Jan 2003 05:57:16 -0000	1.4
+++ tests/term/dds3_8.trans_opt_exp	5 Dec 2003 05:49:09 -0000
@@ -1,2 +1,2 @@
 :- module dds3_8.
-:- pragma termination_info(dds3_8:reverse((builtin.in), (builtin.out), (builtin.in)), finite(0, [no, yes, no, yes]), cannot_loop).
+:- pragma termination_info(dds3_8.reverse((builtin.in), (builtin.out), (builtin.in)), finite(0, [no, yes, no, yes]), cannot_loop).
Index: tests/term/existential_error1.m
===================================================================
RCS file: /home/mercury1/repository/tests/term/existential_error1.m,v
retrieving revision 1.1
diff -u -r1.1 existential_error1.m
--- tests/term/existential_error1.m	8 Oct 2003 05:12:40 -0000	1.1
+++ tests/term/existential_error1.m	5 Dec 2003 02:33:53 -0000
@@ -1,4 +1,4 @@
-% Regression test for term_util.m
+% Regression test for term_norm.m
 % Symptom: "Software Error: Unmatched lists in functor_norm_filter_args."
 % This was caused by the list of counted arguments in the weight table differing
 % from the list of arguments the termination analyser provided when it called
Index: tests/term/existential_error2.m
===================================================================
RCS file: /home/mercury1/repository/tests/term/existential_error2.m,v
retrieving revision 1.1
diff -u -r1.1 existential_error2.m
--- tests/term/existential_error2.m	8 Oct 2003 05:12:40 -0000	1.1
+++ tests/term/existential_error2.m	5 Dec 2003 02:34:16 -0000
@@ -1,4 +1,4 @@
-% Regression test for term_util.m
+% Regression test for term_norm.m
 % Symptom: "Software Error: Unmatched lists in functor_norm_filter_args."
 % (see existential_error1.m for a description of the cause)

Index: tests/term/existential_error3.m
===================================================================
RCS file: tests/term/existential_error3.m
diff -N tests/term/existential_error3.m
--- /dev/null	1 Jan 1970 00:00:00 -0000
+++ tests/term/existential_error3.m	5 Dec 2003 02:33:35 -0000
@@ -0,0 +1,24 @@
+% Regression test for term_norm.m
+% Symptom: "Software Error: Unmatched lists in functor_norm_filter_args."
+% (see existential_error1.m for the general cause of the problem).
+% In this particular case the mismatch in the number of arguments was
+% caused by the code generating the weight table not handling TypeClassInfos
+% correctly.
+
+:- module existential_error3.
+
+:- interface.
+
+:- type foo
+	---> 	some [A, B] foo(A, B) => baz(A, B)
+	;	bar.
+
+:- typeclass baz(A, B) where [].
+
+:- pred test(foo::in) is semidet.
+
+:- implementation.
+
+test(X) :- X = foo(_, _).
+
+:- end_module existential_error3.
Index: tests/term/existential_error3.trans_opt_exp
===================================================================
RCS file: tests/term/existential_error3.trans_opt_exp
diff -N tests/term/existential_error3.trans_opt_exp
--- /dev/null	1 Jan 1970 00:00:00 -0000
+++ tests/term/existential_error3.trans_opt_exp	5 Dec 2003 03:00:27 -0000
@@ -0,0 +1,2 @@
+:- module existential_error3.
+:- pragma termination_info(existential_error3.test((builtin.in)), finite(0, [no]), 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.4
diff -u -r1.4 pl1_1.trans_opt_exp
--- tests/term/pl1_1.trans_opt_exp	17 Jan 2003 05:57:16 -0000	1.4
+++ tests/term/pl1_1.trans_opt_exp	5 Dec 2003 05:49:29 -0000
@@ -1,3 +1,3 @@
 :- 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 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).
Index: tests/term/pl1_2.trans_opt_exp
===================================================================
RCS file: /home/mercury1/repository/tests/term/pl1_2.trans_opt_exp,v
retrieving revision 1.4
diff -u -r1.4 pl1_2.trans_opt_exp
--- tests/term/pl1_2.trans_opt_exp	17 Jan 2003 05:57:16 -0000	1.4
+++ tests/term/pl1_2.trans_opt_exp	5 Dec 2003 05:49:43 -0000
@@ -1,2 +1,2 @@
 :- module pl1_2.
-:- pragma termination_info(pl1_2:perm((builtin.in), (builtin.out)), finite(0, [no, yes, no]), cannot_loop).
+:- pragma termination_info(pl1_2.perm((builtin.in), (builtin.out)), finite(0, [no, yes, no]), 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.4
diff -u -r1.4 pl2_3_1.trans_opt_exp
--- tests/term/pl2_3_1.trans_opt_exp	17 Jan 2003 05:57:16 -0000	1.4
+++ tests/term/pl2_3_1.trans_opt_exp	5 Dec 2003 05:49:54 -0000
@@ -1,2 +1,2 @@
 :- module pl2_3_1.
-:- pragma termination_info(pl2_3_1:p((builtin.in), (builtin.out)), finite(0, [yes, no]), can_loop).
+:- pragma termination_info(pl2_3_1.p((builtin.in), (builtin.out)), finite(0, [yes, no]), 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.2
diff -u -r1.2 pl3_1_1.trans_opt_exp
--- tests/term/pl3_1_1.trans_opt_exp	20 May 1998 13:10:36 -0000	1.2
+++ tests/term/pl3_1_1.trans_opt_exp	5 Dec 2003 05:50:12 -0000
@@ -1,8 +1,8 @@
 :- module pl3_1_1.
-:- pragma termination_info((pl3_1_1:a), finite(0, []), can_loop).
-:- pragma termination_info((pl3_1_1:b), finite(0, []), can_loop).
-:- pragma termination_info((pl3_1_1:c), finite(0, []), can_loop).
-:- pragma termination_info((pl3_1_1:d), finite(0, []), can_loop).
-:- 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 termination_info((pl3_1_1.a), finite(0, []), can_loop).
+:- pragma termination_info((pl3_1_1.b), finite(0, []), can_loop).
+:- pragma termination_info((pl3_1_1.c), finite(0, []), can_loop).
+:- pragma termination_info((pl3_1_1.d), finite(0, []), can_loop).
+:- 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).
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.4
diff -u -r1.4 pl3_5_6.trans_opt_exp
--- tests/term/pl3_5_6.trans_opt_exp	17 Jan 2003 05:57:16 -0000	1.4
+++ tests/term/pl3_5_6.trans_opt_exp	5 Dec 2003 05:50:44 -0000
@@ -1,2 +1,2 @@
 :- module pl3_5_6.
-:- pragma termination_info(pl3_5_6:p((builtin.out)), infinite, can_loop).
+:- pragma termination_info(pl3_5_6.p((builtin.out)), infinite, 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.4
diff -u -r1.4 pl4_01.trans_opt_exp
--- tests/term/pl4_01.trans_opt_exp	17 Jan 2003 05:57:16 -0000	1.4
+++ tests/term/pl4_01.trans_opt_exp	5 Dec 2003 05:50:58 -0000
@@ -1,3 +1,3 @@
 :- 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 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).
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.4
diff -u -r1.4 pl4_4_3.trans_opt_exp
--- tests/term/pl4_4_3.trans_opt_exp	17 Jan 2003 05:57:16 -0000	1.4
+++ tests/term/pl4_4_3.trans_opt_exp	5 Dec 2003 05:51:24 -0000
@@ -1,2 +1,2 @@
 :- 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 termination_info(pl4_4_3.merge((builtin.in), (builtin.in), (builtin.out)), finite(0, [yes, yes, no]), 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.4
diff -u -r1.4 pl4_5_2.trans_opt_exp
--- tests/term/pl4_5_2.trans_opt_exp	17 Jan 2003 05:57:16 -0000	1.4
+++ tests/term/pl4_5_2.trans_opt_exp	5 Dec 2003 05:51:36 -0000
@@ -1,2 +1,2 @@
 :- module pl4_5_2.
-:- pragma termination_info(pl4_5_2:s((builtin.in), (builtin.out)), infinite, can_loop).
+:- pragma termination_info(pl4_5_2.s((builtin.in), (builtin.out)), infinite, 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.6
diff -u -r1.6 pl5_2_2.trans_opt_exp
--- tests/term/pl5_2_2.trans_opt_exp	17 Jan 2003 05:57:17 -0000	1.6
+++ tests/term/pl5_2_2.trans_opt_exp	5 Dec 2003 05:51:50 -0000
@@ -1,2 +1,2 @@
 :- module pl5_2_2.
-:- pragma termination_info(pl5_2_2:turing((builtin.in), (builtin.in), (builtin.in), (builtin.out)), infinite, can_loop).
+:- pragma termination_info(pl5_2_2.turing((builtin.in), (builtin.in), (builtin.in), (builtin.out)), infinite, 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.4
diff -u -r1.4 pl6_1_1.trans_opt_exp
--- tests/term/pl6_1_1.trans_opt_exp	17 Jan 2003 05:57:17 -0000	1.4
+++ tests/term/pl6_1_1.trans_opt_exp	5 Dec 2003 05:52:03 -0000
@@ -1,2 +1,2 @@
 :- module pl6_1_1.
-:- pragma termination_info(pl6_1_1:qsort((builtin.in), (builtin.out)), finite(0, [yes, no]), cannot_loop).
+:- pragma termination_info(pl6_1_1.qsort((builtin.in), (builtin.out)), finite(0, [yes, no]), 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.4
diff -u -r1.4 pl7_2_9.trans_opt_exp
--- tests/term/pl7_2_9.trans_opt_exp	17 Jan 2003 05:57:17 -0000	1.4
+++ tests/term/pl7_2_9.trans_opt_exp	5 Dec 2003 05:52:16 -0000
@@ -1,2 +1,2 @@
 :- module pl7_2_9.
-:- pragma termination_info(pl7_2_9:mult((builtin.in), (builtin.in), (builtin.out)), infinite, cannot_loop).
+:- pragma termination_info(pl7_2_9.mult((builtin.in), (builtin.in), (builtin.out)), infinite, 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.4
diff -u -r1.4 pl8_2_1.trans_opt_exp
--- tests/term/pl8_2_1.trans_opt_exp	17 Jan 2003 05:57:17 -0000	1.4
+++ tests/term/pl8_2_1.trans_opt_exp	5 Dec 2003 05:52:27 -0000
@@ -1,2 +1,2 @@
 :- module pl8_2_1.
-:- pragma termination_info(pl8_2_1:mergesort((builtin.in), (builtin.out)), finite(0, [yes, no]), can_loop).
+:- pragma termination_info(pl8_2_1.mergesort((builtin.in), (builtin.out)), finite(0, [yes, no]), can_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.4
diff -u -r1.4 pl8_3_1.trans_opt_exp
--- tests/term/pl8_3_1.trans_opt_exp	17 Jan 2003 05:57:17 -0000	1.4
+++ tests/term/pl8_3_1.trans_opt_exp	5 Dec 2003 05:52:35 -0000
@@ -1,2 +1,2 @@
 :- module pl8_3_1.
-:- pragma termination_info(pl8_3_1:xminsort((builtin.in), (builtin.out)), infinite, can_loop).
+:- pragma termination_info(pl8_3_1.xminsort((builtin.in), (builtin.out)), infinite, can_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.4
diff -u -r1.4 pl8_4_1.trans_opt_exp
--- tests/term/pl8_4_1.trans_opt_exp	17 Jan 2003 05:57:17 -0000	1.4
+++ tests/term/pl8_4_1.trans_opt_exp	5 Dec 2003 05:52:47 -0000
@@ -1,3 +1,3 @@
 :- 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 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).
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.4
diff -u -r1.4 pl8_4_2.trans_opt_exp
--- tests/term/pl8_4_2.trans_opt_exp	17 Jan 2003 05:57:17 -0000	1.4
+++ tests/term/pl8_4_2.trans_opt_exp	5 Dec 2003 05:52:56 -0000
@@ -1,2 +1,2 @@
 :- module pl8_4_2.
-:- pragma termination_info(pl8_4_2:e((builtin.in), (builtin.out)), finite(-1, [yes, no]), cannot_loop).
+:- pragma termination_info(pl8_4_2.e((builtin.in), (builtin.out)), finite(-1, [yes, no]), cannot_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