Check type for forward reference definition
authorRenato Golin <rengolin@microsoft.com>
Tue, 5 May 2020 09:03:26 +0000 (10:03 +0100)
committerRenato Golin <rengolin@microsoft.com>
Wed, 6 May 2020 13:34:18 +0000 (14:34 +0100)
commit5010b5b7e6cf0925465ecaa4111927ee9bcfac67
treebc201b1b2dd1ea7f92e9eefbf6e5950e184c30f9
parented7db68c354e48daf1efb5f119cee20938732100
Check type for forward reference definition

The types of forward references are checked that they match with other
uses, but they do not check they match with the definition.

    func @forward_reference_type_check() -> (i8) {
      br ^bb2

    ^bb1:
      return %1 : i8

    ^bb2:
      %1 = "bar"() : () -> (f32)
      br ^bb1
    }

Would be parsed and the use site of '%1' would be silently changed to
'f32'.

This commit adds a test for this case, and a check during parsing for
the types to match.

Patch by Matthew Parkinson <mattpark@microsoft.com>

Closes D79317.
mlir/lib/Parser/Parser.cpp
mlir/test/IR/invalid.mlir