| (module | |
| (type $v (func)) | |
| (memory $m 256 256) | |
| (data (i32.const 10) "waka waka waka waka waka") | |
| (table 1 1 funcref) | |
| (elem (i32.const 0) $call-indirect) | |
| (export "test1" (func $test1)) | |
| (export "test2" (func $test2)) | |
| (export "test3" (func $test3)) | |
| (export "memory" (memory $m)) ;; export memory so we can see the updated data | |
| (func $test1 | |
| (drop (i32.const 0)) ;; no work at all, really | |
| (call $safe-to-call) ;; safe to call | |
| (call_indirect (type $v) (i32.const 0)) ;; safe to call | |
| ) | |
| (func $test2 | |
| (drop (i32.load (i32.const 12))) ;; a safe load | |
| (drop (i32.load16_s (i32.const 12))) | |
| (drop (i32.load8_s (i32.const 12))) | |
| (drop (i32.load16_u (i32.const 12))) | |
| (drop (i32.load8_u (i32.const 12))) | |
| ) | |
| (func $test3 | |
| (i32.store (i32.const 12) (i32.const 115)) ;; a safe store, should alter memory | |
| (i32.store16 (i32.const 20) (i32.const 31353)) | |
| (i32.store8 (i32.const 23) (i32.const 120)) | |
| ) | |
| (func $safe-to-call | |
| (drop (i32.const 1)) | |
| (i32.store8 (i32.const 10) (i32.const 110)) ;; safe write too (lowest possible) | |
| (i32.store8 (i32.const 33) (i32.const 109)) ;; safe write too (highest possible) | |
| ) | |
| (func $call-indirect | |
| (i32.store8 (i32.const 40) (i32.const 67)) | |
| ) | |
| ) |