Skip to content

Memory.atomic.wait instructions fail to account for big-endian hosts #13988

Closed

Description

@alexcrichton

This test:

(module
  (memory (export "shared") 1 1 shared)

  (func (export "eq32") (result i32)
    (i32.atomic.store (i32.const 0) (i32.const 1))
    (memory.atomic.wait32 (i32.const 0) (i32.const 1) (i64.const 0)))

  (func (export "ne32") (result i32)
    (i32.atomic.store (i32.const 0) (i32.const 1))
    (memory.atomic.wait32 (i32.const 0) (i32.const 0x01000000) (i64.const 0)))

  (func (export "eq64") (result i32)
    (i64.atomic.store (i32.const 8) (i64.const 1))
    (memory.atomic.wait64 (i32.const 8) (i64.const 1) (i64.const 0)))

  (func (export "ne64") (result i32)
    (i64.atomic.store (i32.const 8) (i64.const 1))
    (memory.atomic.wait64 (i32.const 8) (i64.const 0x0100000000000000) (i64.const 0)))
)

(assert_return (invoke "eq32") (i32.const 2))
(assert_return (invoke "ne32") (i32.const 1))
(assert_return (invoke "eq64") (i32.const 2))
(assert_return (invoke "ne64") (i32.const 1))

passes on little-endian hosts:

$ cargo run wast atomic_wait_endianness.wast
    Finished `dev` profile [unoptimized + debuginfo] target(s) in 0.15s
     Running `/home/alex/code/wasmtime2/target/debug/wasmtime wast atomic_wait_endianness.wast`

and fails on big-endian hosts:

$ cargo run --target s390x-unknown-linux-gnu wast atomic_wait_endianness.wast
    Finished `dev` profile [unoptimized + debuginfo] target(s) in 0.20s
     Running `qemu-s390x -L /usr/s390x-linux-gnu -E LD_LIBRARY_PATH=/usr/s390x-linux-gnu/lib -E WASMTIME_TEST_NO_HOG_MEMORY=1 /home/alex/code/wasmtime2/target/s390x-unknown-linux-gnu/debug/wasmtime wast atomic_wait_endianness.wast`
Error: failed to run script file 'atomic_wait_endianness.wast'

Caused by:
    0: failed directive on atomic_wait_endianness.wast:21
    1: result 0 didn't match
    2: expected                  2 / 0x0000000000000002
actual                    1 / 0x0000000000000001

Activity

  1. added
    bugIncorrect behavior in the current implementation that needs fixing
    wasm-proposal:threadsIssues related to the WebAssembly threads proposal
    on Jul 25, 2026
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

No one assigned

    Labels

    bugIncorrect behavior in the current implementation that needs fixingwasm-proposal:threadsIssues related to the WebAssembly threads proposal

    Type

    No type

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions