[m-dev.] trivial diff: fix goal wrapping for record syntax
Simon Taylor
stayl at cs.mu.OZ.AU
Fri Jan 5 17:58:54 AEDT 2001
> On 04-Jan-2001, Peter Ross <peter.ross at miscrit.be> wrote:
> > On Thu, Jan 04, 2001 at 04:57:05PM +1100, Simon Taylor wrote:
> > >
> > > compiler/make_hlds.m:
> > > Don't wrap the goals added by the compiler for a record syntax
> > > expression in a `some' to make mode analysis treat them as an atomic
> > > goal, because that is not consistent with how other goals are handled.
> >
> > I am curious as to why this is a problem.
>
> Me too. If you're committing this on the release branch,
> it must be because it fixes a bug (I hope ;-), and so
> I'd like to see a regression test for the bug that it fixes.
Estimated hours taken: 0.25
tests/valid/Mmakefile:
tests/valid/record_syntax_bug_3.m:
Add a test case for my recent bug fix for record syntax.
Index: Mmakefile
===================================================================
RCS file: /home/mercury1/repository/tests/valid/Mmakefile,v
retrieving revision 1.80
diff -u -u -r1.80 Mmakefile
--- Mmakefile 2000/12/06 06:05:58 1.80
+++ Mmakefile 2001/01/05 06:34:03
@@ -124,6 +124,7 @@
quantifier_warning.m \
record_syntax_bug.m \
record_syntax_bug_2.m \
+ record_syntax_bug_3.m \
recursive_no_tag_type.m \
same_length_2.m \
semidet_disj.m \
Index: record_syntax_bug_3.m
===================================================================
RCS file: record_syntax_bug_3.m
diff -N record_syntax_bug_3.m
--- /dev/null Fri Jan 5 17:17:26 2001
+++ record_syntax_bug_3.m Fri Jan 5 17:41:18 2001
@@ -0,0 +1,41 @@
+% The compiler of 4/1/2001 reported a mode error for this test
+% case because it did not allow reordering of goals into the middle
+% of a field update expression.
+:- module record_syntax_bug_3.
+
+:- interface.
+
+:- type t1.
+
+:- func record_bug(t1) = t1.
+
+:- implementation.
+
+:- import_module int.
+
+:- type t1
+ ---> t1(t1_f1 :: int, t1_f2 :: t2).
+
+:- type t2
+ ---> t2(t2_f1 :: int).
+
+record_bug(T0) = T :-
+ T = T0 ^ field1(X) ^ field2(Y) := 3,
+ Y = X + 1.
+
+:- func field1(int::out, t1::in) = (t2::out) is det.
+
+field1(T ^ t1_f1, T) = T ^ t1_f2.
+
+:- func 'field1 :='(int, t1, t2) = t1.
+
+'field1 :='(_, T, T2) = T ^ t1_f2 := T2.
+
+:- func field2(int, t2) = int.
+
+field2(Int, T2) = T2 ^ t2_f1 + Int.
+
+:- func 'field2 :='(int, t2, int) = t2.
+
+'field2 :='(Int, T2, Value) = T2 ^ t2_f1 := Value - Int.
+
--------------------------------------------------------------------------
mercury-developers mailing list
Post messages to: mercury-developers at cs.mu.oz.au
Administrative Queries: owner-mercury-developers at cs.mu.oz.au
Subscriptions: mercury-developers-request at cs.mu.oz.au
--------------------------------------------------------------------------
More information about the developers
mailing list