%---------------------------------------------------------------------------% % vim: ts=4 sw=4 et ft=mercury %---------------------------------------------------------------------------% % % Regression test for a case where cse_detection.m, det_analysis.m % and simplify.m were not updating the instmap before processing % a lambda expression, causing an abort in determinism analysis. :- module lambda_instmap_bug_1. :- interface. :- import_module list. :- import_module set. :- import_module pair. :- type instr == pair(instruction, string). :- type instruction ---> clear(int) ; drop(int) ; join(int, int, int). :- pred detect_streams(set(int)::in, list(instr)::in, list(instr)::out) is det. :- implementation. detect_streams(Streams, Instrs0, Instrs) :- % Don't attempt to clear or drop streams. IsNotStreamClear = ( pred(Instr::in) is semidet :- not ( ( Instr = clear(Rel) - _ ; Instr = drop(Rel) - _ ), set.member(Rel, Streams) ) ), list.filter(IsNotStreamClear, Instrs0, Instrs).