github.com/wasilibs/wazerox@v0.0.0-20240124024944-4923be63ab5f/internal/integration_test/spectest/v1/testdata/store.wast (about) 1 ;; Store operator as the argument of control constructs and instructions 2 3 (module 4 (memory 1) 5 6 (func (export "as-block-value") 7 (block (i32.store (i32.const 0) (i32.const 1))) 8 ) 9 (func (export "as-loop-value") 10 (loop (i32.store (i32.const 0) (i32.const 1))) 11 ) 12 13 (func (export "as-br-value") 14 (block (br 0 (i32.store (i32.const 0) (i32.const 1)))) 15 ) 16 (func (export "as-br_if-value") 17 (block 18 (br_if 0 (i32.store (i32.const 0) (i32.const 1)) (i32.const 1)) 19 ) 20 ) 21 (func (export "as-br_if-value-cond") 22 (block 23 (br_if 0 (i32.const 6) (i32.store (i32.const 0) (i32.const 1))) 24 ) 25 ) 26 (func (export "as-br_table-value") 27 (block 28 (br_table 0 (i32.store (i32.const 0) (i32.const 1)) (i32.const 1)) 29 ) 30 ) 31 32 (func (export "as-return-value") 33 (return (i32.store (i32.const 0) (i32.const 1))) 34 ) 35 36 (func (export "as-if-then") 37 (if (i32.const 1) (then (i32.store (i32.const 0) (i32.const 1)))) 38 ) 39 (func (export "as-if-else") 40 (if (i32.const 0) (then) (else (i32.store (i32.const 0) (i32.const 1)))) 41 ) 42 ) 43 44 (assert_return (invoke "as-block-value")) 45 (assert_return (invoke "as-loop-value")) 46 47 (assert_return (invoke "as-br-value")) 48 (assert_return (invoke "as-br_if-value")) 49 (assert_return (invoke "as-br_if-value-cond")) 50 (assert_return (invoke "as-br_table-value")) 51 52 (assert_return (invoke "as-return-value")) 53 54 (assert_return (invoke "as-if-then")) 55 (assert_return (invoke "as-if-else")) 56 57 (assert_malformed 58 (module quote 59 "(memory 1)" 60 "(func (param i32) (i32.store32 (local.get 0) (i32.const 0)))" 61 ) 62 "unknown operator" 63 ) 64 (assert_malformed 65 (module quote 66 "(memory 1)" 67 "(func (param i32) (i32.store64 (local.get 0) (i64.const 0)))" 68 ) 69 "unknown operator" 70 ) 71 72 (assert_malformed 73 (module quote 74 "(memory 1)" 75 "(func (param i32) (i64.store64 (local.get 0) (i64.const 0)))" 76 ) 77 "unknown operator" 78 ) 79 80 (assert_malformed 81 (module quote 82 "(memory 1)" 83 "(func (param i32) (f32.store32 (local.get 0) (f32.const 0)))" 84 ) 85 "unknown operator" 86 ) 87 (assert_malformed 88 (module quote 89 "(memory 1)" 90 "(func (param i32) (f32.store64 (local.get 0) (f64.const 0)))" 91 ) 92 "unknown operator" 93 ) 94 95 (assert_malformed 96 (module quote 97 "(memory 1)" 98 "(func (param i32) (f64.store32 (local.get 0) (f32.const 0)))" 99 ) 100 "unknown operator" 101 ) 102 (assert_malformed 103 (module quote 104 "(memory 1)" 105 "(func (param i32) (f64.store64 (local.get 0) (f64.const 0)))" 106 ) 107 "unknown operator" 108 ) 109 ;; store should have no retval 110 111 (assert_invalid 112 (module (memory 1) (func (param i32) (result i32) (i32.store (i32.const 0) (i32.const 1)))) 113 "type mismatch" 114 ) 115 (assert_invalid 116 (module (memory 1) (func (param i64) (result i64) (i64.store (i32.const 0) (i64.const 1)))) 117 "type mismatch" 118 ) 119 (assert_invalid 120 (module (memory 1) (func (param f32) (result f32) (f32.store (i32.const 0) (f32.const 1)))) 121 "type mismatch" 122 ) 123 (assert_invalid 124 (module (memory 1) (func (param f64) (result f64) (f64.store (i32.const 0) (f64.const 1)))) 125 "type mismatch" 126 ) 127 (assert_invalid 128 (module (memory 1) (func (param i32) (result i32) (i32.store8 (i32.const 0) (i32.const 1)))) 129 "type mismatch" 130 ) 131 (assert_invalid 132 (module (memory 1) (func (param i32) (result i32) (i32.store16 (i32.const 0) (i32.const 1)))) 133 "type mismatch" 134 ) 135 (assert_invalid 136 (module (memory 1) (func (param i64) (result i64) (i64.store8 (i32.const 0) (i64.const 1)))) 137 "type mismatch" 138 ) 139 (assert_invalid 140 (module (memory 1) (func (param i64) (result i64) (i64.store16 (i32.const 0) (i64.const 1)))) 141 "type mismatch" 142 ) 143 (assert_invalid 144 (module (memory 1) (func (param i64) (result i64) (i64.store32 (i32.const 0) (i64.const 1)))) 145 "type mismatch" 146 ) 147 148 149 (assert_invalid 150 (module 151 (memory 1) 152 (func $type-address-empty 153 (i32.store) 154 ) 155 ) 156 "type mismatch" 157 ) 158 (assert_invalid 159 (module 160 (memory 1) 161 (func $type-value-empty 162 (i32.const 0) (i32.store) 163 ) 164 ) 165 "type mismatch" 166 ) 167 (assert_invalid 168 (module 169 (memory 1) 170 (func $type-address-empty-in-block 171 (i32.const 0) (i32.const 0) 172 (block (i32.store)) 173 ) 174 ) 175 "type mismatch" 176 ) 177 (assert_invalid 178 (module 179 (memory 1) 180 (func $type-value-empty-in-block 181 (i32.const 0) 182 (block (i32.const 0) (i32.store)) 183 ) 184 ) 185 "type mismatch" 186 ) 187 (assert_invalid 188 (module 189 (memory 1) 190 (func $type-address-empty-in-loop 191 (i32.const 0) (i32.const 0) 192 (loop (i32.store)) 193 ) 194 ) 195 "type mismatch" 196 ) 197 (assert_invalid 198 (module 199 (memory 1) 200 (func $type-value-empty-in-loop 201 (i32.const 0) 202 (loop (i32.const 0) (i32.store)) 203 ) 204 ) 205 "type mismatch" 206 ) 207 (assert_invalid 208 (module 209 (memory 1) 210 (func $type-address-empty-in-then 211 (i32.const 0) (i32.const 0) 212 (if (then (i32.store))) 213 ) 214 ) 215 "type mismatch" 216 ) 217 (assert_invalid 218 (module 219 (memory 1) 220 (func $type-value-empty-in-then 221 (i32.const 0) 222 (if (then (i32.const 0) (i32.store))) 223 ) 224 ) 225 "type mismatch" 226 ) 227 (assert_invalid 228 (module 229 (memory 1) 230 (func $type-address-empty-in-else 231 (i32.const 0) (i32.const 0) 232 (if (result i32) (then (i32.const 0)) (else (i32.store))) 233 ) 234 ) 235 "type mismatch" 236 ) 237 (assert_invalid 238 (module 239 (memory 1) 240 (func $type-value-empty-in-else 241 (i32.const 0) 242 (if (result i32) (then (i32.const 0)) (else (i32.const 0) (i32.store))) 243 ) 244 ) 245 "type mismatch" 246 ) 247 (assert_invalid 248 (module 249 (memory 1) 250 (func $type-address-empty-in-br 251 (i32.const 0) (i32.const 0) 252 (block (br 0 (i32.store))) 253 ) 254 ) 255 "type mismatch" 256 ) 257 (assert_invalid 258 (module 259 (memory 1) 260 (func $type-value-empty-in-br 261 (i32.const 0) 262 (block (br 0 (i32.const 0) (i32.store))) 263 ) 264 ) 265 "type mismatch" 266 ) 267 (assert_invalid 268 (module 269 (memory 1) 270 (func $type-address-empty-in-br_if 271 (i32.const 0) (i32.const 0) 272 (block (br_if 0 (i32.store) (i32.const 1)) ) 273 ) 274 ) 275 "type mismatch" 276 ) 277 (assert_invalid 278 (module 279 (memory 1) 280 (func $type-value-empty-in-br_if 281 (i32.const 0) 282 (block (br_if 0 (i32.const 0) (i32.store) (i32.const 1)) ) 283 ) 284 ) 285 "type mismatch" 286 ) 287 (assert_invalid 288 (module 289 (memory 1) 290 (func $type-address-empty-in-br_table 291 (i32.const 0) (i32.const 0) 292 (block (br_table 0 (i32.store))) 293 ) 294 ) 295 "type mismatch" 296 ) 297 (assert_invalid 298 (module 299 (memory 1) 300 (func $type-value-empty-in-br_table 301 (i32.const 0) 302 (block (br_table 0 (i32.const 0) (i32.store))) 303 ) 304 ) 305 "type mismatch" 306 ) 307 (assert_invalid 308 (module 309 (memory 1) 310 (func $type-address-empty-in-return 311 (return (i32.store)) 312 ) 313 ) 314 "type mismatch" 315 ) 316 (assert_invalid 317 (module 318 (memory 1) 319 (func $type-value-empty-in-return 320 (return (i32.const 0) (i32.store)) 321 ) 322 ) 323 "type mismatch" 324 ) 325 (assert_invalid 326 (module 327 (memory 1) 328 (func $type-address-empty-in-select 329 (select (i32.store) (i32.const 1) (i32.const 2)) 330 ) 331 ) 332 "type mismatch" 333 ) 334 (assert_invalid 335 (module 336 (memory 1) 337 (func $type-value-empty-in-select 338 (select (i32.const 0) (i32.store) (i32.const 1) (i32.const 2)) 339 ) 340 ) 341 "type mismatch" 342 ) 343 (assert_invalid 344 (module 345 (memory 1) 346 (func $type-address-empty-in-call 347 (call 1 (i32.store)) 348 ) 349 (func (param i32) (result i32) (local.get 0)) 350 ) 351 "type mismatch" 352 ) 353 (assert_invalid 354 (module 355 (memory 1) 356 (func $type-value-empty-in-call 357 (call 1 (i32.const 0) (i32.store)) 358 ) 359 (func (param i32) (result i32) (local.get 0)) 360 ) 361 "type mismatch" 362 ) 363 (assert_invalid 364 (module 365 (memory 1) 366 (func $f (param i32) (result i32) (local.get 0)) 367 (type $sig (func (param i32) (result i32))) 368 (table funcref (elem $f)) 369 (func $type-address-empty-in-call_indirect 370 (block (result i32) 371 (call_indirect (type $sig) 372 (i32.store) (i32.const 0) 373 ) 374 ) 375 ) 376 ) 377 "type mismatch" 378 ) 379 (assert_invalid 380 (module 381 (memory 1) 382 (func $f (param i32) (result i32) (local.get 0)) 383 (type $sig (func (param i32) (result i32))) 384 (table funcref (elem $f)) 385 (func $type-value-empty-in-call_indirect 386 (block (result i32) 387 (call_indirect (type $sig) 388 (i32.const 0) (i32.store) (i32.const 0) 389 ) 390 ) 391 ) 392 ) 393 "type mismatch" 394 ) 395 396 397 ;; Type check 398 399 (assert_invalid (module (memory 1) (func (i32.store (f32.const 0) (i32.const 0)))) "type mismatch") 400 (assert_invalid (module (memory 1) (func (i32.store8 (f32.const 0) (i32.const 0)))) "type mismatch") 401 (assert_invalid (module (memory 1) (func (i32.store16 (f32.const 0) (i32.const 0)))) "type mismatch") 402 (assert_invalid (module (memory 1) (func (i64.store (f32.const 0) (i32.const 0)))) "type mismatch") 403 (assert_invalid (module (memory 1) (func (i64.store8 (f32.const 0) (i64.const 0)))) "type mismatch") 404 (assert_invalid (module (memory 1) (func (i64.store16 (f32.const 0) (i64.const 0)))) "type mismatch") 405 (assert_invalid (module (memory 1) (func (i64.store32 (f32.const 0) (i64.const 0)))) "type mismatch") 406 (assert_invalid (module (memory 1) (func (f32.store (f32.const 0) (f32.const 0)))) "type mismatch") 407 (assert_invalid (module (memory 1) (func (f64.store (f32.const 0) (f64.const 0)))) "type mismatch") 408 409 (assert_invalid (module (memory 1) (func (i32.store (i32.const 0) (f32.const 0)))) "type mismatch") 410 (assert_invalid (module (memory 1) (func (i32.store8 (i32.const 0) (f32.const 0)))) "type mismatch") 411 (assert_invalid (module (memory 1) (func (i32.store16 (i32.const 0) (f32.const 0)))) "type mismatch") 412 (assert_invalid (module (memory 1) (func (i64.store (i32.const 0) (f32.const 0)))) "type mismatch") 413 (assert_invalid (module (memory 1) (func (i64.store8 (i32.const 0) (f64.const 0)))) "type mismatch") 414 (assert_invalid (module (memory 1) (func (i64.store16 (i32.const 0) (f64.const 0)))) "type mismatch") 415 (assert_invalid (module (memory 1) (func (i64.store32 (i32.const 0) (f64.const 0)))) "type mismatch") 416 (assert_invalid (module (memory 1) (func (f32.store (i32.const 0) (i32.const 0)))) "type mismatch") 417 (assert_invalid (module (memory 1) (func (f64.store (i32.const 0) (i64.const 0)))) "type mismatch")