github.com/tetratelabs/wazero@v1.7.3-0.20240513003603-48f702e154b5/internal/integration_test/spectest/v1/testdata/memory_grow.wast (about) 1 (module 2 (memory 0) 3 4 (func (export "load_at_zero") (result i32) (i32.load (i32.const 0))) 5 (func (export "store_at_zero") (i32.store (i32.const 0) (i32.const 2))) 6 7 (func (export "load_at_page_size") (result i32) (i32.load (i32.const 0x10000))) 8 (func (export "store_at_page_size") (i32.store (i32.const 0x10000) (i32.const 3))) 9 10 (func (export "grow") (param $sz i32) (result i32) (memory.grow (local.get $sz))) 11 (func (export "size") (result i32) (memory.size)) 12 ) 13 14 (assert_return (invoke "size") (i32.const 0)) 15 (assert_trap (invoke "store_at_zero") "out of bounds memory access") 16 (assert_trap (invoke "load_at_zero") "out of bounds memory access") 17 (assert_trap (invoke "store_at_page_size") "out of bounds memory access") 18 (assert_trap (invoke "load_at_page_size") "out of bounds memory access") 19 (assert_return (invoke "grow" (i32.const 1)) (i32.const 0)) 20 (assert_return (invoke "size") (i32.const 1)) 21 (assert_return (invoke "load_at_zero") (i32.const 0)) 22 (assert_return (invoke "store_at_zero")) 23 (assert_return (invoke "load_at_zero") (i32.const 2)) 24 (assert_trap (invoke "store_at_page_size") "out of bounds memory access") 25 (assert_trap (invoke "load_at_page_size") "out of bounds memory access") 26 (assert_return (invoke "grow" (i32.const 4)) (i32.const 1)) 27 (assert_return (invoke "size") (i32.const 5)) 28 (assert_return (invoke "load_at_zero") (i32.const 2)) 29 (assert_return (invoke "store_at_zero")) 30 (assert_return (invoke "load_at_zero") (i32.const 2)) 31 (assert_return (invoke "load_at_page_size") (i32.const 0)) 32 (assert_return (invoke "store_at_page_size")) 33 (assert_return (invoke "load_at_page_size") (i32.const 3)) 34 35 36 (module 37 (memory 0) 38 (func (export "grow") (param i32) (result i32) (memory.grow (local.get 0))) 39 ) 40 41 (assert_return (invoke "grow" (i32.const 0)) (i32.const 0)) 42 (assert_return (invoke "grow" (i32.const 1)) (i32.const 0)) 43 (assert_return (invoke "grow" (i32.const 0)) (i32.const 1)) 44 (assert_return (invoke "grow" (i32.const 2)) (i32.const 1)) 45 (assert_return (invoke "grow" (i32.const 800)) (i32.const 3)) 46 (assert_return (invoke "grow" (i32.const 0x10000)) (i32.const -1)) 47 (assert_return (invoke "grow" (i32.const 64736)) (i32.const -1)) 48 (assert_return (invoke "grow" (i32.const 1)) (i32.const 803)) 49 50 (module 51 (memory 0 10) 52 (func (export "grow") (param i32) (result i32) (memory.grow (local.get 0))) 53 ) 54 55 (assert_return (invoke "grow" (i32.const 0)) (i32.const 0)) 56 (assert_return (invoke "grow" (i32.const 1)) (i32.const 0)) 57 (assert_return (invoke "grow" (i32.const 1)) (i32.const 1)) 58 (assert_return (invoke "grow" (i32.const 2)) (i32.const 2)) 59 (assert_return (invoke "grow" (i32.const 6)) (i32.const 4)) 60 (assert_return (invoke "grow" (i32.const 0)) (i32.const 10)) 61 (assert_return (invoke "grow" (i32.const 1)) (i32.const -1)) 62 (assert_return (invoke "grow" (i32.const 0x10000)) (i32.const -1)) 63 64 ;; Test that newly allocated memory (program start and memory.grow) is zeroed 65 66 (module 67 (memory 1) 68 (func (export "grow") (param i32) (result i32) 69 (memory.grow (local.get 0)) 70 ) 71 (func (export "check-memory-zero") (param i32 i32) (result i32) 72 (local i32) 73 (local.set 2 (i32.const 1)) 74 (block 75 (loop 76 (local.set 2 (i32.load8_u (local.get 0))) 77 (br_if 1 (i32.ne (local.get 2) (i32.const 0))) 78 (br_if 1 (i32.ge_u (local.get 0) (local.get 1))) 79 (local.set 0 (i32.add (local.get 0) (i32.const 1))) 80 (br_if 0 (i32.le_u (local.get 0) (local.get 1))) 81 ) 82 ) 83 (local.get 2) 84 ) 85 ) 86 87 (assert_return (invoke "check-memory-zero" (i32.const 0) (i32.const 0xffff)) (i32.const 0)) 88 (assert_return (invoke "grow" (i32.const 1)) (i32.const 1)) 89 (assert_return (invoke "check-memory-zero" (i32.const 0x10000) (i32.const 0x1_ffff)) (i32.const 0)) 90 (assert_return (invoke "grow" (i32.const 1)) (i32.const 2)) 91 (assert_return (invoke "check-memory-zero" (i32.const 0x20000) (i32.const 0x2_ffff)) (i32.const 0)) 92 (assert_return (invoke "grow" (i32.const 1)) (i32.const 3)) 93 (assert_return (invoke "check-memory-zero" (i32.const 0x30000) (i32.const 0x3_ffff)) (i32.const 0)) 94 (assert_return (invoke "grow" (i32.const 1)) (i32.const 4)) 95 (assert_return (invoke "check-memory-zero" (i32.const 0x40000) (i32.const 0x4_ffff)) (i32.const 0)) 96 (assert_return (invoke "grow" (i32.const 1)) (i32.const 5)) 97 (assert_return (invoke "check-memory-zero" (i32.const 0x50000) (i32.const 0x5_ffff)) (i32.const 0)) 98 99 ;; As the argument of control constructs and instructions 100 101 (module 102 (memory 1) 103 104 (func (export "as-br-value") (result i32) 105 (block (result i32) (br 0 (memory.grow (i32.const 0)))) 106 ) 107 108 (func (export "as-br_if-cond") 109 (block (br_if 0 (memory.grow (i32.const 0)))) 110 ) 111 (func (export "as-br_if-value") (result i32) 112 (block (result i32) 113 (drop (br_if 0 (memory.grow (i32.const 0)) (i32.const 1))) (i32.const 7) 114 ) 115 ) 116 (func (export "as-br_if-value-cond") (result i32) 117 (block (result i32) 118 (drop (br_if 0 (i32.const 6) (memory.grow (i32.const 0)))) (i32.const 7) 119 ) 120 ) 121 122 (func (export "as-br_table-index") 123 (block (br_table 0 0 0 (memory.grow (i32.const 0)))) 124 ) 125 (func (export "as-br_table-value") (result i32) 126 (block (result i32) 127 (br_table 0 0 0 (memory.grow (i32.const 0)) (i32.const 1)) (i32.const 7) 128 ) 129 ) 130 (func (export "as-br_table-value-index") (result i32) 131 (block (result i32) 132 (br_table 0 0 (i32.const 6) (memory.grow (i32.const 0))) (i32.const 7) 133 ) 134 ) 135 136 (func (export "as-return-value") (result i32) 137 (return (memory.grow (i32.const 0))) 138 ) 139 140 (func (export "as-if-cond") (result i32) 141 (if (result i32) (memory.grow (i32.const 0)) 142 (then (i32.const 0)) (else (i32.const 1)) 143 ) 144 ) 145 (func (export "as-if-then") (result i32) 146 (if (result i32) (i32.const 1) 147 (then (memory.grow (i32.const 0))) (else (i32.const 0)) 148 ) 149 ) 150 (func (export "as-if-else") (result i32) 151 (if (result i32) (i32.const 0) 152 (then (i32.const 0)) (else (memory.grow (i32.const 0))) 153 ) 154 ) 155 156 (func (export "as-select-first") (param i32 i32) (result i32) 157 (select (memory.grow (i32.const 0)) (local.get 0) (local.get 1)) 158 ) 159 (func (export "as-select-second") (param i32 i32) (result i32) 160 (select (local.get 0) (memory.grow (i32.const 0)) (local.get 1)) 161 ) 162 (func (export "as-select-cond") (result i32) 163 (select (i32.const 0) (i32.const 1) (memory.grow (i32.const 0))) 164 ) 165 166 (func $f (param i32 i32 i32) (result i32) (i32.const -1)) 167 (func (export "as-call-first") (result i32) 168 (call $f (memory.grow (i32.const 0)) (i32.const 2) (i32.const 3)) 169 ) 170 (func (export "as-call-mid") (result i32) 171 (call $f (i32.const 1) (memory.grow (i32.const 0)) (i32.const 3)) 172 ) 173 (func (export "as-call-last") (result i32) 174 (call $f (i32.const 1) (i32.const 2) (memory.grow (i32.const 0))) 175 ) 176 177 (type $sig (func (param i32 i32 i32) (result i32))) 178 (table funcref (elem $f)) 179 (func (export "as-call_indirect-first") (result i32) 180 (call_indirect (type $sig) 181 (memory.grow (i32.const 0)) (i32.const 2) (i32.const 3) (i32.const 0) 182 ) 183 ) 184 (func (export "as-call_indirect-mid") (result i32) 185 (call_indirect (type $sig) 186 (i32.const 1) (memory.grow (i32.const 0)) (i32.const 3) (i32.const 0) 187 ) 188 ) 189 (func (export "as-call_indirect-last") (result i32) 190 (call_indirect (type $sig) 191 (i32.const 1) (i32.const 2) (memory.grow (i32.const 0)) (i32.const 0) 192 ) 193 ) 194 (func (export "as-call_indirect-index") (result i32) 195 (call_indirect (type $sig) 196 (i32.const 1) (i32.const 2) (i32.const 3) (memory.grow (i32.const 0)) 197 ) 198 ) 199 200 (func (export "as-local.set-value") (local i32) 201 (local.set 0 (memory.grow (i32.const 0))) 202 ) 203 (func (export "as-local.tee-value") (result i32) (local i32) 204 (local.tee 0 (memory.grow (i32.const 0))) 205 ) 206 (global $g (mut i32) (i32.const 0)) 207 (func (export "as-global.set-value") (local i32) 208 (global.set $g (memory.grow (i32.const 0))) 209 ) 210 211 (func (export "as-load-address") (result i32) 212 (i32.load (memory.grow (i32.const 0))) 213 ) 214 (func (export "as-loadN-address") (result i32) 215 (i32.load8_s (memory.grow (i32.const 0))) 216 ) 217 218 (func (export "as-store-address") 219 (i32.store (memory.grow (i32.const 0)) (i32.const 7)) 220 ) 221 (func (export "as-store-value") 222 (i32.store (i32.const 2) (memory.grow (i32.const 0))) 223 ) 224 225 (func (export "as-storeN-address") 226 (i32.store8 (memory.grow (i32.const 0)) (i32.const 7)) 227 ) 228 (func (export "as-storeN-value") 229 (i32.store16 (i32.const 2) (memory.grow (i32.const 0))) 230 ) 231 232 (func (export "as-unary-operand") (result i32) 233 (i32.clz (memory.grow (i32.const 0))) 234 ) 235 236 (func (export "as-binary-left") (result i32) 237 (i32.add (memory.grow (i32.const 0)) (i32.const 10)) 238 ) 239 (func (export "as-binary-right") (result i32) 240 (i32.sub (i32.const 10) (memory.grow (i32.const 0))) 241 ) 242 243 (func (export "as-test-operand") (result i32) 244 (i32.eqz (memory.grow (i32.const 0))) 245 ) 246 247 (func (export "as-compare-left") (result i32) 248 (i32.le_s (memory.grow (i32.const 0)) (i32.const 10)) 249 ) 250 (func (export "as-compare-right") (result i32) 251 (i32.ne (i32.const 10) (memory.grow (i32.const 0))) 252 ) 253 254 (func (export "as-memory.grow-size") (result i32) 255 (memory.grow (memory.grow (i32.const 0))) 256 ) 257 ) 258 259 (assert_return (invoke "as-br-value") (i32.const 1)) 260 261 (assert_return (invoke "as-br_if-cond")) 262 (assert_return (invoke "as-br_if-value") (i32.const 1)) 263 (assert_return (invoke "as-br_if-value-cond") (i32.const 6)) 264 265 (assert_return (invoke "as-br_table-index")) 266 (assert_return (invoke "as-br_table-value") (i32.const 1)) 267 (assert_return (invoke "as-br_table-value-index") (i32.const 6)) 268 269 (assert_return (invoke "as-return-value") (i32.const 1)) 270 271 (assert_return (invoke "as-if-cond") (i32.const 0)) 272 (assert_return (invoke "as-if-then") (i32.const 1)) 273 (assert_return (invoke "as-if-else") (i32.const 1)) 274 275 (assert_return (invoke "as-select-first" (i32.const 0) (i32.const 1)) (i32.const 1)) 276 (assert_return (invoke "as-select-second" (i32.const 0) (i32.const 0)) (i32.const 1)) 277 (assert_return (invoke "as-select-cond") (i32.const 0)) 278 279 (assert_return (invoke "as-call-first") (i32.const -1)) 280 (assert_return (invoke "as-call-mid") (i32.const -1)) 281 (assert_return (invoke "as-call-last") (i32.const -1)) 282 283 (assert_return (invoke "as-call_indirect-first") (i32.const -1)) 284 (assert_return (invoke "as-call_indirect-mid") (i32.const -1)) 285 (assert_return (invoke "as-call_indirect-last") (i32.const -1)) 286 (assert_trap (invoke "as-call_indirect-index") "undefined element") 287 288 (assert_return (invoke "as-local.set-value")) 289 (assert_return (invoke "as-local.tee-value") (i32.const 1)) 290 (assert_return (invoke "as-global.set-value")) 291 292 (assert_return (invoke "as-load-address") (i32.const 0)) 293 (assert_return (invoke "as-loadN-address") (i32.const 0)) 294 (assert_return (invoke "as-store-address")) 295 (assert_return (invoke "as-store-value")) 296 (assert_return (invoke "as-storeN-address")) 297 (assert_return (invoke "as-storeN-value")) 298 299 (assert_return (invoke "as-unary-operand") (i32.const 31)) 300 301 (assert_return (invoke "as-binary-left") (i32.const 11)) 302 (assert_return (invoke "as-binary-right") (i32.const 9)) 303 304 (assert_return (invoke "as-test-operand") (i32.const 0)) 305 306 (assert_return (invoke "as-compare-left") (i32.const 1)) 307 (assert_return (invoke "as-compare-right") (i32.const 1)) 308 309 (assert_return (invoke "as-memory.grow-size") (i32.const 1)) 310 311 312 (assert_invalid 313 (module 314 (memory 0) 315 (func $type-size-empty 316 (memory.grow) (drop) 317 ) 318 ) 319 "type mismatch" 320 ) 321 (assert_invalid 322 (module 323 (memory 0) 324 (func $type-size-empty-in-block 325 (i32.const 0) 326 (block (memory.grow) (drop)) 327 ) 328 ) 329 "type mismatch" 330 ) 331 (assert_invalid 332 (module 333 (memory 0) 334 (func $type-size-empty-in-loop 335 (i32.const 0) 336 (loop (memory.grow) (drop)) 337 ) 338 ) 339 "type mismatch" 340 ) 341 (assert_invalid 342 (module 343 (memory 0) 344 (func $type-size-empty-in-then 345 (i32.const 0) (i32.const 0) 346 (if (then (memory.grow) (drop))) 347 ) 348 ) 349 "type mismatch" 350 ) 351 352 353 ;; Type check 354 355 (assert_invalid (module (memory 1) (func (result i32) (memory.grow (f32.const 0)))) "type mismatch")