summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--src/wasm-interpreter.h12
-rw-r--r--test/lit/exec/atomic.wast21
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)
+ )
+ )
+ )
+)