mirror of
https://github.com/Mercury-Language/mercury.git
synced 2026-04-23 05:13:48 +00:00
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.
29 lines
480 B
Mathematica
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.
|
|
|