Files
mercury/tests/hard_coded/cc_multi_bug.m
Fergus Henderson d6b09da3aa Fix a bug which caused an internal compiler error for disjunctions
Estimated hours taken: 6

Fix a bug which caused an internal compiler error for disjunctions
in single-solution contexts with e.g. the first two disjuncts `det'
and third disjunct `cc_multi'.

compiler/det_analysis.m:
	In det_infer_disj, replace `at_most_many' with `at_most_many_cc'
	if in a single-solution context.  This is also done by det_infer_goal,
	but it needs to be done here too, to avoid calling error/1 in
	det_disjunction_maxsoln.

tests/hard_coded/Mmakefile:
tests/hard_coded/cc_multi_bug.m:
tests/hard_coded/cc_multi_bug.exp:
	Test case for the above-mentioned bug.
1998-10-23 18:40:43 +00:00

29 lines
480 B
Mathematica

:- module cc_multi_bug.
:- interface.
:- import_module io.
:- pred main(io__state::di, io__state::uo) is cc_multi.
:- implementation.
:- import_module io.
:- type nat ---> zero ; s(nat).
:- pred plus(nat,nat,nat).
:- mode plus(out,out,in) is multi.
:- mode plus(out,out,in) is cc_multi.
plus(zero,zero,zero).
plus(zero,s(N),s(N)).
plus(s(N),zero,s(N)).
plus(s(N1),s(N2),s(N3)):-
plus(N1,s(N2),N3).
main -->
{plus(N1,N2,s(zero))},
print(N1), nl,
print(N2), nl.