mirror of
https://github.com/Mercury-Language/mercury.git
synced 2026-04-22 21:03:53 +00:00
Estimated hours taken: 1 Fix a bug in liveness that causes a sanity check to fail for accurate gc. compiler/liveness.m: Handle if-then-else correctly for .agc grades, it wasn't handling polymorphic type variables correctly. tests/valid/Mmake: tests/valid/agc_ite.m: Add a test case for if-then-else - previously the compiler aborted on this test case.
43 lines
881 B
Mathematica
43 lines
881 B
Mathematica
%
|
|
% Regression test.
|
|
%
|
|
% Name: agc_ite.m
|
|
%
|
|
% Description of bug:
|
|
% The liveness of polymorphic type variables for accurate gc
|
|
% wasn't being computed correctly in the case of if-then-else.
|
|
%
|
|
% Symptom(s) of bug:
|
|
% A sanity check in liveness.m is failed.
|
|
%
|
|
% Software error: branches of if-then-else disagree on liveness
|
|
% Then: HeadVar__3 TypeInfo_for_Y
|
|
% Else: HeadVar__3 TypeInfo_for_X TypeInfo_for_Y
|
|
%
|
|
%
|
|
% Date bug existed: 19-June-1997
|
|
%
|
|
% Author: trd
|
|
|
|
:- module agc_ite.
|
|
|
|
:- interface.
|
|
|
|
:- import_module list.
|
|
|
|
:- pred agc_ite__filter_map(pred(X, Y), list(X), list(Y)).
|
|
:- mode agc_ite__filter_map(pred(in, out) is semidet, in, out) is det.
|
|
|
|
:- implementation.
|
|
|
|
agc_ite__filter_map(_, [], []).
|
|
agc_ite__filter_map(Pred, [Head0|Tail0], List) :-
|
|
( call(Pred, Head0, Head) ->
|
|
List = [Head|List1]
|
|
;
|
|
List = List1
|
|
),
|
|
agc_ite__filter_map(Pred, Tail0, List1).
|
|
|
|
|