Skip to content

Understanding the post-drop block/br type system #736

Closed
@kripken

Description

@kripken

Looks like the drop changes in 0xc change the block/br type system significantly. I've been trying to figure out what's going on from the new spec tests, but can't seem to. Is this documented somewhere?

For example, one source of puzzlement is that this should be invalid

(block $block1
  (br $block1
    (unreachable)
  )
) 

Intuitively that seems like it should be valid, as no value is sent to the block? So I can only guess it is invalid because the type of unreachable is unacceptable here. Yet, on the other hand this should be valid,

(block $block1
  (br $block1
    (br $block0
      (i32.const 8)
    )
  )
)

So somehow the type of br is different from the type of unreachable? That seems odd as both halt control flow.

Metadata

Metadata

Assignees

No one assigned

    Type

    No type

    Projects

    No projects

    Milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions