diff options
-rw-r--r-- | src/wasm-interpreter.h | 12 | ||||
-rw-r--r-- | test/lit/exec/atomic.wast | 21 |
2 files changed, 30 insertions, 3 deletions
diff --git a/src/wasm-interpreter.h b/src/wasm-interpreter.h index 0dedfeb58..af01865f4 100644 --- a/src/wasm-interpreter.h +++ b/src/wasm-interpreter.h @@ -3461,9 +3461,15 @@ public: if (loaded != expected.getSingleValue()) { return Literal(int32_t(1)); // not equal } - // TODO: add threads support! - // for now, just assume we are woken up - return Literal(int32_t(0)); // woken up + // TODO: Add threads support. For now, report a host limit here, as there + // are no other threads that can wake us up. Without such threads, + // we'd hang if there is no timeout, and even if there is a timeout + // then we can hang for a long time if it is in a loop. The only + // timeout value we allow here for now is 0. + if (timeout.getSingleValue().getInteger() != 0) { + hostLimit("threads support"); + } + return Literal(int32_t(0)); // equal } Flow visitAtomicNotify(AtomicNotify* curr) { NOTE_ENTER("AtomicNotify"); diff --git a/test/lit/exec/atomic.wast b/test/lit/exec/atomic.wast new file mode 100644 index 000000000..73567121f --- /dev/null +++ b/test/lit/exec/atomic.wast @@ -0,0 +1,21 @@ +;; NOTE: Assertions have been generated by update_lit_checks.py --output=fuzz-exec and should not be edited. + +;; RUN: wasm-opt %s -all --fuzz-exec-before -q -o /dev/null 2>&1 | filecheck %s + +(module + (import "fuzzing-support" "log-i32" (func $log (param i32))) + + (memory $0 23 256 shared) + + ;; CHECK: [fuzz-exec] calling wait_and_log + ;; CHECK-NEXT: [LoggingExternalInterface logging 0] + (func $wait_and_log (export "wait_and_log") + (call $log + (memory.atomic.wait64 + (i32.const 0) + (i64.const 0) + (i64.const 0) + ) + ) + ) +) |