From post at volker-wysk.de Tue Dec 2 05:14:26 2025 From: post at volker-wysk.de (Volker Wysk) Date: Mon, 01 Dec 2025 19:14:26 +0100 Subject: [m-rev.] Compiler bug found Message-ID: <732d735b3b5ffefb9320a050f4c364f1b60688d2.camel@volker-wysk.de> Hi I get this when compiling: Uncaught Mercury exception: Software Error: predicate `check_hlds.simplify.simplify_goal.simplify_goal_expr'/10: Unexpected: try_goal I've made a small module ("bug") that demonstrates the bug and included all dependencies. See attachment. Call "mmc --make bug" to compile and trigger the bug. Volker -------------- next part -------------- A non-text attachment was scrubbed... Name: bug.tar.gz Type: application/x-compressed-tar Size: 20604 bytes Desc: not available URL: From jfischer at opturion.com Tue Dec 2 16:43:33 2025 From: jfischer at opturion.com (Julien Fischer) Date: Tue, 2 Dec 2025 16:43:33 +1100 Subject: [m-rev.] diff: add cc_multi versions of higher-order map predicates Message-ID: Aside from the NEWS entries, this doesn't require review. ------------------------------ Add cc_multi versions of higher-order map predicates. library/map.m: library/tree234.m: Add cc_multi versions of some of the higher-order predicates in these modules. Re-order of mode declarations where they are inconsistent with our usual ordering. NEWS.md: Announce the above additions. Julien. diff --git a/NEWS.md b/NEWS.md index 2825bb46c..777c9bbac 100644 --- a/NEWS.md +++ b/NEWS.md @@ -670,6 +670,9 @@ Changes to the Mercury standard library - pred `compose_maps/3` - pred `sorted_keys_match/2` +* We have added `cc_multi` versions of many of the higher-order predicates in + this module + ### Changes to the `mercury_term_lexer` module * The representation type of the tokens returned has been tightened. @@ -1310,6 +1313,9 @@ Changes to the Mercury standard library - func `tree234_to_doc/1` (replacement: `pretty_printer.tree234_to_doc/1`) +* We have added `cc_multi` versions of many of the higher-order predicates in + this module + ### Changes to the `tree_bitset` module * The following obsolete predicate has been removed: diff --git a/library/map.m b/library/map.m index ed291a15b..839c4a4f5 100644 --- a/library/map.m +++ b/library/map.m @@ -1100,6 +1100,12 @@ semidet), mdi, muo) is semidet. :- mode map_foldl(in(pred(in, in, out, di, uo) is semidet), in, out, di, uo) is semidet. +:- mode map_foldl(in(pred(in, in, out, in, out) is cc_multi), in, out, in, out) + is cc_multi. +:- mode map_foldl(in(pred(in, in, out, mdi, muo) is cc_multi), in, out, + mdi, muo) is cc_multi. +:- mode map_foldl(in(pred(in, in, out, di, uo) is cc_multi), in, out, di, uo) + is cc_multi. % As map_foldl, but with two accumulators. % @@ -1119,6 +1125,12 @@ semidet), in, out, in, out, mdi, muo) is semidet. :- mode map_foldl2(in(pred(in, in, out, in, out, di, uo) is semidet), in, out, in, out, di, uo) is semidet. +:- mode map_foldl2(in(pred(in, in, out, in, out, in, out) is cc_multi), + in, out, in, out, in, out) is cc_multi. +:- mode map_foldl2(in(pred(in, in, out, in, out, mdi, muo) is cc_multi), + in, out, in, out, mdi, muo) is cc_multi. +:- mode map_foldl2(in(pred(in, in, out, in, out, di, uo) is cc_multi), + in, out, in, out, di, uo) is cc_multi. % As map_foldl, but with three accumulators. % @@ -1148,6 +1160,15 @@ semidet), :- mode map_foldl3( in(pred(in, in, out, in, out, in, out, di, uo) is semidet), in, out, in, out, in, out, di, uo) is semidet. +:- mode map_foldl3( + in(pred(in, in, out, in, out, in, out, in, out) is cc_multi), + in, out, in, out, in, out, in, out) is cc_multi. +:- mode map_foldl3( + in(pred(in, in, out, in, out, in, out, mdi, muo) is cc_multi), + in, out, in, out, in, out, mdi, muo) is cc_multi. +:- mode map_foldl3( + in(pred(in, in, out, di, uo, di, uo, di, uo) is cc_multi), + in, out, di, uo, di, uo, di, uo) is cc_multi. % As map_foldl, but with four accumulators. % @@ -1177,6 +1198,15 @@ semidet), :- mode map_foldl4(in(pred(in, in, out, in, out, in, out, in, out, di, uo) is semidet), in, out, in, out, in, out, in, out, di, uo) is semidet. +:- mode map_foldl4(in(pred(in, in, out, in, out, in, out, in, out, in, out) + is cc_multi), + in, out, in, out, in, out, in, out, in, out) is cc_multi. +:- mode map_foldl4(in(pred(in, in, out, in, out, in, out, in, out, mdi, muo) + is cc_multi), + in, out, in, out, in, out, in, out, mdi, muo) is cc_multi. +:- mode map_foldl4(in(pred(in, in, out, in, out, di, uo, di, uo, di, uo) + is cc_multi), + in, out, in, out, di, uo, di, uo, di, uo) is cc_multi. %---------------------% @@ -1187,88 +1217,116 @@ semidet), % take a key argument. % :- pred map_values_foldl(pred(V, W, A, A), map(K, V), map(K, W), A, A). -:- mode map_values_foldl(in(pred(in, out, di, uo) is det), - in, out, di, uo) is det. :- mode map_values_foldl(in(pred(in, out, in, out) is det), in, out, in, out) is det. +:- mode map_values_foldl(in(pred(in, out, di, uo) is det), + in, out, di, uo) is det. :- mode map_values_foldl(in(pred(in, out, in, out) is semidet), in, out, in, out) is semidet. +:- mode map_values_foldl(in(pred(in, out, in, out) is cc_multi), + in, out, in, out) is cc_multi. +:- mode map_values_foldl(in(pred(in, out, di, uo) is cc_multi), + in, out, di, uo) is cc_multi. % As map_foldl, but without passing the key to the predicate. % :- pred map_values_only_foldl(pred(V, W, A, A), map(K, V), map(K, W), A, A). -:- mode map_values_only_foldl(in(pred(in, out, di, uo) is det), - in, out, di, uo) is det. :- mode map_values_only_foldl(in(pred(in, out, in, out) is det), in, out, in, out) is det. +:- mode map_values_only_foldl(in(pred(in, out, di, uo) is det), + in, out, di, uo) is det. :- mode map_values_only_foldl(in(pred(in, out, in, out) is semidet), in, out, in, out) is semidet. +:- mode map_values_only_foldl(in(pred(in, out, in, out) is cc_multi), + in, out, in, out) is cc_multi. +:- mode map_values_only_foldl(in(pred(in, out, di, uo) is cc_multi), + in, out, di, uo) is cc_multi. % As map_values_only_foldl, but with two accumulators. % :- pred map_values_foldl2(pred(V, W, A, A, B, B), map(K, V), map(K, W), A, A, B, B). -:- mode map_values_foldl2(in(pred(in, out, di, uo, di, uo) is det), - in, out, di, uo, di, uo) is det. -:- mode map_values_foldl2(in(pred(in, out, in, out, di, uo) is det), - in, out, in, out, di, uo) is det. :- mode map_values_foldl2(in(pred(in, out, in, out, in, out) is det), in, out, in, out, in, out) is det. +:- mode map_values_foldl2(in(pred(in, out, in, out, di, uo) is det), + in, out, in, out, di, uo) is det. +:- mode map_values_foldl2(in(pred(in, out, di, uo, di, uo) is det), + in, out, di, uo, di, uo) is det. :- mode map_values_foldl2(in(pred(in, out, in, out, in, out) is semidet), in, out, in, out, in, out) is semidet. +:- mode map_values_foldl2(in(pred(in, out, in, out, in, out) is cc_multi), + in, out, in, out, in, out) is cc_multi. +:- mode map_values_foldl2(in(pred(in, out, in, out, di, uo) is cc_multi), + in, out, in, out, di, uo) is cc_multi. % As map_values_only_foldl, but with two accumulators. % :- pred map_values_only_foldl2(pred(V, W, A, A, B, B), map(K, V), map(K, W), A, A, B, B). -:- mode map_values_only_foldl2(in(pred(in, out, di, uo, di, uo) is det), - in, out, di, uo, di, uo) is det. -:- mode map_values_only_foldl2(in(pred(in, out, in, out, di, uo) is det), - in, out, in, out, di, uo) is det. :- mode map_values_only_foldl2(in(pred(in, out, in, out, in, out) is det), in, out, in, out, in, out) is det. +:- mode map_values_only_foldl2(in(pred(in, out, in, out, di, uo) is det), + in, out, in, out, di, uo) is det. +:- mode map_values_only_foldl2(in(pred(in, out, di, uo, di, uo) is det), + in, out, di, uo, di, uo) is det. :- mode map_values_only_foldl2(in(pred(in, out, in, out, in, out) is semidet), in, out, in, out, in, out) is semidet. +:- mode map_values_only_foldl2(in(pred(in, out, in, out, in, out) is cc_multi), + in, out, in, out, in, out) is cc_multi. +:- mode map_values_only_foldl2(in(pred(in, out, in, out, di, uo) is cc_multi), + in, out, in, out, di, uo) is cc_multi. % As map_values_only_foldl, but with three accumulators. % :- pred map_values_foldl3(pred(V, W, A, A, B, B, C, C), map(K, V), map(K, W), A, A, B, B, C, C). +:- mode map_values_foldl3( + in(pred(in, out, in, out, in, out, in, out) is det), + in, out, in, out, in, out, in, out) is det. +:- mode map_values_foldl3( + in(pred(in, out, in, out, in, out, di, uo) is det), + in, out, in, out, in, out, di, uo) is det. :- mode map_values_foldl3( in(pred(in, out, di, uo, di, uo, di, uo) is det), in, out, di, uo, di, uo, di, uo) is det. :- mode map_values_foldl3( in(pred(in, out, in, out, di, uo, di, uo) is det), in, out, in, out, di, uo, di, uo) is det. -:- mode map_values_foldl3( - in(pred(in, out, in, out, in, out, di, uo) is det), - in, out, in, out, in, out, di, uo) is det. -:- mode map_values_foldl3( - in(pred(in, out, in, out, in, out, in, out) is det), - in, out, in, out, in, out, in, out) is det. :- mode map_values_foldl3( in(pred(in, out, in, out, in, out, in, out) is semidet), in, out, in, out, in, out, in, out) is semidet. +:- mode map_values_foldl3( + in(pred(in, out, in, out, in, out, in, out) is cc_multi), + in, out, in, out, in, out, in, out) is cc_multi. +:- mode map_values_foldl3( + in(pred(in, out, in, out, in, out, di, uo) is cc_multi), + in, out, in, out, in, out, di, uo) is cc_multi. % As map_values_only_foldl, but with three accumulators. % :- pred map_values_only_foldl3(pred(V, W, A, A, B, B, C, C), map(K, V), map(K, W), A, A, B, B, C, C). :- mode map_values_only_foldl3( - in(pred(in, out, di, uo, di, uo, di, uo) is det), - in, out, di, uo, di, uo, di, uo) is det. -:- mode map_values_only_foldl3( - in(pred(in, out, in, out, di, uo, di, uo) is det), - in, out, in, out, di, uo, di, uo) is det. + in(pred(in, out, in, out, in, out, in, out) is det), + in, out, in, out, in, out, in, out) is det. :- mode map_values_only_foldl3( in(pred(in, out, in, out, in, out, di, uo) is det), in, out, in, out, in, out, di, uo) is det. :- mode map_values_only_foldl3( - in(pred(in, out, in, out, in, out, in, out) is det), - in, out, in, out, in, out, in, out) is det. + in(pred(in, out, in, out, di, uo, di, uo) is det), + in, out, in, out, di, uo, di, uo) is det. +:- mode map_values_only_foldl3( + in(pred(in, out, di, uo, di, uo, di, uo) is det), + in, out, di, uo, di, uo, di, uo) is det. :- mode map_values_only_foldl3( in(pred(in, out, in, out, in, out, in, out) is semidet), in, out, in, out, in, out, in, out) is semidet. +:- mode map_values_only_foldl3( + in(pred(in, out, in, out, in, out, in, out) is cc_multi), + in, out, in, out, in, out, in, out) is cc_multi. +:- mode map_values_only_foldl3( + in(pred(in, out, in, out, in, out, di, uo) is cc_multi), + in, out, in, out, in, out, di, uo) is cc_multi. %---------------------------------------------------------------------------% %---------------------------------------------------------------------------% diff --git a/library/tree234.m b/library/tree234.m index 14edab059..10d28df26 100644 --- a/library/tree234.m +++ b/library/tree234.m @@ -624,6 +624,12 @@ in, out, mdi, muo) is semidet. :- mode map_foldl(in(pred(in, in, out, di, uo) is semidet), in, out, di, uo) is semidet. +:- mode map_foldl(in(pred(in, in, out, in, out) is cc_multi), + in, out, in, out) is cc_multi. +:- mode map_foldl(in(pred(in, in, out, mdi, muo) is cc_multi), + in, out, mdi, muo) is cc_multi. +:- mode map_foldl(in(pred(in, in, out, di, uo) is cc_multi), + in, out, di, uo) is cc_multi. :- pred map_foldl2(pred(K, V, W, A, A, B, B), tree234(K, V), tree234(K, W), A, A, B, B). @@ -641,6 +647,12 @@ in, out, in, out, mdi, muo) is semidet. :- mode map_foldl2(in(pred(in, in, out, in, out, di, uo) is semidet), in, out, in, out, di, uo) is semidet. +:- mode map_foldl2(in(pred(in, in, out, in, out, in, out) is cc_multi), + in, out, in, out, in, out) is cc_multi. +:- mode map_foldl2(in(pred(in, in, out, in, out, mdi, muo) is cc_multi), + in, out, in, out, mdi, muo) is cc_multi. +:- mode map_foldl2(in(pred(in, in, out, in, out, di, uo) is cc_multi), + in, out, in, out, di, uo) is cc_multi. :- pred map_foldl3(pred(K, V, W, A, A, B, B, C, C), tree234(K, V), tree234(K, W), A, A, B, B, C, C). @@ -663,6 +675,12 @@ :- mode map_foldl3(in(pred(in, in, out, in, out, in, out, di, uo) is semidet), in, out, in, out, in, out, di, uo) is semidet. +:- mode map_foldl3(in(pred(in, in, out, in, out, in, out, in, out) is cc_multi), + in, out, in, out, in, out, in, out) is cc_multi. +:- mode map_foldl3(in(pred(in, in, out, in, out, in, out, mdi, muo) is cc_multi), + in, out, in, out, in, out, mdi, muo) is cc_multi. +:- mode map_foldl3(in(pred(in, in, out, di, uo, di, uo, di, uo) is cc_multi), + in, out, di, uo, di, uo, di, uo) is cc_multi. :- pred map_foldl4(pred(K, V, W, A, A, B, B, C, C, D, D), tree234(K, V), tree234(K, W), A, A, B, B, C, C, D, D). @@ -690,82 +708,119 @@ :- mode map_foldl4( in(pred(in, in, out, in, out, in, out, in, out, di, uo) is semidet), in, out, in, out, in, out, in, out, di, uo) is semidet. +:- mode map_foldl4( + in(pred(in, in, out, in, out, in, out, in, out, in, out) is cc_multi), + in, out, in, out, in, out, in, out, in, out) is cc_multi. +:- mode map_foldl4( + in(pred(in, in, out, in, out, in, out, in, out, mdi, muo) is cc_multi), + in, out, in, out, in, out, in, out, mdi, muo) is cc_multi. +:- mode map_foldl4( + in(pred(in, in, out, in, out, di, uo, di, uo, di, uo) is cc_multi), + in, out, in, out, di, uo, di, uo, di, uo) is cc_multi. :- pred map_values_foldl(pred(V, W, A, A), tree234(K, V), tree234(K, W), A, A). -:- mode map_values_foldl(in(pred(in, out, di, uo) is det), - in, out, di, uo) is det. :- mode map_values_foldl(in(pred(in, out, in, out) is det), in, out, in, out) is det. +:- mode map_values_foldl(in(pred(in, out, di, uo) is det), + in, out, di, uo) is det. :- mode map_values_foldl(in(pred(in, out, in, out) is semidet), in, out, in, out) is semidet. +:- mode map_values_foldl(in(pred(in, out, in, out) is cc_multi), + in, out, in, out) is cc_multi. +:- mode map_values_foldl(in(pred(in, out, di, uo) is cc_multi), + in, out, di, uo) is cc_multi. :- pred map_values_only_foldl(pred(V, W, A, A), tree234(K, V), tree234(K, W), A, A). -:- mode map_values_only_foldl(in(pred(in, out, di, uo) is det), - in, out, di, uo) is det. :- mode map_values_only_foldl(in(pred(in, out, in, out) is det), in, out, in, out) is det. +:- mode map_values_only_foldl(in(pred(in, out, di, uo) is det), + in, out, di, uo) is det. :- mode map_values_only_foldl(in(pred(in, out, in, out) is semidet), in, out, in, out) is semidet. +:- mode map_values_only_foldl(in(pred(in, out, in, out) is cc_multi), + in, out, in, out) is cc_multi. +:- mode map_values_only_foldl(in(pred(in, out, di, uo) is cc_multi), + in, out, di, uo) is cc_multi. :- pred map_values_foldl2(pred(V, W, A, A, B, B), tree234(K, V), tree234(K, W), A, A, B, B). -:- mode map_values_foldl2(in(pred(in, out, di, uo, di, uo) is det), - in, out, di, uo, di, uo) is det. -:- mode map_values_foldl2(in(pred(in, out, in, out, di, uo) is det), - in, out, in, out, di, uo) is det. :- mode map_values_foldl2(in(pred(in, out, in, out, in, out) is det), in, out, in, out, in, out) is det. +:- mode map_values_foldl2(in(pred(in, out, in, out, di, uo) is det), + in, out, in, out, di, uo) is det. +:- mode map_values_foldl2(in(pred(in, out, di, uo, di, uo) is det), + in, out, di, uo, di, uo) is det. :- mode map_values_foldl2(in(pred(in, out, in, out, in, out) is semidet), in, out, in, out, in, out) is semidet. +:- mode map_values_foldl2(in(pred(in, out, in, out, in, out) is cc_multi), + in, out, in, out, in, out) is cc_multi. +:- mode map_values_foldl2(in(pred(in, out, in, out, di, uo) is cc_multi), + in, out, in, out, di, uo) is cc_multi. :- pred map_values_only_foldl2(pred(V, W, A, A, B, B), tree234(K, V), tree234(K, W), A, A, B, B). -:- mode map_values_only_foldl2(in(pred(in, out, di, uo, di, uo) is det), - in, out, di, uo, di, uo) is det. -:- mode map_values_only_foldl2(in(pred(in, out, in, out, di, uo) is det), - in, out, in, out, di, uo) is det. :- mode map_values_only_foldl2(in(pred(in, out, in, out, in, out) is det), in, out, in, out, in, out) is det. +:- mode map_values_only_foldl2(in(pred(in, out, in, out, di, uo) is det), + in, out, in, out, di, uo) is det. +:- mode map_values_only_foldl2(in(pred(in, out, di, uo, di, uo) is det), + in, out, di, uo, di, uo) is det. :- mode map_values_only_foldl2(in(pred(in, out, in, out, in, out) is semidet), in, out, in, out, in, out) is semidet. +:- mode map_values_only_foldl2(in(pred(in, out, in, out, in, out) is cc_multi), + in, out, in, out, in, out) is cc_multi. +:- mode map_values_only_foldl2(in(pred(in, out, in, out, di, uo) is cc_multi), + in, out, in, out, di, uo) is cc_multi. :- pred map_values_foldl3(pred(V, W, A, A, B, B, C, C), tree234(K, V), tree234(K, W), A, A, B, B, C, C). :- mode map_values_foldl3( - in(pred(in, out, di, uo, di, uo, di, uo) is det), - in, out, di, uo, di, uo, di, uo) is det. -:- mode map_values_foldl3( - in(pred(in, out, in, out, di, uo, di, uo) is det), - in, out, in, out, di, uo, di, uo) is det. + in(pred(in, out, in, out, in, out, in, out) is det), + in, out, in, out, in, out, in, out) is det. :- mode map_values_foldl3( in(pred(in, out, in, out, in, out, di, uo) is det), in, out, in, out, in, out, di, uo) is det. :- mode map_values_foldl3( - in(pred(in, out, in, out, in, out, in, out) is det), - in, out, in, out, in, out, in, out) is det. + in(pred(in, out, in, out, di, uo, di, uo) is det), + in, out, in, out, di, uo, di, uo) is det. +:- mode map_values_foldl3( + in(pred(in, out, di, uo, di, uo, di, uo) is det), + in, out, di, uo, di, uo, di, uo) is det. :- mode map_values_foldl3( in(pred(in, out, in, out, in, out, in, out) is semidet), in, out, in, out, in, out, in, out) is semidet. +:- mode map_values_foldl3( + in(pred(in, out, in, out, in, out, in, out) is cc_multi), + in, out, in, out, in, out, in, out) is cc_multi. +:- mode map_values_foldl3( + in(pred(in, out, in, out, in, out, di, uo) is cc_multi), + in, out, in, out, in, out, di, uo) is cc_multi. :- pred map_values_only_foldl3(pred(V, W, A, A, B, B, C, C), tree234(K, V), tree234(K, W), A, A, B, B, C, C). :- mode map_values_only_foldl3( - in(pred(in, out, di, uo, di, uo, di, uo) is det), - in, out, di, uo, di, uo, di, uo) is det. -:- mode map_values_only_foldl3( - in(pred(in, out, in, out, di, uo, di, uo) is det), - in, out, in, out, di, uo, di, uo) is det. + in(pred(in, out, in, out, in, out, in, out) is det), + in, out, in, out, in, out, in, out) is det. :- mode map_values_only_foldl3( in(pred(in, out, in, out, in, out, di, uo) is det), in, out, in, out, in, out, di, uo) is det. :- mode map_values_only_foldl3( - in(pred(in, out, in, out, in, out, in, out) is det), - in, out, in, out, in, out, in, out) is det. + in(pred(in, out, in, out, di, uo, di, uo) is det), + in, out, in, out, di, uo, di, uo) is det. +:- mode map_values_only_foldl3( + in(pred(in, out, di, uo, di, uo, di, uo) is det), + in, out, di, uo, di, uo, di, uo) is det. :- mode map_values_only_foldl3( in(pred(in, out, in, out, in, out, in, out) is semidet), in, out, in, out, in, out, in, out) is semidet. +:- mode map_values_only_foldl3( + in(pred(in, out, in, out, in, out, in, out) is cc_multi), + in, out, in, out, in, out, in, out) is cc_multi. +:- mode map_values_only_foldl3( + in(pred(in, out, in, out, in, out, di, uo) is cc_multi), + in, out, in, out, in, out, di, uo) is cc_multi. %---------------------% From zoltan.somogyi at runbox.com Tue Dec 2 18:32:13 2025 From: zoltan.somogyi at runbox.com (Zoltan Somogyi) Date: Tue, 02 Dec 2025 18:32:13 +1100 (AEDT) Subject: [m-rev.] diff: fix Volker's compiler crash Message-ID: This wasn't so much a bug as incomplete code. Zoltan. -------------- next part -------------- A non-text attachment was scrubbed... Name: Log.til Type: application/octet-stream Size: 235 bytes Desc: not available URL: -------------- next part -------------- A non-text attachment was scrubbed... Name: DIFF.til Type: application/octet-stream Size: 10941 bytes Desc: not available URL: