Files
mercury/tests/valid/constraint_prop_bug.m
Julien Fischer f3a34e4651 Replace uses of __ as a module qualifier.
samples/muz.zbstract.m:
tests/*/*.m:
    As above.
2022-04-14 20:25:10 +10:00

64 lines
1.6 KiB
Mathematica

%---------------------------------------------------------------------------%
% vim: ts=4 sw=4 et ft=mercury
%---------------------------------------------------------------------------%
%
% Compiling the following with rotd-2005-05-23 with
% -O0 --common-struct --local-constraint-propagation
% causes the following assertion failure:
%
% Uncaught Mercury exception:
% Software Error: nondet model in det/semidet context
%
% NOTE: this is a regression, it didn't occur with rotd-2005-05-17 and before.
:- module constraint_prop_bug.
:- interface.
:- import_module list.
:- import_module pair.
:- type hlds_goal == pair(hlds_goal_expr, hlds_goal_info).
:- type hlds_goal_info ---> hlds_goal_info.
:- type hlds_goal_expr ---> hlds_goal_expr.
:- type proc_info ---> proc_info.
:- pred copy_clauses_to_proc(list(hlds_goal)::in, proc_info::out) is det.
:- implementation.
:- type purity
---> pure
; not_pure.
copy_clauses_to_proc(GoalList, Proc) :-
GoalInfo0 = hlds_goal_info,
( if
list.member(_ - SubGoalInfo, GoalList),
not goal_info_is_pure(SubGoalInfo)
then
list.map(get_purity, GoalList, _PurityList),
GoalInfo = GoalInfo0
else
GoalInfo = GoalInfo0
),
Goal = hlds_goal_expr - GoalInfo,
proc_info_set_body(Goal, Proc).
:- pred proc_info_set_body(hlds_goal::in, proc_info::out) is det.
proc_info_set_body(_, proc_info).
:- pred get_purity(hlds_goal::in, purity::out) is det.
get_purity(_, pure).
:- pred goal_info_is_pure(hlds_goal_info::in) is semidet.
goal_info_is_pure(hlds_goal_info) :- semidet_fail.
:- func worst_purity(purity, purity) = purity.
worst_purity(_, _) = pure.