✓
Passing Passing: the compiler rejects this program as expected.
Code
// Pins: a captured write under [parallel] that is NOT a provably additive
// fold must refuse — partitioning without a combine law is a wrong answer,
// not a missing feature.
import std/io
capture { acc: 0[i64] }
! as a |> [parallel]for(1..9)
! each i |> captured { acc: @max(a.acc, @as(i64, @intCast(i))) }
| captured r |> std/io:print.ln("{{ r.acc:d }}")
Actual compiler output
Error: output_emitted.zig:148:17: error: [parallel]for: `@max(__koru_parcell_a.acc, @as(i64, @intCast(i)))` is not a provably additive write to `a.acc` — partition needs a combine law (provable monoid); write `acc: a.acc + <expr>` (or `*` / `@rem` fold) or drop [parallel]
@compileError("[parallel]for: `@max(__koru_parcell_a.acc, @as(i64, @intCast(i)))` is not a provably additive write to `a.acc` — partition needs a combine law (provable monoid); write `acc: a.acc + <expr>` (or `*` / `@rem` fold) or drop [parallel]");
^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
referenced by:
flow0: output_emitted.zig:175:41
main: output_emitted.zig:231:22
4 reference(s) hidden; use '-freference-trace=6' to see all references
output_emitted.zig:148:17: error: [parallel]for: `@max(__koru_parcell_a.acc, @as(i64, @intCast(i)))` is not a provably additive write to `a.acc` — partition needs a combine law (provable monoid); write `acc: a.acc + <expr>` (or `*` / `@rem` fold) or drop [parallel]
@compileError("[parallel]for: `@max(__koru_parcell_a.acc, @as(i64, @intCast(i)))` is not a provably additive write to `a.acc` — partition needs a combine law (provable monoid); write `acc: a.acc + <expr>` (or `*` / `@rem` fold) or drop [parallel]");
^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~Error output must contain
is not a provably additive writeFlows
flow ~capture click a branch to expand · @labels scroll to their anchor
capture (source: acc: 0[i64])
Test Configuration
MUST_ERROR