%---------------------------------------------------------------------------%
% vim: ts=4 sw=4 et ft=mercury
%---------------------------------------------------------------------------%
%
% 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.
