Files
mercury/tests/valid/hawkins_switch_bug.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

50 lines
1.3 KiB
Mathematica

%---------------------------------------------------------------------------%
% vim: ts=4 sw=4 et ft=mercury
%---------------------------------------------------------------------------%
%
% The predicate foo caused the following assertion failure in
% rotd-2006-08-03:
%
% Uncaught Mercury exception:
% Software Error: equiv_type_hlds.m: Unexpected: replace_in_goal_expr:
% info not found
%
% The problem was that when switch detection copied the bodies of the
% arms for Kind = b and Kind = c, it requantified the goals. The
% requantification introduced some new variables but the entries in the
% RTTI varmaps were not updated at the same time. The fix was to make
% sure that when quantification might introduce new variables, the RTTI
% varmaps are updated.
%
% The test case was supplied by Peter Hawkins.
:- module hawkins_switch_bug.
:- interface.
:- import_module int.
:- import_module map.
:- import_module set.
:- type kind
---> a
; b
; c.
:- pred foo(kind::in, map(int, set(int))::in) is det.
:- implementation.
foo(Kind, B) :-
(
Kind = a
;
( Kind = b
; Kind = c
),
( if map.search(B, 0, PDeps0) then
_PDeps = PDeps0
else
_PDeps = set.init : set(int)
)
).