mirror of
https://github.com/Mercury-Language/mercury.git
synced 2026-04-15 17:33:38 +00:00
42 lines
1.2 KiB
Mathematica
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).
|