Verify number of result types in generated builder.
authorSean Silva <silvasean@google.com>
Thu, 26 Mar 2020 21:57:01 +0000 (14:57 -0700)
committerSean Silva <silvasean@google.com>
Sat, 28 Mar 2020 03:05:42 +0000 (20:05 -0700)
Summary: This just bit me and is nasty to debug.

Differential Revision: https://reviews.llvm.org/D76888

mlir/test/mlir-tblgen/op-result.td
mlir/tools/mlir-tblgen/OpDefinitionsGen.cpp

index 76484c8..c8bdd15 100644 (file)
@@ -38,6 +38,10 @@ def OpC : NS_Op<"three_normal_result_op", []> {
 // CHECK-NEXT:   odsState.addTypes(resultType1)
 // CHECK-NEXT:   odsState.addTypes(z)
 
+// CHECK:      void OpC::build(Builder *odsBuilder, OperationState &odsState, ArrayRef<Type> resultTypes) {
+// CHECK-NEXT:   assert(resultTypes.size() == 3u && "mismatched number of results");
+// CHECK-NEXT:   odsState.addTypes(resultTypes);
+
 def IntegerTypeAttr : TypeAttrBase<"IntegerType", "Integer type attribute">;
 def OpD : NS_Op<"type_attr_as_result_type", [FirstAttrDerivedResultType]> {
   let arguments = (ins I32:$x, IntegerTypeAttr:$attr, F32Attr:$f32);
index 47eef13..f262f12 100644 (file)
@@ -702,6 +702,11 @@ void OpEmitter::genSeparateArgParamBuilder() {
       }
       return;
     case TypeParamKind::Collective:
+      body << "  "
+           << "assert(resultTypes.size() "
+           << (op.getNumVariadicResults() == 0 ? "==" : ">=") << " "
+           << (op.getNumResults() - op.getNumVariadicResults())
+           << "u && \"mismatched number of results\");\n";
       body << "  " << builderOpState << ".addTypes(resultTypes);\n";
       return;
     };