mirror of
https://github.com/Mercury-Language/mercury.git
synced 2026-04-19 11:23:46 +00:00
56 lines
1.4 KiB
Mathematica
56 lines
1.4 KiB
Mathematica
%---------------------------------------------------------------------------%
|
|
% vim: ts=4 sw=4 et ft=mercury
|
|
%---------------------------------------------------------------------------%
|
|
%
|
|
% A construction of a direct argument functor with a free argument was
|
|
% completely ignored. This test case caused a compiler abort during LLDS
|
|
% code generation.
|
|
%
|
|
|
|
:- module direct_arg_partial_inst.
|
|
:- interface.
|
|
|
|
:- import_module io.
|
|
|
|
:- pred main(io::di, io::uo) is det.
|
|
|
|
%---------------------------------------------------------------------------%
|
|
%---------------------------------------------------------------------------%
|
|
|
|
:- implementation.
|
|
|
|
:- import_module list.
|
|
|
|
:- type fruit
|
|
---> lemon(struct) % direct arg functor
|
|
; apple(struct) % direct arg functor
|
|
; orange(string).
|
|
|
|
:- type struct
|
|
---> struct(int, int, int, int, int).
|
|
|
|
:- pred foo(list(fruit)::in, string::out) is det.
|
|
|
|
foo(Xs, R) :-
|
|
( if
|
|
% X was not recorded in the var_state_map.
|
|
X = apple(_),
|
|
% Compiler tries to flush X to the stack.
|
|
list.member(X, Xs)
|
|
then
|
|
R = "found"
|
|
else
|
|
R = "not found"
|
|
).
|
|
|
|
main(!IO) :-
|
|
ListA = [apple(struct(1, 2, 3, 4, 5))],
|
|
foo(ListA, ResultA),
|
|
io.write_string(ResultA, !IO),
|
|
io.nl(!IO),
|
|
|
|
ListB = [lemon(struct(1, 2, 3, 4, 5))],
|
|
foo(ListB, ResultB),
|
|
io.write_string(ResultB, !IO),
|
|
io.nl(!IO).
|