roc-lang / roc

A fast, friendly, functional language.
https://roc-lang.org
Universal Permissive License v1.0
3.86k stars 284 forks source link

`Str.toDec` segfault (or wrong values) when used with `Inspect.toStr` #6813

Open Anton-4 opened 2 weeks ago

Anton-4 commented 2 weeks ago
app [main] { pf: platform "https://github.com/roc-lang/basic-cli/releases/download/0.11.0/SY4WWMhWQ9NvQgvIthcv15AUeA7rAIJHAHgiaSHGhdY.tar.br" }

import pf.Stdout
import pf.Task

main =
    "milan;22.0\nbrussels;12.0\nbrussels;13.0" |> toTups |> Inspect.toStr |> Stdout.line

toTups = \tempCsv ->
    citiesList = Str.split tempCsv "\n"

    List.map citiesList \cityTempStr ->
        cityTempList = Str.split cityTempStr ";"

        city =
            List.get cityTempList 0 |> orCrash "Impossible."

        temp =
            List.get cityTempList 1
            |> orCrash "cityTempStr ($(cityTempStr)) did not contain `;`."
            |> Str.toDec
            |> orCrash "Str.toDec failed."
            # The line below makes the issue disappear
            #|> Num.toStr 

        dbg temp

        (city, temp)

orCrash = \result, msg ->
    when result is
        Ok v -> v
        Err _ -> crash "Crash: $(msg)"

Results in:

❯ ./target/release/roc examples/decSegfault2.roc
[examples/decSegfault2.roc:26] temp = 22.0
[examples/decSegfault2.roc:26] temp = 12.0
[examples/decSegfault2.roc:26] temp = 13.0

roc on  main [!?] is 📦 v0.0.1 via 🦀 v1.76.0 via ❄  impure (nix-shell-env) 
❯ echo $?
139

Valgrind output with legacy linker:

❯ ./target/release/roc examples/decSegfault2.roc --linker=legacy
[examples/decSegfault2.roc:26] temp = 22.0
[examples/decSegfault2.roc:26] temp = 12.0
[examples/decSegfault2.roc:26] temp = 13.0

