...

Text file src/github.com/tetratelabs/wazero/internal/integration_test/spectest/v2/testdata/select.wast

Documentation: github.com/tetratelabs/wazero/internal/integration_test/spectest/v2/testdata

     1(module
     2  ;; Auxiliary
     3  (func $dummy)
     4  (table $tab funcref (elem $dummy))
     5  (memory 1)
     6
     7  (func (export "select-i32") (param i32 i32 i32) (result i32)
     8    (select (local.get 0) (local.get 1) (local.get 2))
     9  )
    10  (func (export "select-i64") (param i64 i64 i32) (result i64)
    11    (select (local.get 0) (local.get 1) (local.get 2))
    12  )
    13  (func (export "select-f32") (param f32 f32 i32) (result f32)
    14    (select (local.get 0) (local.get 1) (local.get 2))
    15  )
    16  (func (export "select-f64") (param f64 f64 i32) (result f64)
    17    (select (local.get 0) (local.get 1) (local.get 2))
    18  )
    19
    20  (func (export "select-i32-t") (param i32 i32 i32) (result i32)
    21    (select (result i32) (local.get 0) (local.get 1) (local.get 2))
    22  )
    23  (func (export "select-i64-t") (param i64 i64 i32) (result i64)
    24    (select (result i64) (local.get 0) (local.get 1) (local.get 2))
    25  )
    26  (func (export "select-f32-t") (param f32 f32 i32) (result f32)
    27    (select (result f32) (local.get 0) (local.get 1) (local.get 2))
    28  )
    29  (func (export "select-f64-t") (param f64 f64 i32) (result f64)
    30    (select (result f64) (local.get 0) (local.get 1) (local.get 2))
    31  )
    32  (func (export "select-funcref") (param funcref funcref i32) (result funcref)
    33    (select (result funcref) (local.get 0) (local.get 1) (local.get 2))
    34  )
    35  (func (export "select-externref") (param externref externref i32) (result externref)
    36    (select (result externref) (local.get 0) (local.get 1) (local.get 2))
    37  )
    38
    39  ;; As the argument of control constructs and instructions
    40
    41  (func (export "as-select-first") (param i32) (result i32)
    42    (select (select (i32.const 0) (i32.const 1) (local.get 0)) (i32.const 2) (i32.const 3))
    43  )
    44  (func (export "as-select-mid") (param i32) (result i32)
    45    (select (i32.const 2) (select (i32.const 0) (i32.const 1) (local.get 0)) (i32.const 3))
    46  )
    47  (func (export "as-select-last") (param i32) (result i32)
    48    (select (i32.const 2) (i32.const 3) (select (i32.const 0) (i32.const 1) (local.get 0)))
    49  )
    50
    51  (func (export "as-loop-first") (param i32) (result i32)
    52    (loop (result i32) (select (i32.const 2) (i32.const 3) (local.get 0)) (call $dummy) (call $dummy))
    53  )
    54  (func (export "as-loop-mid") (param i32) (result i32)
    55    (loop (result i32) (call $dummy) (select (i32.const 2) (i32.const 3) (local.get 0)) (call $dummy))
    56  )
    57  (func (export "as-loop-last") (param i32) (result i32)
    58    (loop (result i32) (call $dummy) (call $dummy) (select (i32.const 2) (i32.const 3) (local.get 0)))
    59  )
    60
    61  (func (export "as-if-condition") (param i32)
    62    (select (i32.const 2) (i32.const 3) (local.get 0)) (if (then (call $dummy)))
    63  )
    64  (func (export "as-if-then") (param i32) (result i32)
    65    (if (result i32) (i32.const 1) (then (select (i32.const 2) (i32.const 3) (local.get 0))) (else (i32.const 4)))
    66  )
    67  (func (export "as-if-else") (param i32) (result i32)
    68    (if (result i32) (i32.const 0) (then (i32.const 2)) (else (select (i32.const 2) (i32.const 3) (local.get 0))))
    69  )
    70
    71  (func (export "as-br_if-first") (param i32) (result i32)
    72    (block (result i32) (br_if 0 (select (i32.const 2) (i32.const 3) (local.get 0)) (i32.const 4)))
    73  )
    74  (func (export "as-br_if-last") (param i32) (result i32)
    75    (block (result i32) (br_if 0 (i32.const 2) (select (i32.const 2) (i32.const 3) (local.get 0))))
    76  )
    77
    78  (func (export "as-br_table-first") (param i32) (result i32)
    79    (block (result i32) (select (i32.const 2) (i32.const 3) (local.get 0)) (i32.const 2) (br_table 0 0))
    80  )
    81  (func (export "as-br_table-last") (param i32) (result i32)
    82    (block (result i32) (i32.const 2) (select (i32.const 2) (i32.const 3) (local.get 0)) (br_table 0 0))
    83  )
    84
    85  (func $func (param i32 i32) (result i32) (local.get 0))
    86  (type $check (func (param i32 i32) (result i32)))
    87  (table $t funcref (elem $func))
    88  (func (export "as-call_indirect-first") (param i32) (result i32)
    89    (block (result i32)
    90      (call_indirect $t (type $check)
    91        (select (i32.const 2) (i32.const 3) (local.get 0)) (i32.const 1) (i32.const 0)
    92      )
    93    )
    94  )
    95  (func (export "as-call_indirect-mid") (param i32) (result i32)
    96    (block (result i32)
    97      (call_indirect $t (type $check)
    98        (i32.const 1) (select (i32.const 2) (i32.const 3) (local.get 0)) (i32.const 0)
    99      )
   100    )
   101  )
   102  (func (export "as-call_indirect-last") (param i32) (result i32)
   103    (block (result i32)
   104      (call_indirect $t (type $check)
   105        (i32.const 1) (i32.const 4) (select (i32.const 2) (i32.const 3) (local.get 0))
   106      )
   107    )
   108  )
   109
   110  (func (export "as-store-first") (param i32)
   111    (select (i32.const 0) (i32.const 4) (local.get 0)) (i32.const 1) (i32.store)
   112  )
   113  (func (export "as-store-last") (param i32)
   114    (i32.const 8) (select (i32.const 1) (i32.const 2) (local.get 0)) (i32.store)
   115  )
   116
   117  (func (export "as-memory.grow-value") (param i32) (result i32)
   118    (memory.grow (select (i32.const 1) (i32.const 2) (local.get 0)))
   119  )
   120
   121  (func $f (param i32) (result i32) (local.get 0))
   122
   123  (func (export "as-call-value") (param i32) (result i32)
   124    (call $f (select (i32.const 1) (i32.const 2) (local.get 0)))
   125  )
   126  (func (export "as-return-value") (param i32) (result i32)
   127    (select (i32.const 1) (i32.const 2) (local.get 0)) (return)
   128  )
   129  (func (export "as-drop-operand") (param i32)
   130    (drop (select (i32.const 1) (i32.const 2) (local.get 0)))
   131  )
   132  (func (export "as-br-value") (param i32) (result i32)
   133    (block (result i32) (br 0 (select (i32.const 1) (i32.const 2) (local.get 0))))
   134  )
   135  (func (export "as-local.set-value") (param i32) (result i32)
   136    (local i32) (local.set 0 (select (i32.const 1) (i32.const 2) (local.get 0))) (local.get 0)
   137  )
   138  (func (export "as-local.tee-value") (param i32) (result i32)
   139    (local.tee 0 (select (i32.const 1) (i32.const 2) (local.get 0)))
   140  )
   141  (global $a (mut i32) (i32.const 10))
   142  (func (export "as-global.set-value") (param i32) (result i32)
   143    (global.set $a (select (i32.const 1) (i32.const 2) (local.get 0)))
   144    (global.get $a)
   145  )
   146  (func (export "as-load-operand") (param i32) (result i32)
   147    (i32.load (select (i32.const 0) (i32.const 4) (local.get 0)))
   148  )
   149
   150  (func (export "as-unary-operand") (param i32) (result i32)
   151    (i32.eqz (select (i32.const 0) (i32.const 1) (local.get 0)))
   152  )
   153  (func (export "as-binary-operand") (param i32) (result i32)
   154    (i32.mul
   155      (select (i32.const 1) (i32.const 2) (local.get 0))
   156      (select (i32.const 1) (i32.const 2) (local.get 0))
   157    )
   158  )
   159  (func (export "as-test-operand") (param i32) (result i32)
   160    (block (result i32)
   161      (i32.eqz (select (i32.const 0) (i32.const 1) (local.get 0)))
   162    )
   163  )
   164
   165  (func (export "as-compare-left") (param i32) (result i32)
   166    (block (result i32)
   167      (i32.le_s (select (i32.const 1) (i32.const 2) (local.get 0)) (i32.const 1))
   168    )
   169  )
   170  (func (export "as-compare-right") (param i32) (result i32)
   171    (block (result i32)
   172      (i32.ne (i32.const 1) (select (i32.const 0) (i32.const 1) (local.get 0)))
   173    )
   174  )
   175
   176  (func (export "as-convert-operand") (param i32) (result i32)
   177    (block (result i32)
   178      (i32.wrap_i64 (select (i64.const 1) (i64.const 0) (local.get 0)))
   179    )
   180  )
   181)
   182
   183(assert_return (invoke "select-i32" (i32.const 1) (i32.const 2) (i32.const 1)) (i32.const 1))
   184(assert_return (invoke "select-i64" (i64.const 2) (i64.const 1) (i32.const 1)) (i64.const 2))
   185(assert_return (invoke "select-f32" (f32.const 1) (f32.const 2) (i32.const 1)) (f32.const 1))
   186(assert_return (invoke "select-f64" (f64.const 1) (f64.const 2) (i32.const 1)) (f64.const 1))
   187
   188(assert_return (invoke "select-i32" (i32.const 1) (i32.const 2) (i32.const 0)) (i32.const 2))
   189(assert_return (invoke "select-i32" (i32.const 2) (i32.const 1) (i32.const 0)) (i32.const 1))
   190(assert_return (invoke "select-i64" (i64.const 2) (i64.const 1) (i32.const -1)) (i64.const 2))
   191(assert_return (invoke "select-i64" (i64.const 2) (i64.const 1) (i32.const 0xf0f0f0f0)) (i64.const 2))
   192
   193(assert_return (invoke "select-f32" (f32.const nan) (f32.const 1) (i32.const 1)) (f32.const nan))
   194(assert_return (invoke "select-f32" (f32.const nan:0x20304) (f32.const 1) (i32.const 1)) (f32.const nan:0x20304))
   195(assert_return (invoke "select-f32" (f32.const nan) (f32.const 1) (i32.const 0)) (f32.const 1))
   196(assert_return (invoke "select-f32" (f32.const nan:0x20304) (f32.const 1) (i32.const 0)) (f32.const 1))
   197(assert_return (invoke "select-f32" (f32.const 2) (f32.const nan) (i32.const 1)) (f32.const 2))
   198(assert_return (invoke "select-f32" (f32.const 2) (f32.const nan:0x20304) (i32.const 1)) (f32.const 2))
   199(assert_return (invoke "select-f32" (f32.const 2) (f32.const nan) (i32.const 0)) (f32.const nan))
   200(assert_return (invoke "select-f32" (f32.const 2) (f32.const nan:0x20304) (i32.const 0)) (f32.const nan:0x20304))
   201
   202(assert_return (invoke "select-f64" (f64.const nan) (f64.const 1) (i32.const 1)) (f64.const nan))
   203(assert_return (invoke "select-f64" (f64.const nan:0x20304) (f64.const 1) (i32.const 1)) (f64.const nan:0x20304))
   204(assert_return (invoke "select-f64" (f64.const nan) (f64.const 1) (i32.const 0)) (f64.const 1))
   205(assert_return (invoke "select-f64" (f64.const nan:0x20304) (f64.const 1) (i32.const 0)) (f64.const 1))
   206(assert_return (invoke "select-f64" (f64.const 2) (f64.const nan) (i32.const 1)) (f64.const 2))
   207(assert_return (invoke "select-f64" (f64.const 2) (f64.const nan:0x20304) (i32.const 1)) (f64.const 2))
   208(assert_return (invoke "select-f64" (f64.const 2) (f64.const nan) (i32.const 0)) (f64.const nan))
   209(assert_return (invoke "select-f64" (f64.const 2) (f64.const nan:0x20304) (i32.const 0)) (f64.const nan:0x20304))
   210
   211(assert_return (invoke "select-i32-t" (i32.const 1) (i32.const 2) (i32.const 1)) (i32.const 1))
   212(assert_return (invoke "select-i64-t" (i64.const 2) (i64.const 1) (i32.const 1)) (i64.const 2))
   213(assert_return (invoke "select-f32-t" (f32.const 1) (f32.const 2) (i32.const 1)) (f32.const 1))
   214(assert_return (invoke "select-f64-t" (f64.const 1) (f64.const 2) (i32.const 1)) (f64.const 1))
   215(assert_return (invoke "select-funcref" (ref.null func) (ref.null func) (i32.const 1)) (ref.null func))
   216(assert_return (invoke "select-externref" (ref.extern 1) (ref.extern 2) (i32.const 1)) (ref.extern 1))
   217
   218(assert_return (invoke "select-i32-t" (i32.const 1) (i32.const 2) (i32.const 0)) (i32.const 2))
   219(assert_return (invoke "select-i32-t" (i32.const 2) (i32.const 1) (i32.const 0)) (i32.const 1))
   220(assert_return (invoke "select-i64-t" (i64.const 2) (i64.const 1) (i32.const -1)) (i64.const 2))
   221(assert_return (invoke "select-i64-t" (i64.const 2) (i64.const 1) (i32.const 0xf0f0f0f0)) (i64.const 2))
   222(assert_return (invoke "select-externref" (ref.extern 1) (ref.extern 2) (i32.const 0)) (ref.extern 2))
   223(assert_return (invoke "select-externref" (ref.extern 2) (ref.extern 1) (i32.const 0)) (ref.extern 1))
   224
   225(assert_return (invoke "select-f32-t" (f32.const nan) (f32.const 1) (i32.const 1)) (f32.const nan))
   226(assert_return (invoke "select-f32-t" (f32.const nan:0x20304) (f32.const 1) (i32.const 1)) (f32.const nan:0x20304))
   227(assert_return (invoke "select-f32-t" (f32.const nan) (f32.const 1) (i32.const 0)) (f32.const 1))
   228(assert_return (invoke "select-f32-t" (f32.const nan:0x20304) (f32.const 1) (i32.const 0)) (f32.const 1))
   229(assert_return (invoke "select-f32-t" (f32.const 2) (f32.const nan) (i32.const 1)) (f32.const 2))
   230(assert_return (invoke "select-f32-t" (f32.const 2) (f32.const nan:0x20304) (i32.const 1)) (f32.const 2))
   231(assert_return (invoke "select-f32-t" (f32.const 2) (f32.const nan) (i32.const 0)) (f32.const nan))
   232(assert_return (invoke "select-f32-t" (f32.const 2) (f32.const nan:0x20304) (i32.const 0)) (f32.const nan:0x20304))
   233
   234(assert_return (invoke "select-f64-t" (f64.const nan) (f64.const 1) (i32.const 1)) (f64.const nan))
   235(assert_return (invoke "select-f64-t" (f64.const nan:0x20304) (f64.const 1) (i32.const 1)) (f64.const nan:0x20304))
   236(assert_return (invoke "select-f64-t" (f64.const nan) (f64.const 1) (i32.const 0)) (f64.const 1))
   237(assert_return (invoke "select-f64-t" (f64.const nan:0x20304) (f64.const 1) (i32.const 0)) (f64.const 1))
   238(assert_return (invoke "select-f64-t" (f64.const 2) (f64.const nan) (i32.const 1)) (f64.const 2))
   239(assert_return (invoke "select-f64-t" (f64.const 2) (f64.const nan:0x20304) (i32.const 1)) (f64.const 2))
   240(assert_return (invoke "select-f64-t" (f64.const 2) (f64.const nan) (i32.const 0)) (f64.const nan))
   241(assert_return (invoke "select-f64-t" (f64.const 2) (f64.const nan:0x20304) (i32.const 0)) (f64.const nan:0x20304))
   242
   243(assert_return (invoke "as-select-first" (i32.const 0)) (i32.const 1))
   244(assert_return (invoke "as-select-first" (i32.const 1)) (i32.const 0))
   245(assert_return (invoke "as-select-mid" (i32.const 0)) (i32.const 2))
   246(assert_return (invoke "as-select-mid" (i32.const 1)) (i32.const 2))
   247(assert_return (invoke "as-select-last" (i32.const 0)) (i32.const 2))
   248(assert_return (invoke "as-select-last" (i32.const 1)) (i32.const 3))
   249
   250(assert_return (invoke "as-loop-first" (i32.const 0)) (i32.const 3))
   251(assert_return (invoke "as-loop-first" (i32.const 1)) (i32.const 2))
   252(assert_return (invoke "as-loop-mid" (i32.const 0)) (i32.const 3))
   253(assert_return (invoke "as-loop-mid" (i32.const 1)) (i32.const 2))
   254(assert_return (invoke "as-loop-last" (i32.const 0)) (i32.const 3))
   255(assert_return (invoke "as-loop-last" (i32.const 1)) (i32.const 2))
   256
   257(assert_return (invoke "as-if-condition" (i32.const 0)))
   258(assert_return (invoke "as-if-condition" (i32.const 1)))
   259(assert_return (invoke "as-if-then" (i32.const 0)) (i32.const 3))
   260(assert_return (invoke "as-if-then" (i32.const 1)) (i32.const 2))
   261(assert_return (invoke "as-if-else" (i32.const 0)) (i32.const 3))
   262(assert_return (invoke "as-if-else" (i32.const 1)) (i32.const 2))
   263
   264(assert_return (invoke "as-br_if-first" (i32.const 0)) (i32.const 3))
   265(assert_return (invoke "as-br_if-first" (i32.const 1)) (i32.const 2))
   266(assert_return (invoke "as-br_if-last" (i32.const 0)) (i32.const 2))
   267(assert_return (invoke "as-br_if-last" (i32.const 1)) (i32.const 2))
   268
   269(assert_return (invoke "as-br_table-first" (i32.const 0)) (i32.const 3))
   270(assert_return (invoke "as-br_table-first" (i32.const 1)) (i32.const 2))
   271(assert_return (invoke "as-br_table-last" (i32.const 0)) (i32.const 2))
   272(assert_return (invoke "as-br_table-last" (i32.const 1)) (i32.const 2))
   273
   274(assert_return (invoke "as-call_indirect-first" (i32.const 0)) (i32.const 3))
   275(assert_return (invoke "as-call_indirect-first" (i32.const 1)) (i32.const 2))
   276(assert_return (invoke "as-call_indirect-mid" (i32.const 0)) (i32.const 1))
   277(assert_return (invoke "as-call_indirect-mid" (i32.const 1)) (i32.const 1))
   278(assert_trap (invoke "as-call_indirect-last" (i32.const 0)) "undefined element")
   279(assert_trap (invoke "as-call_indirect-last" (i32.const 1)) "undefined element")
   280
   281(assert_return (invoke "as-store-first" (i32.const 0)))
   282(assert_return (invoke "as-store-first" (i32.const 1)))
   283(assert_return (invoke "as-store-last" (i32.const 0)))
   284(assert_return (invoke "as-store-last" (i32.const 1)))
   285
   286(assert_return (invoke "as-memory.grow-value" (i32.const 0)) (i32.const 1))
   287(assert_return (invoke "as-memory.grow-value" (i32.const 1)) (i32.const 3))
   288
   289(assert_return (invoke "as-call-value" (i32.const 0)) (i32.const 2))
   290(assert_return (invoke "as-call-value" (i32.const 1)) (i32.const 1))
   291(assert_return (invoke "as-return-value" (i32.const 0)) (i32.const 2))
   292(assert_return (invoke "as-return-value" (i32.const 1)) (i32.const 1))
   293(assert_return (invoke "as-drop-operand" (i32.const 0)))
   294(assert_return (invoke "as-drop-operand" (i32.const 1)))
   295(assert_return (invoke "as-br-value" (i32.const 0)) (i32.const 2))
   296(assert_return (invoke "as-br-value" (i32.const 1)) (i32.const 1))
   297(assert_return (invoke "as-local.set-value" (i32.const 0)) (i32.const 2))
   298(assert_return (invoke "as-local.set-value" (i32.const 1)) (i32.const 1))
   299(assert_return (invoke "as-local.tee-value" (i32.const 0)) (i32.const 2))
   300(assert_return (invoke "as-local.tee-value" (i32.const 1)) (i32.const 1))
   301(assert_return (invoke "as-global.set-value" (i32.const 0)) (i32.const 2))
   302(assert_return (invoke "as-global.set-value" (i32.const 1)) (i32.const 1))
   303(assert_return (invoke "as-load-operand" (i32.const 0)) (i32.const 1))
   304(assert_return (invoke "as-load-operand" (i32.const 1)) (i32.const 1))
   305
   306(assert_return (invoke "as-unary-operand" (i32.const 0)) (i32.const 0))
   307(assert_return (invoke "as-unary-operand" (i32.const 1)) (i32.const 1))
   308(assert_return (invoke "as-binary-operand" (i32.const 0)) (i32.const 4))
   309(assert_return (invoke "as-binary-operand" (i32.const 1)) (i32.const 1))
   310(assert_return (invoke "as-test-operand" (i32.const 0)) (i32.const 0))
   311(assert_return (invoke "as-test-operand" (i32.const 1)) (i32.const 1))
   312(assert_return (invoke "as-compare-left" (i32.const 0)) (i32.const 0))
   313(assert_return (invoke "as-compare-left" (i32.const 1)) (i32.const 1))
   314(assert_return (invoke "as-compare-right" (i32.const 0)) (i32.const 0))
   315(assert_return (invoke "as-compare-right" (i32.const 1)) (i32.const 1))
   316(assert_return (invoke "as-convert-operand" (i32.const 0)) (i32.const 0))
   317(assert_return (invoke "as-convert-operand" (i32.const 1)) (i32.const 1))
   318
   319(assert_invalid
   320  (module (func $arity-0-implicit (select (nop) (nop) (i32.const 1))))
   321  "type mismatch"
   322)
   323(assert_invalid
   324  (module (func $arity-0 (select (result) (nop) (nop) (i32.const 1))))
   325  "invalid result arity"
   326)
   327(assert_invalid
   328  (module (func $arity-2 (result i32 i32)
   329    (select (result i32 i32)
   330      (i32.const 0) (i32.const 0)
   331      (i32.const 0) (i32.const 0)
   332      (i32.const 1)
   333    )
   334  ))
   335  "invalid result arity"
   336)
   337
   338
   339(assert_invalid
   340  (module (func $type-externref-implicit (param $r externref)
   341    (drop (select (local.get $r) (local.get $r) (i32.const 1)))
   342  ))
   343  "type mismatch"
   344)
   345
   346(assert_invalid
   347  (module (func $type-num-vs-num
   348    (drop (select (i32.const 1) (i64.const 1) (i32.const 1)))
   349  ))
   350  "type mismatch"
   351)
   352(assert_invalid
   353  (module (func $type-num-vs-num
   354    (drop (select (i32.const 1) (f32.const 1.0) (i32.const 1)))
   355  ))
   356  "type mismatch"
   357)
   358(assert_invalid
   359  (module (func $type-num-vs-num
   360    (drop (select (i32.const 1) (f64.const 1.0) (i32.const 1)))
   361  ))
   362  "type mismatch"
   363)
   364
   365(assert_invalid
   366  (module (func $type-num-vs-num (select (i32.const 1) (i64.const 1) (i32.const 1)) (drop)))
   367  "type mismatch"
   368)
   369(assert_invalid
   370  (module (func $type-num-vs-num (select (i32.const 1) (f32.const 1.0) (i32.const 1)) (drop)))
   371  "type mismatch"
   372)
   373(assert_invalid
   374  (module (func $type-num-vs-num (select (i32.const 1) (i64.const 1) (i32.const 1)) (drop)))
   375  "type mismatch"
   376)
   377(assert_invalid
   378  (module (func $type-num-vs-num (select (i32.const 1) (f32.const 1.0) (i32.const 1)) (drop)))
   379  "type mismatch"
   380)
   381(assert_invalid
   382  (module (func $type-num-vs-num (select (i32.const 1) (f64.const 1.0) (i32.const 1)) (drop)))
   383  "type mismatch"
   384)
   385
   386
   387(assert_invalid
   388  (module
   389    (func $type-1st-operand-empty
   390      (select) (drop)
   391    )
   392  )
   393  "type mismatch"
   394)
   395(assert_invalid
   396  (module
   397    (func $type-2nd-operand-empty
   398      (i32.const 0) (select) (drop)
   399    )
   400  )
   401  "type mismatch"
   402)
   403(assert_invalid
   404  (module
   405    (func $type-3rd-operand-empty
   406      (i32.const 0) (i32.const 0) (select) (drop)
   407    )
   408  )
   409  "type mismatch"
   410)
   411(assert_invalid
   412  (module
   413    (func $type-1st-operand-empty-in-block
   414      (i32.const 0) (i32.const 0) (i32.const 0)
   415      (block (select) (drop))
   416    )
   417  )
   418  "type mismatch"
   419)
   420(assert_invalid
   421  (module
   422    (func $type-2nd-operand-empty-in-block
   423      (i32.const 0) (i32.const 0)
   424      (block (i32.const 0) (select) (drop))
   425    )
   426  )
   427  "type mismatch"
   428)
   429(assert_invalid
   430  (module
   431    (func $type-3rd-operand-empty-in-block
   432      (i32.const 0)
   433      (block (i32.const 0) (i32.const 0) (select) (drop))
   434    )
   435  )
   436  "type mismatch"
   437)
   438(assert_invalid
   439  (module
   440    (func $type-1st-operand-empty-in-loop
   441      (i32.const 0) (i32.const 0) (i32.const 0)
   442      (loop (select) (drop))
   443    )
   444  )
   445  "type mismatch"
   446)
   447(assert_invalid
   448  (module
   449    (func $type-2nd-operand-empty-in-loop
   450      (i32.const 0) (i32.const 0)
   451      (loop (i32.const 0) (select) (drop))
   452    )
   453  )
   454  "type mismatch"
   455)
   456(assert_invalid
   457  (module
   458    (func $type-3rd-operand-empty-in-loop
   459      (i32.const 0)
   460      (loop (i32.const 0) (i32.const 0) (select) (drop))
   461    )
   462  )
   463  "type mismatch"
   464)
   465(assert_invalid
   466  (module
   467    (func $type-1st-operand-empty-in-then
   468      (i32.const 0) (i32.const 0) (i32.const 0)
   469      (if (then (select) (drop)))
   470    )
   471  )
   472  "type mismatch"
   473)
   474(assert_invalid
   475  (module
   476    (func $type-2nd-operand-empty-in-then
   477      (i32.const 0) (i32.const 0)
   478      (if (then (i32.const 0) (select) (drop)))
   479    )
   480  )
   481  "type mismatch"
   482)
   483(assert_invalid
   484  (module
   485    (func $type-3rd-operand-empty-in-then
   486      (i32.const 0)
   487      (if (then (i32.const 0) (i32.const 0) (select) (drop)))
   488    )
   489  )
   490  "type mismatch"
   491)
   492
   493;; Third operand must be i32
   494
   495(assert_invalid
   496  (module (func (select (i32.const 1) (i32.const 1) (i64.const 1)) (drop)))
   497  "type mismatch"
   498)
   499(assert_invalid
   500  (module (func (select (i32.const 1) (i32.const 1) (f32.const 1)) (drop)))
   501  "type mismatch"
   502)
   503(assert_invalid
   504  (module (func (select (i32.const 1) (i32.const 1) (f64.const 1)) (drop)))
   505  "type mismatch"
   506)
   507
   508;; Result of select has type of first two operands
   509
   510(assert_invalid
   511  (module (func (result i32) (select (i64.const 1) (i64.const 1) (i32.const 1))))
   512  "type mismatch"
   513)
   514
   515
   516;; Flat syntax
   517
   518(module
   519  (table 1 funcref)
   520  (func (result i32) unreachable select)
   521  (func (result i32) unreachable select nop)
   522  (func (result i32) unreachable select (select))
   523  (func (result i32) unreachable select select)
   524  (func (result i32) unreachable select select select)
   525  (func (result i32) unreachable select (result i32))
   526  (func (result i32) unreachable select (result i32) (result))
   527  (func (result i32) unreachable select (result i32) (result) select)
   528  (func (result i32) unreachable select (result) (result i32) select (result i32))
   529  (func (result i32) unreachable select call_indirect)
   530  (func (result i32) unreachable select call_indirect select)
   531)

View as plain text