Skip to content

clang miscompilation when using experimental-mv abi #71124

@TerrorJack

Description

@TerrorJack

repro.tar.zst uploaded at https://files.catbox.moe/5asjku.zst

The above tarball contains an archive with all combined dependencies, and a CPP-processed C source file to reproduce the bug. The bug happens on both clang-17 and trunk. No wasi-sdk build or wasi-libc sysroot is needed to reproduce and diagnose the bug, vanilla clang with wasm32 target shall do:

clang --target=wasm32 \
   -Oz -mmultivalue -c hgcd2.orig.c -o hgcd2.o -Xclang -target-abi -Xclang experimental-mv

wasm-ld -m wasm32 ghc_5.o repro.a hgcd2.o -o integerPowMod.wasm

wasmtime integerPowMod.wasm

The above example produces invalid code and crashes with:

Error: failed to run main module `integerPowMod.wasm`

Caused by:
    0: failed to invoke command default
    1: error while executing at wasm backtrace:
           0: 0x15b647 - <unknown>!abort
           1: 0x15216d - <unknown>!dlfree
           2: 0x15012d - <unknown>!free
           3: 0x5d161 - <unknown>!__gmp_default_free
           4: 0x5d3f3 - <unknown>!__gmp_tmp_reentrant_free
           5: 0x9e6e3 - <unknown>!__gmpn_gcdext
           6: 0xa1dcd - <unknown>!__gmpz_gcdext
           7: 0xa2bad - <unknown>!__gmpz_invert
           8: 0xa941f - <unknown>!integer_gmp_invert
           9: 0xaa4cb - <unknown>!_blk_c1yM
          10: 0x4ab2f - <unknown>!StgRun
          11: 0x2a60c - <unknown>!scheduleWaitThread
          12: 0xa233 - <unknown>!rts_evalLazyIO
          13: 0xa362 - <unknown>!hs_main
          14: 0x6ec1 - <unknown>!main
          15: 0x17ad12 - <unknown>!__main_void
          16: 0x17ad84 - <unknown>!_start
       note: using the `WASMTIME_BACKTRACE_DETAILS=1` environment variable may show more debugging information
    2: wasm trap: wasm `unreachable` instruction executed

However, if either -Oz is changed to -Os (or -O3 and other optimization levels), or if -Xclang -target-abi -Xclang experimental-mv, then it compiles and runs fine, producing the correct result 7690788370462822410877571751743509720259.

Metadata

Metadata

Assignees

No one assigned

    Labels

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions