(assert_invalid
  (module
    (tag $e-i32 (param i32))
    (func $f0
      (try_table
        (i32.const 0)
      )
    )
  )
  "try_table's type does not match try_table body's type"
)

(assert_invalid
  (module
    (tag $e-i32 (param i32))
    (func $f0
      (throw $e-i32 (f32.const 0))
    )
  )
  "tag param types must match"
)

(assert_invalid
  (module
    (tag $e-i32 (param i32 f32))
    (func $f0
      (throw $e-i32 (f32.const 0))
    )
  )
  "tag's param numbers must match"
)

(assert_invalid
  (module
    (func $f0
      (block $l
        (try_table (catch $e $l))
      )
    )
  )
  "catch's tag name is invalid: e"
)

(assert_invalid
  (module
    (tag $e (param i32) (result i32))
    (func $f0
      (throw $e (i32.const 5))
    )
  )
  "tags with result types must not be used for exception handling"
)

(assert_invalid
  (module
    (tag $e (param i32) (result i32))
    (func $f0
      (block $l
        (try_table (catch $e $l))
      )
    )
  )
  "catch's tag (e) has result values, which is not allowed for exception handling"
)