roc icon indicating copy to clipboard operation
roc copied to clipboard

Reference counting bug in pattern match

Open ayazhafiz opened this issue 2 years ago • 2 comments

thread 'main' panicked at 'assertion failed: !self.not_reference_counted.contains(symbol)', crates/compiler/mono/src/inc_dec.rs:91:13
note: run with `RUST_BACKTRACE=1` environment variable to display a backtrace

app "AoC"
    packages {
        pf: "https://github.com/roc-lang/basic-cli/releases/download/0.6.2/c7T4Hp8bAdWz3r9ZrhboBzibCjJag8d0IP_ljb42yVc.tar.br",
    }
    imports [pf.Stdout, pf.Task.{ Task }, "day-1-part-1.txt" as part1Input : Str]
    provides [main] to pf

main : Task {} *
main = Stdout.line part1

part1 : Str
part1 =
    part1Input
    |> Str.split "\n"
    |> List.map Str.toUtf8
    |> List.map determineCalibration
    |> List.sum 
    |> Num.toStr

determineCalibration = \input ->
    walk = \f, s, l ->
        when (f, s, l) is
            (Some m, Some n, _) -> m * 10 + n
            (Some m, None, [n, ..]) if n >= '0' && n <= '9' -> walk (Some m) (Some (n - '0')) l
            (None, _, [n, ..]) if n >= '0' && n <= '9' -> walk (Some (n - '0')) None l
            (_, _, [n, .. as rest]) -> walk f s rest
            (_, _, _) -> crash "Invalid input"
    walk None None input

ayazhafiz avatar Dec 01 '23 22:12 ayazhafiz

Simpler reproduction:

app "main"
    packages { pf: "https://github.com/roc-lang/basic-cli/releases/download/0.7.0/bkGby8jb0tmZYsy2hg1E_B2QrCgcSTxdUlHtETwm5m4.tar.br" }
    imports [pf.Task.{ Task }]
    provides [main] to pf

main =
    _ = f None None []

    Task.ok {}

f = \a, b, c ->
    when (a, b, c) is
        (Some m, Some n, [_]) -> m + n
        _ -> crash "invalid"

JRI98 avatar Feb 03 '24 13:02 JRI98

Thanks @JRI98 :)

Anton-4 avatar Feb 03 '24 13:02 Anton-4