[m-rev.] diff: fix smart recompilation bug

Simon Taylor stayl at cs.mu.OZ.AU
Tue Jul 30 02:28:52 AEST 2002


Estimated hours taken: 1.5
Branches: main

Fix a bug which caused a compiler abort when compiling
make_hlds.m with `--smart-recompilation'.

compiler/recompilation.m:
	Don't attempt to record builtin items as used.
	The bug was caused by attempting to record tuple
	types as used when generating the unification
	predicate for them.

tests/valid/Mmakefile:
tests/valid/tuple_eqv.m:
	Test case.

Index: compiler/recompilation.m
===================================================================
RCS file: /home/mercury1/repository/mercury/compiler/recompilation.m,v
retrieving revision 1.5
diff -u -u -r1.5 recompilation.m
--- compiler/recompilation.m	20 Mar 2002 12:37:17 -0000	1.5
+++ compiler/recompilation.m	29 Jul 2002 13:05:56 -0000
@@ -364,6 +364,17 @@
 	).
 
 recompilation__record_used_item(ItemType, Id, QualifiedId) -->
+    (
+    	% Don't record builtin items (QualifiedId may be unqualified
+	% for predicates, functions and functors because they aren't 
+	% qualified until after typechecking).
+	{ ItemType \= predicate },
+	{ ItemType \= function },
+	{ ItemType \= functor },
+    	{ QualifiedId = unqualified(_) - _ }
+    ->
+	[]	
+    ;
 	ItemSet0 =^ used_items,
 	{ IdSet0 = extract_ids(ItemSet0, ItemType) },
 	{ QualifiedId = QualifiedName - Arity },
@@ -386,7 +397,8 @@
 			MatchingNames, IdSet) },
 		{ ItemSet = update_ids(ItemSet0, ItemType, IdSet) },
 		^ used_items := ItemSet
-	).
+	)
+    ).
 
 recompilation__record_expanded_items(Item, ExpandedItems, Info0, Info) :-
 	( set__empty(ExpandedItems) ->
Index: tests/valid/Mmakefile
===================================================================
RCS file: /home/mercury1/repository/tests/valid/Mmakefile,v
retrieving revision 1.109
diff -u -u -r1.109 Mmakefile
--- tests/valid/Mmakefile	23 Jul 2002 13:34:03 -0000	1.109
+++ tests/valid/Mmakefile	29 Jul 2002 16:08:18 -0000
@@ -165,6 +165,7 @@
 	transitive_instance.m \
 	tricky_assert2.m \
 	tricky_ite.m \
+	tuple_eqv.m \
 	two_pragma_c_codes.m \
 	two_way_unif.m \
 	typeclass_inlining_bug.m \
@@ -321,6 +322,7 @@
 MCFLAGS-simplify_bug		= -O-1
 MCFLAGS-simplify_bug2		= -O3
 MCFLAGS-spurious_purity_warning	= --halt-at-warn
+MCFLAGS-tuple_eqv		= --smart-recompilation
 MCFLAGS-two_way_unif		= -O-1
 MCFLAGS-type_inf_ambig_test	= --infer-all
 MCFLAGS-typeclass_det_warning	= --halt-at-warn
Index: tests/valid/tuple_eqv.m
===================================================================
RCS file: tests/valid/tuple_eqv.m
diff -N tests/valid/tuple_eqv.m
--- /dev/null	1 Jan 1970 00:00:00 -0000
+++ tests/valid/tuple_eqv.m	29 Jul 2002 16:07:26 -0000
@@ -0,0 +1,6 @@
+:- module tuple_eqv.
+
+:- interface.
+
+:- type t == {int, int}.
+
--------------------------------------------------------------------------
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