roc on  main [!?] is 📦 v0.0.1 via 🦀 v1.76.0 via ❄  impure (nix-shell-env) 
❯ valgrind ./examples/decSegfault2
==27473== Memcheck, a memory error detector
==27473== Copyright (C) 2002-2022, and GNU GPL'd, by Julian Seward et al.
==27473== Using Valgrind-3.22.0 and LibVEX; rerun with -h for copyright info
==27473== Command: ./examples/decSegfault2
==27473== 
[examples/decSegfault2.roc:26] temp = 22.0
[examples/decSegfault2.roc:26] temp = 12.0
[examples/decSegfault2.roc:26] temp = 13.0
==27473== Conditional jump or move depends on uninitialised value(s)
==27473==    at 0x13F8BF: Num_toStr_cb411178cb7686889a4ee0e4b4c57e63975186dc9f1448b79e94c2721a21a2 (roc_app:0)
==27473==    by 0x140D7E: Inspect_289_464ad9696114b8eea8bc3daaaa648b1d3685be4c8d824dbb0c93c169d61 (roc_app:0)
==27473==    by 0x143F2E: Inspect_apply_1fbc6d79b671ab88e8a9425cd46a77344c0f7ee34ea43fdcaf5a014c6759d (roc_app:0)
==27473==    by 0x1409E9: Inspect_216_dba168b77b24c6e793bab73fde9e33d53bc4c848cefe7b7fe931876bedf73d (roc_app:0)
==27473==    by 0x13D595: List_walkHelp_3bbacd33228bca14fe5573efe7278cde33c78fe9028ba98810cff368dece (roc_app:0)
==27473==    by 0x13E810: List_walk_e4f9cf3a6c4e3d6be9d05048391b2e3975855fa3e34f66d41fe2c9a84e5c7b (roc_app:0)
==27473==    by 0x143360: Inspect_214_5250a04b6d2518751b896097c7387fb10ff97b95f3e08a2795e163ade21ee (roc_app:0)
==27473==    by 0x1434E7: Inspect_212_46df57811ab9544a1f9313aab57b6ce51825f299caf5a1ffe2569412f3ed972 (roc_app:0)
==27473==    by 0x13D8A3: Inspect_apply_5fea3a382f6b6c4a2af77ea4365b5abbdda8b93d1f0b9b895dc2a48489fb2 (roc_app:0)
==27473==    by 0x140BF7: #Derived_27_7f7e162ee4345c12acb2c8dddfd129c8c9ef562ecb31841cfff13d4789ffc2 (roc_app:0)
==27473==    by 0x141FAD: Inspect_apply_7f8c4a473141d41efa7657e3f378539f18179e0b2dff0f626f6dce25d295f (roc_app:0)
==27473==    by 0x13D407: Inspect_156_c6e34737223a4b123e4ef4b086ad92b3ead64b519536ae28b552b4718b7124e (roc_app:0)
==27473== 
==27473== Conditional jump or move depends on uninitialised value(s)
==27473==    at 0x2D38CB: UnknownInlinedFun (asymmetric.rs:31)
==27473==    by 0x2D38CB: UnknownInlinedFun (udiv.rs:65)
==27473==    by 0x2D38CB: __udivti3 (macros.rs:500)
==27473==    by 0x13F97D: Num_toStr_cb411178cb7686889a4ee0e4b4c57e63975186dc9f1448b79e94c2721a21a2 (roc_app:0)
==27473==    by 0x140D7E: Inspect_289_464ad9696114b8eea8bc3daaaa648b1d3685be4c8d824dbb0c93c169d61 (roc_app:0)
==27473==    by 0x143F2E: Inspect_apply_1fbc6d79b671ab88e8a9425cd46a77344c0f7ee34ea43fdcaf5a014c6759d (roc_app:0)
==27473==    by 0x1409E9: Inspect_216_dba168b77b24c6e793bab73fde9e33d53bc4c848cefe7b7fe931876bedf73d (roc_app:0)
==27473==    by 0x13D595: List_walkHelp_3bbacd33228bca14fe5573efe7278cde33c78fe9028ba98810cff368dece (roc_app:0)
==27473==    by 0x13E810: List_walk_e4f9cf3a6c4e3d6be9d05048391b2e3975855fa3e34f66d41fe2c9a84e5c7b (roc_app:0)
==27473==    by 0x143360: Inspect_214_5250a04b6d2518751b896097c7387fb10ff97b95f3e08a2795e163ade21ee (roc_app:0)
==27473==    by 0x1434E7: Inspect_212_46df57811ab9544a1f9313aab57b6ce51825f299caf5a1ffe2569412f3ed972 (roc_app:0)
==27473==    by 0x13D8A3: Inspect_apply_5fea3a382f6b6c4a2af77ea4365b5abbdda8b93d1f0b9b895dc2a48489fb2 (roc_app:0)
==27473==    by 0x140BF7: #Derived_27_7f7e162ee4345c12acb2c8dddfd129c8c9ef562ecb31841cfff13d4789ffc2 (roc_app:0)
==27473==    by 0x141FAD: Inspect_apply_7f8c4a473141d41efa7657e3f378539f18179e0b2dff0f626f6dce25d295f (roc_app:0)
==27473== 
==27473== Conditional jump or move depends on uninitialised value(s)
==27473==    at 0x2D38EC: UnknownInlinedFun (mod.rs:1174)
==27473==    by 0x2D38EC: UnknownInlinedFun (mod.rs:129)
==27473==    by 0x2D38EC: UnknownInlinedFun (asymmetric.rs:37)
==27473==    by 0x2D38EC: UnknownInlinedFun (udiv.rs:65)
==27473==    by 0x2D38EC: __udivti3 (macros.rs:500)
==27473==    by 0x13F97D: Num_toStr_cb411178cb7686889a4ee0e4b4c57e63975186dc9f1448b79e94c2721a21a2 (roc_app:0)
==27473==    by 0x140D7E: Inspect_289_464ad9696114b8eea8bc3daaaa648b1d3685be4c8d824dbb0c93c169d61 (roc_app:0)
==27473==    by 0x143F2E: Inspect_apply_1fbc6d79b671ab88e8a9425cd46a77344c0f7ee34ea43fdcaf5a014c6759d (roc_app:0)
==27473==    by 0x1409E9: Inspect_216_dba168b77b24c6e793bab73fde9e33d53bc4c848cefe7b7fe931876bedf73d (roc_app:0)
==27473==    by 0x13D595: List_walkHelp_3bbacd33228bca14fe5573efe7278cde33c78fe9028ba98810cff368dece (roc_app:0)
==27473==    by 0x13E810: List_walk_e4f9cf3a6c4e3d6be9d05048391b2e3975855fa3e34f66d41fe2c9a84e5c7b (roc_app:0)
==27473==    by 0x143360: Inspect_214_5250a04b6d2518751b896097c7387fb10ff97b95f3e08a2795e163ade21ee (roc_app:0)
==27473==    by 0x1434E7: Inspect_212_46df57811ab9544a1f9313aab57b6ce51825f299caf5a1ffe2569412f3ed972 (roc_app:0)
==27473==    by 0x13D8A3: Inspect_apply_5fea3a382f6b6c4a2af77ea4365b5abbdda8b93d1f0b9b895dc2a48489fb2 (roc_app:0)
==27473==    by 0x140BF7: #Derived_27_7f7e162ee4345c12acb2c8dddfd129c8c9ef562ecb31841cfff13d4789ffc2 (roc_app:0)
==27473==    by 0x141FAD: Inspect_apply_7f8c4a473141d41efa7657e3f378539f18179e0b2dff0f626f6dce25d295f (roc_app:0)
==27473== 
==27473== Use of uninitialised value of size 8
==27473==    at 0x13F9C2: Num_toStr_cb411178cb7686889a4ee0e4b4c57e63975186dc9f1448b79e94c2721a21a2 (roc_app:0)
==27473==    by 0x140D7E: Inspect_289_464ad9696114b8eea8bc3daaaa648b1d3685be4c8d824dbb0c93c169d61 (roc_app:0)
==27473==    by 0x143F2E: Inspect_apply_1fbc6d79b671ab88e8a9425cd46a77344c0f7ee34ea43fdcaf5a014c6759d (roc_app:0)
==27473==    by 0x1409E9: Inspect_216_dba168b77b24c6e793bab73fde9e33d53bc4c848cefe7b7fe931876bedf73d (roc_app:0)
==27473==    by 0x13D595: List_walkHelp_3bbacd33228bca14fe5573efe7278cde33c78fe9028ba98810cff368dece (roc_app:0)
==27473==    by 0x13E810: List_walk_e4f9cf3a6c4e3d6be9d05048391b2e3975855fa3e34f66d41fe2c9a84e5c7b (roc_app:0)
==27473==    by 0x143360: Inspect_214_5250a04b6d2518751b896097c7387fb10ff97b95f3e08a2795e163ade21ee (roc_app:0)
==27473==    by 0x1434E7: Inspect_212_46df57811ab9544a1f9313aab57b6ce51825f299caf5a1ffe2569412f3ed972 (roc_app:0)
==27473==    by 0x13D8A3: Inspect_apply_5fea3a382f6b6c4a2af77ea4365b5abbdda8b93d1f0b9b895dc2a48489fb2 (roc_app:0)
==27473==    by 0x140BF7: #Derived_27_7f7e162ee4345c12acb2c8dddfd129c8c9ef562ecb31841cfff13d4789ffc2 (roc_app:0)
==27473==    by 0x141FAD: Inspect_apply_7f8c4a473141d41efa7657e3f378539f18179e0b2dff0f626f6dce25d295f (roc_app:0)
==27473==    by 0x13D407: Inspect_156_c6e34737223a4b123e4ef4b086ad92b3ead64b519536ae28b552b4718b7124e (roc_app:0)
==27473== 
==27473== Conditional jump or move depends on uninitialised value(s)
==27473==    at 0x13FA15: Num_toStr_cb411178cb7686889a4ee0e4b4c57e63975186dc9f1448b79e94c2721a21a2 (roc_app:0)
==27473==    by 0x140D7E: Inspect_289_464ad9696114b8eea8bc3daaaa648b1d3685be4c8d824dbb0c93c169d61 (roc_app:0)
==27473==    by 0x143F2E: Inspect_apply_1fbc6d79b671ab88e8a9425cd46a77344c0f7ee34ea43fdcaf5a014c6759d (roc_app:0)
==27473==    by 0x1409E9: Inspect_216_dba168b77b24c6e793bab73fde9e33d53bc4c848cefe7b7fe931876bedf73d (roc_app:0)
==27473==    by 0x13D595: List_walkHelp_3bbacd33228bca14fe5573efe7278cde33c78fe9028ba98810cff368dece (roc_app:0)
==27473==    by 0x13E810: List_walk_e4f9cf3a6c4e3d6be9d05048391b2e3975855fa3e34f66d41fe2c9a84e5c7b (roc_app:0)
==27473==    by 0x143360: Inspect_214_5250a04b6d2518751b896097c7387fb10ff97b95f3e08a2795e163ade21ee (roc_app:0)
==27473==    by 0x1434E7: Inspect_212_46df57811ab9544a1f9313aab57b6ce51825f299caf5a1ffe2569412f3ed972 (roc_app:0)
==27473==    by 0x13D8A3: Inspect_apply_5fea3a382f6b6c4a2af77ea4365b5abbdda8b93d1f0b9b895dc2a48489fb2 (roc_app:0)
==27473==    by 0x140BF7: #Derived_27_7f7e162ee4345c12acb2c8dddfd129c8c9ef562ecb31841cfff13d4789ffc2 (roc_app:0)
==27473==    by 0x141FAD: Inspect_apply_7f8c4a473141d41efa7657e3f378539f18179e0b2dff0f626f6dce25d295f (roc_app:0)
==27473==    by 0x13D407: Inspect_156_c6e34737223a4b123e4ef4b086ad92b3ead64b519536ae28b552b4718b7124e (roc_app:0)
==27473== 
==27473== Conditional jump or move depends on uninitialised value(s)
==27473==    at 0x13FA52: Num_toStr_cb411178cb7686889a4ee0e4b4c57e63975186dc9f1448b79e94c2721a21a2 (roc_app:0)
==27473==    by 0x140D7E: Inspect_289_464ad9696114b8eea8bc3daaaa648b1d3685be4c8d824dbb0c93c169d61 (roc_app:0)
==27473==    by 0x143F2E: Inspect_apply_1fbc6d79b671ab88e8a9425cd46a77344c0f7ee34ea43fdcaf5a014c6759d (roc_app:0)
==27473==    by 0x1409E9: Inspect_216_dba168b77b24c6e793bab73fde9e33d53bc4c848cefe7b7fe931876bedf73d (roc_app:0)
==27473==    by 0x13D595: List_walkHelp_3bbacd33228bca14fe5573efe7278cde33c78fe9028ba98810cff368dece (roc_app:0)
==27473==    by 0x13E810: List_walk_e4f9cf3a6c4e3d6be9d05048391b2e3975855fa3e34f66d41fe2c9a84e5c7b (roc_app:0)
==27473==    by 0x143360: Inspect_214_5250a04b6d2518751b896097c7387fb10ff97b95f3e08a2795e163ade21ee (roc_app:0)
==27473==    by 0x1434E7: Inspect_212_46df57811ab9544a1f9313aab57b6ce51825f299caf5a1ffe2569412f3ed972 (roc_app:0)
==27473==    by 0x13D8A3: Inspect_apply_5fea3a382f6b6c4a2af77ea4365b5abbdda8b93d1f0b9b895dc2a48489fb2 (roc_app:0)
==27473==    by 0x140BF7: #Derived_27_7f7e162ee4345c12acb2c8dddfd129c8c9ef562ecb31841cfff13d4789ffc2 (roc_app:0)
==27473==    by 0x141FAD: Inspect_apply_7f8c4a473141d41efa7657e3f378539f18179e0b2dff0f626f6dce25d295f (roc_app:0)
==27473==    by 0x13D407: Inspect_156_c6e34737223a4b123e4ef4b086ad92b3ead64b519536ae28b552b4718b7124e (roc_app:0)
==27473== 
==27473== Conditional jump or move depends on uninitialised value(s)
==27473==    at 0x13FC7A: Num_toStr_cb411178cb7686889a4ee0e4b4c57e63975186dc9f1448b79e94c2721a21a2 (roc_app:0)
==27473==    by 0x140D7E: Inspect_289_464ad9696114b8eea8bc3daaaa648b1d3685be4c8d824dbb0c93c169d61 (roc_app:0)
==27473==    by 0x143F2E: Inspect_apply_1fbc6d79b671ab88e8a9425cd46a77344c0f7ee34ea43fdcaf5a014c6759d (roc_app:0)
==27473==    by 0x1409E9: Inspect_216_dba168b77b24c6e793bab73fde9e33d53bc4c848cefe7b7fe931876bedf73d (roc_app:0)
==27473==    by 0x13D595: List_walkHelp_3bbacd33228bca14fe5573efe7278cde33c78fe9028ba98810cff368dece (roc_app:0)
==27473==    by 0x13E810: List_walk_e4f9cf3a6c4e3d6be9d05048391b2e3975855fa3e34f66d41fe2c9a84e5c7b (roc_app:0)
==27473==    by 0x143360: Inspect_214_5250a04b6d2518751b896097c7387fb10ff97b95f3e08a2795e163ade21ee (roc_app:0)
==27473==    by 0x1434E7: Inspect_212_46df57811ab9544a1f9313aab57b6ce51825f299caf5a1ffe2569412f3ed972 (roc_app:0)
==27473==    by 0x13D8A3: Inspect_apply_5fea3a382f6b6c4a2af77ea4365b5abbdda8b93d1f0b9b895dc2a48489fb2 (roc_app:0)
==27473==    by 0x140BF7: #Derived_27_7f7e162ee4345c12acb2c8dddfd129c8c9ef562ecb31841cfff13d4789ffc2 (roc_app:0)
==27473==    by 0x141FAD: Inspect_apply_7f8c4a473141d41efa7657e3f378539f18179e0b2dff0f626f6dce25d295f (roc_app:0)
==27473==    by 0x13D407: Inspect_156_c6e34737223a4b123e4ef4b086ad92b3ead64b519536ae28b552b4718b7124e (roc_app:0)
==27473== 
==27473== Invalid read of size 8
==27473==    at 0x144413: ??? (roc_app:0)
==27473==    by 0x144B90: ??? (roc_app:0)
==27473==    by 0x1420F4: List_walkHelp_95dbc324453309f26dee9436b39568cc8bcbe17ef409e9273c4edb58653fd (roc_app:0)
==27473==    by 0x13F710: List_walk_1149386876d826e56f26fd066413b9c565aa3dea67161e512a9ba24db887d5 (roc_app:0)
==27473==    by 0x142610: Inspect_154_494fd63e81fc5377dff396b856cc43fac283edbeae4d7cfbdd95aadb8479597 (roc_app:0)
==27473==    by 0x142866: Inspect_152_1fee66ad667b912c4d10ada5f77fb9e8b2dfe9a4124f957b34ae7bc684ecaf1 (roc_app:0)
==27473==    by 0x142DB3: Inspect_apply_92df2e9c67226884f739cd53c0493c2aabaabd406877a3b72a3e676dc54e081 (roc_app:0)
==27473==    by 0x13E4A1: #Derived_18_669c1355a3e727bb53dd458f2e96e48571aa45dfabcfb4b7de1689484f11 (roc_app:0)
==27473==    by 0x13DF64: Inspect_inspect_d394208415ac8fe0ce8aa0ddf6a845c7cc74d818698e3d25c85705ce311f5ec (roc_app:0)
==27473==    by 0x13D0D1: Inspect_toStr_3899d549ca6f5b7757a69b861e0c9a44bfbbd717ac2039f8ca1abc46d7d32e (roc_app:0)
==27473==    by 0x142422: #UserApp_main_1e4d2f1e6b4984301a1489b71481ade3a818d1fae80b8f87ea525c7bff923 (roc_app:0)
==27473==    by 0x140535: _mainForHost_8445464738218c426e3b841f28ede2879d4391e6c33df6a616e872e199e47e (roc_app:0)
==27473==  Address 0xb469471f8013fff8 is not stack'd, malloc'd or (recently) free'd
==27473== 
==27473== 
==27473== Process terminating with default action of signal 11 (SIGSEGV): dumping core
==27473==  General Protection Fault
==27473==    at 0x144413: ??? (roc_app:0)
==27473==    by 0x144B90: ??? (roc_app:0)
==27473==    by 0x1420F4: List_walkHelp_95dbc324453309f26dee9436b39568cc8bcbe17ef409e9273c4edb58653fd (roc_app:0)
==27473==    by 0x13F710: List_walk_1149386876d826e56f26fd066413b9c565aa3dea67161e512a9ba24db887d5 (roc_app:0)
==27473==    by 0x142610: Inspect_154_494fd63e81fc5377dff396b856cc43fac283edbeae4d7cfbdd95aadb8479597 (roc_app:0)
==27473==    by 0x142866: Inspect_152_1fee66ad667b912c4d10ada5f77fb9e8b2dfe9a4124f957b34ae7bc684ecaf1 (roc_app:0)
==27473==    by 0x142DB3: Inspect_apply_92df2e9c67226884f739cd53c0493c2aabaabd406877a3b72a3e676dc54e081 (roc_app:0)
==27473==    by 0x13E4A1: #Derived_18_669c1355a3e727bb53dd458f2e96e48571aa45dfabcfb4b7de1689484f11 (roc_app:0)
==27473==    by 0x13DF64: Inspect_inspect_d394208415ac8fe0ce8aa0ddf6a845c7cc74d818698e3d25c85705ce311f5ec (roc_app:0)
==27473==    by 0x13D0D1: Inspect_toStr_3899d549ca6f5b7757a69b861e0c9a44bfbbd717ac2039f8ca1abc46d7d32e (roc_app:0)
==27473==    by 0x142422: #UserApp_main_1e4d2f1e6b4984301a1489b71481ade3a818d1fae80b8f87ea525c7bff923 (roc_app:0)
==27473==    by 0x140535: _mainForHost_8445464738218c426e3b841f28ede2879d4391e6c33df6a616e872e199e47e (roc_app:0)
==27473== 
==27473== HEAP SUMMARY:
==27473==     in use at exit: 320 bytes in 3 blocks
==27473==   total heap usage: 17 allocs, 14 frees, 1,368 bytes allocated
==27473== 
==27473== LEAK SUMMARY:
==27473==    definitely lost: 0 bytes in 0 blocks
==27473==    indirectly lost: 0 bytes in 0 blocks
==27473==      possibly lost: 296 bytes in 2 blocks
==27473==    still reachable: 24 bytes in 1 blocks
==27473==         suppressed: 0 bytes in 0 blocks
==27473== Rerun with --leak-check=full to see details of leaked memory
==27473== 
==27473== Use --track-origins=yes to see where uninitialised values come from
==27473== For lists of detected and suppressed errors, rerun with: -s
==27473== ERROR SUMMARY: 58 errors from 8 contexts (suppressed: 0 from 0)
Segmentation fault (core dumped)
Anton-4 commented 2 weeks ago

Changing "milan;22.0\nbrussels;12.0\nbrussels;13.0" to "milan;22.0\nbrussels;12.0" results in some memory garbage values:

❯ ./target/release/roc examples/decSegfault2.roc
[examples/decSegfault2.roc:26] temp = 22.0
[examples/decSegfault2.roc:26] temp = 12.0
[("milan", 22.0), ("", -118921438036423844071.374607431768211456)]
Anton-4 commented 2 weeks ago

Encountered on Roc commit: a6f1408b5