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
    No fields configured for issues without a type.

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions