ponyc icon indicating copy to clipboard operation
ponyc copied to clipboard

Segmentation fault when ponyc compiles this code

Open junetried opened this issue 5 months ago • 2 comments

I've been told multiple times that this looks like a compiler bug, and I agree, so I'm posting this here. The following code causes a segfault in the compiler:

struct FFIBytes
    var ptr: Pointer[U8 val] = Pointer[U8].create()
    var length: USize = 0

    fun iso string(): String val =>
        recover String.from_cpointer(consume FFIBytes.ptr, consume FFIBytes.length) end

actor Main
    new create(env: Env) =>
        env.out.print("nothing to see here")

I have honestly no idea what's going on to cause this. I've reproduced it on ponyc versions 0.49.0, 0.53.0, and 0.58.0. The latter two suggest creating an issue from the backtrace, but don't actually give one:

$ ponyc
Building builtin -> /home/june/src/ponyc/packages/builtin
Building . -> /home/june/src/projects/Pony/cffi_test
PLEASE submit a bug report to https://github.com/llvm/llvm-project/issues/ and include the crash backtrace.
Segmentation fault (core dumped)

While ponyc 0.49.0 does provide a backtrace:

$ /home/june/.local/share/ponyup/ponyc-release-0.49.0-x86_64-linux-gnu/bin/ponyc
Building builtin -> /home/june/.local/share/ponyup/ponyc-release-0.49.0-x86_64-linux-gnu/packages/builtin
Building . -> /home/june/src/projects/Pony/cffi_test
/tmp/cirrus-ci-build/src/libponyc/pass/refer.c:144: generate_multi_dot_name: Assertion `0` failed.

Backtrace:
  /home/june/.local/share/ponyup/ponyc-release-0.49.0-x86_64-linux-gnu/bin/ponyc(ponyint_assert_fail+0x82) [0x796352]
  /home/june/.local/share/ponyup/ponyc-release-0.49.0-x86_64-linux-gnu/bin/ponyc() [0x71bb63]
  /home/june/.local/share/ponyup/ponyc-release-0.49.0-x86_64-linux-gnu/bin/ponyc(pass_refer+0x1166) [0x71b676]
  /home/june/.local/share/ponyup/ponyc-release-0.49.0-x86_64-linux-gnu/bin/ponyc(ast_visit+0x1a7) [0x7187c7]
  /home/june/.local/share/ponyup/ponyc-release-0.49.0-x86_64-linux-gnu/bin/ponyc(ast_visit+0x179) [0x718799]
  /home/june/.local/share/ponyup/ponyc-release-0.49.0-x86_64-linux-gnu/bin/ponyc(ast_visit+0x179) [0x718799]
  /home/june/.local/share/ponyup/ponyc-release-0.49.0-x86_64-linux-gnu/bin/ponyc() [0x718ea4]
  /home/june/.local/share/ponyup/ponyc-release-0.49.0-x86_64-linux-gnu/bin/ponyc(pass_pre_refer+0x1f7) [0x71a4a7]
  /home/june/.local/share/ponyup/ponyc-release-0.49.0-x86_64-linux-gnu/bin/ponyc(ast_visit+0x90) [0x7186b0]
  /home/june/.local/share/ponyup/ponyc-release-0.49.0-x86_64-linux-gnu/bin/ponyc(ast_visit+0x179) [0x718799]
  /home/june/.local/share/ponyup/ponyc-release-0.49.0-x86_64-linux-gnu/bin/ponyc(ast_visit+0x179) [0x718799]
  /home/june/.local/share/ponyup/ponyc-release-0.49.0-x86_64-linux-gnu/bin/ponyc(ast_visit+0x179) [0x718799]
  /home/june/.local/share/ponyup/ponyc-release-0.49.0-x86_64-linux-gnu/bin/ponyc(ast_visit+0x179) [0x718799]
  /home/june/.local/share/ponyup/ponyc-release-0.49.0-x86_64-linux-gnu/bin/ponyc(ast_visit+0x179) [0x718799]
  /home/june/.local/share/ponyup/ponyc-release-0.49.0-x86_64-linux-gnu/bin/ponyc(ast_visit+0x179) [0x718799]
  /home/june/.local/share/ponyup/ponyc-release-0.49.0-x86_64-linux-gnu/bin/ponyc(ast_visit+0x179) [0x718799]
  /home/june/.local/share/ponyup/ponyc-release-0.49.0-x86_64-linux-gnu/bin/ponyc(ast_visit+0x179) [0x718799]
  /home/june/.local/share/ponyup/ponyc-release-0.49.0-x86_64-linux-gnu/bin/ponyc(ast_visit+0x179) [0x718799]
  /home/june/.local/share/ponyup/ponyc-release-0.49.0-x86_64-linux-gnu/bin/ponyc() [0x718ea4]
  /home/june/.local/share/ponyup/ponyc-release-0.49.0-x86_64-linux-gnu/bin/ponyc(ast_passes_program+0x12) [0x718972]
  /home/june/.local/share/ponyup/ponyc-release-0.49.0-x86_64-linux-gnu/bin/ponyc(program_load+0x78) [0x72d0f8]
  /home/june/.local/share/ponyup/ponyc-release-0.49.0-x86_64-linux-gnu/bin/ponyc(main+0x222) [0x6e5fd2]
  /lib64/libc.so.6(+0x281b0) [0x7f25602281b0]
  /lib64/libc.so.6(__libc_start_main+0x8b) [0x7f2560228279]
  /home/june/.local/share/ponyup/ponyc-release-0.49.0-x86_64-linux-gnu/bin/ponyc(_start+0x2e) [0x6e5cee]
This is an optimised version of ponyc: the backtrace may be imprecise or incorrect.
Use a debug version to get more meaningful information.
PLEASE submit a bug report to https://bugs.llvm.org/ and include the crash backtrace.
Aborted (core dumped)

junetried avatar Jan 13 '24 19:01 junetried