Files
mercury/tests/valid/func_in_head.m
Zoltan Somogyi c03b11ca48 Update the style of more test cases.
And updated expected outputs for changed line numbers.
2021-07-27 19:29:21 +10:00

42 lines
1.2 KiB
Mathematica

%---------------------------------------------------------------------------%
% vim: ts=4 sw=4 et ft=mercury
%---------------------------------------------------------------------------%
%
% This is a regression test for a limitation of switch detection and
% common subexpression elimination. The limitation was that when they looked
% for deconstruction unifications, they stopped looking when encountering
% a call, even if the call came from the clause head.
%
% In the test predicate below, they failed to recognize the common
% deconstruction of Pair with - and the different deconstructions of List
% with [] and [ | ], leading determinism analysis to conclude that test may
% have more than one solution, leading to a bogus determinism error.
:- module func_in_head.
:- interface.
:- import_module io.
:- pred main(io::di, io::uo) is det.
:- implementation.
:- import_module list.
:- import_module pair.
:- import_module set.
main(!IO) :-
test([1, 2] - "dummy", Set),
io.write_list(set.to_sorted_list(Set), ", ", io.write_int, !IO).
:- pred test(pair(list(T), U)::in, set(T)::out) is det.
test(Pair, set.init) :-
Pair = List - _,
List = [].
test(Pair, Set) :-
Pair = List - _,
List = [_ | _],
set.list_to_set(List, Set).