spirv-reader: conversion tests: make valid SPIR-V

Bug: tint:765
Change-Id: I18ed7f007fc9b15c51cddbb6b0edbca79ed1569c
Reviewed-on: https://dawn-review.googlesource.com/c/tint/+/49821
Commit-Queue: David Neto <dneto@google.com>
Reviewed-by: Alan Baker <alanbaker@google.com>
diff --git a/src/reader/spirv/function_conversion_test.cc b/src/reader/spirv/function_conversion_test.cc
index e92d9d1..0d18996 100644
--- a/src/reader/spirv/function_conversion_test.cc
+++ b/src/reader/spirv/function_conversion_test.cc
@@ -25,8 +25,12 @@
 using ::testing::Eq;
 using ::testing::HasSubstr;
 
-std::string CommonTypes() {
+std::string Preamble() {
   return R"(
+  OpCapability Shader
+  OpMemoryModel Logical Simple
+  OpEntryPoint Vertex %100 "main"
+
   %void = OpTypeVoid
   %voidfn = OpTypeFunction %void
 
@@ -67,7 +71,7 @@
 using SpvUnaryConversionTest = SpvParserTestBase<::testing::Test>;
 
 TEST_F(SpvUnaryConversionTest, Bitcast_Scalar) {
-  const auto assembly = CommonTypes() + R"(
+  const auto assembly = Preamble() + R"(
      %100 = OpFunction %void None %voidfn
      %entry = OpLabel
      %1 = OpBitcast %uint %float_50
@@ -92,7 +96,7 @@
 }
 
 TEST_F(SpvUnaryConversionTest, Bitcast_Vector) {
-  const auto assembly = CommonTypes() + R"(
+  const auto assembly = Preamble() + R"(
      %100 = OpFunction %void None %voidfn
      %entry = OpLabel
      %1 = OpBitcast %v2float %v2uint_10_20
@@ -121,7 +125,7 @@
 }
 
 TEST_F(SpvUnaryConversionTest, ConvertSToF_BadArg) {
-  const auto assembly = CommonTypes() + R"(
+  const auto assembly = Preamble() + R"(
      %100 = OpFunction %void None %voidfn
      %entry = OpLabel
      %1 = OpConvertSToF %float %void
@@ -137,7 +141,7 @@
 }
 
 TEST_F(SpvUnaryConversionTest, ConvertUToF_BadArg) {
-  const auto assembly = CommonTypes() + R"(
+  const auto assembly = Preamble() + R"(
      %100 = OpFunction %void None %voidfn
      %entry = OpLabel
      %1 = OpConvertUToF %float %void
@@ -153,7 +157,7 @@
 }
 
 TEST_F(SpvUnaryConversionTest, ConvertFToS_BadArg) {
-  const auto assembly = CommonTypes() + R"(
+  const auto assembly = Preamble() + R"(
      %100 = OpFunction %void None %voidfn
      %entry = OpLabel
      %1 = OpConvertFToS %float %void
@@ -169,7 +173,7 @@
 }
 
 TEST_F(SpvUnaryConversionTest, ConvertFToU_BadArg) {
-  const auto assembly = CommonTypes() + R"(
+  const auto assembly = Preamble() + R"(
      %100 = OpFunction %void None %voidfn
      %entry = OpLabel
      %1 = OpConvertFToU %float %void
@@ -185,7 +189,7 @@
 }
 
 TEST_F(SpvUnaryConversionTest, ConvertSToF_Scalar_BadArgType) {
-  const auto assembly = CommonTypes() + R"(
+  const auto assembly = Preamble() + R"(
      %100 = OpFunction %void None %voidfn
      %entry = OpLabel
      %1 = OpConvertSToF %float %false
@@ -202,7 +206,7 @@
 }
 
 TEST_F(SpvUnaryConversionTest, ConvertSToF_Vector_BadArgType) {
-  const auto assembly = CommonTypes() + R"(
+  const auto assembly = Preamble() + R"(
      %100 = OpFunction %void None %voidfn
      %entry = OpLabel
      %1 = OpConvertSToF %v2float %v2bool_t_f
@@ -220,7 +224,7 @@
 }
 
 TEST_F(SpvUnaryConversionTest, ConvertSToF_Scalar_FromSigned) {
-  const auto assembly = CommonTypes() + R"(
+  const auto assembly = Preamble() + R"(
      %100 = OpFunction %void None %voidfn
      %entry = OpLabel
      %30 = OpCopyObject %int %int_30
@@ -246,7 +250,7 @@
 }
 
 TEST_F(SpvUnaryConversionTest, ConvertSToF_Scalar_FromUnsigned) {
-  const auto assembly = CommonTypes() + R"(
+  const auto assembly = Preamble() + R"(
      %100 = OpFunction %void None %voidfn
      %entry = OpLabel
      %30 = OpCopyObject %uint %uint_10
@@ -274,7 +278,7 @@
 }
 
 TEST_F(SpvUnaryConversionTest, ConvertSToF_Vector_FromSigned) {
-  const auto assembly = CommonTypes() + R"(
+  const auto assembly = Preamble() + R"(
      %100 = OpFunction %void None %voidfn
      %entry = OpLabel
      %30 = OpCopyObject %v2int %v2int_30_40
@@ -300,7 +304,7 @@
 }
 
 TEST_F(SpvUnaryConversionTest, ConvertSToF_Vector_FromUnsigned) {
-  const auto assembly = CommonTypes() + R"(
+  const auto assembly = Preamble() + R"(
      %100 = OpFunction %void None %voidfn
      %entry = OpLabel
      %30 = OpCopyObject %v2uint %v2uint_10_20
@@ -328,7 +332,7 @@
 }
 
 TEST_F(SpvUnaryConversionTest, ConvertUToF_Scalar_BadArgType) {
-  const auto assembly = CommonTypes() + R"(
+  const auto assembly = Preamble() + R"(
      %100 = OpFunction %void None %voidfn
      %entry = OpLabel
      %1 = OpConvertUToF %float %false
@@ -344,7 +348,7 @@
 }
 
 TEST_F(SpvUnaryConversionTest, ConvertUToF_Vector_BadArgType) {
-  const auto assembly = CommonTypes() + R"(
+  const auto assembly = Preamble() + R"(
      %100 = OpFunction %void None %voidfn
      %entry = OpLabel
      %1 = OpConvertUToF %v2float %v2bool_t_f
@@ -361,7 +365,7 @@
 }
 
 TEST_F(SpvUnaryConversionTest, ConvertUToF_Scalar_FromSigned) {
-  const auto assembly = CommonTypes() + R"(
+  const auto assembly = Preamble() + R"(
      %100 = OpFunction %void None %voidfn
      %entry = OpLabel
      %30 = OpCopyObject %int %int_30
@@ -389,7 +393,7 @@
 }
 
 TEST_F(SpvUnaryConversionTest, ConvertUToF_Scalar_FromUnsigned) {
-  const auto assembly = CommonTypes() + R"(
+  const auto assembly = Preamble() + R"(
      %100 = OpFunction %void None %voidfn
      %entry = OpLabel
      %30 = OpCopyObject %uint %uint_10
@@ -415,7 +419,7 @@
 }
 
 TEST_F(SpvUnaryConversionTest, ConvertUToF_Vector_FromSigned) {
-  const auto assembly = CommonTypes() + R"(
+  const auto assembly = Preamble() + R"(
      %100 = OpFunction %void None %voidfn
      %entry = OpLabel
      %30 = OpCopyObject %v2int %v2int_30_40
@@ -443,7 +447,7 @@
 }
 
 TEST_F(SpvUnaryConversionTest, ConvertUToF_Vector_FromUnsigned) {
-  const auto assembly = CommonTypes() + R"(
+  const auto assembly = Preamble() + R"(
      %100 = OpFunction %void None %voidfn
      %entry = OpLabel
      %30 = OpCopyObject %v2uint %v2uint_10_20
@@ -469,7 +473,7 @@
 }
 
 TEST_F(SpvUnaryConversionTest, ConvertFToS_Scalar_BadArgType) {
-  const auto assembly = CommonTypes() + R"(
+  const auto assembly = Preamble() + R"(
      %100 = OpFunction %void None %voidfn
      %entry = OpLabel
      %1 = OpConvertFToS %int %uint_10
@@ -486,7 +490,7 @@
 }
 
 TEST_F(SpvUnaryConversionTest, ConvertFToS_Vector_BadArgType) {
-  const auto assembly = CommonTypes() + R"(
+  const auto assembly = Preamble() + R"(
      %100 = OpFunction %void None %voidfn
      %entry = OpLabel
      %1 = OpConvertFToS %v2float %v2bool_t_f
@@ -503,7 +507,7 @@
 }
 
 TEST_F(SpvUnaryConversionTest, ConvertFToS_Scalar_ToSigned) {
-  const auto assembly = CommonTypes() + R"(
+  const auto assembly = Preamble() + R"(
      %100 = OpFunction %void None %voidfn
      %entry = OpLabel
      %30 = OpCopyObject %float %float_50
@@ -529,7 +533,7 @@
 }
 
 TEST_F(SpvUnaryConversionTest, ConvertFToS_Scalar_ToUnsigned) {
-  const auto assembly = CommonTypes() + R"(
+  const auto assembly = Preamble() + R"(
      %100 = OpFunction %void None %voidfn
      %entry = OpLabel
      %30 = OpCopyObject %float %float_50
@@ -557,7 +561,7 @@
 }
 
 TEST_F(SpvUnaryConversionTest, ConvertFToS_Vector_ToSigned) {
-  const auto assembly = CommonTypes() + R"(
+  const auto assembly = Preamble() + R"(
      %100 = OpFunction %void None %voidfn
      %entry = OpLabel
      %30 = OpCopyObject %v2float %v2float_50_60
@@ -583,7 +587,7 @@
 }
 
 TEST_F(SpvUnaryConversionTest, ConvertFToS_Vector_ToUnsigned) {
-  const auto assembly = CommonTypes() + R"(
+  const auto assembly = Preamble() + R"(
      %100 = OpFunction %void None %voidfn
      %entry = OpLabel
      %30 = OpCopyObject %v2float %v2float_50_60
@@ -611,7 +615,7 @@
 }
 
 TEST_F(SpvUnaryConversionTest, ConvertFToU_Scalar_BadArgType) {
-  const auto assembly = CommonTypes() + R"(
+  const auto assembly = Preamble() + R"(
      %100 = OpFunction %void None %voidfn
      %entry = OpLabel
      %1 = OpConvertFToU %int %uint_10
@@ -628,7 +632,7 @@
 }
 
 TEST_F(SpvUnaryConversionTest, ConvertFToU_Vector_BadArgType) {
-  const auto assembly = CommonTypes() + R"(
+  const auto assembly = Preamble() + R"(
      %100 = OpFunction %void None %voidfn
      %entry = OpLabel
      %1 = OpConvertFToU %v2float %v2bool_t_f
@@ -644,8 +648,8 @@
                  "point scalar or vector, but got: __vec_2__bool"));
 }
 
-TEST_F(SpvUnaryConversionTest, ConvertFToU_Scalar_ToSigned) {
-  const auto assembly = CommonTypes() + R"(
+TEST_F(SpvUnaryConversionTest, ConvertFToU_Scalar_ToSigned_IsError) {
+  const auto assembly = Preamble() + R"(
      %100 = OpFunction %void None %voidfn
      %entry = OpLabel
      %30 = OpCopyObject %float %float_50
@@ -654,26 +658,14 @@
      OpFunctionEnd
   )";
   auto p = parser(test::Assemble(assembly));
-  ASSERT_TRUE(p->BuildAndParseInternalModuleExceptFunctions());
-  auto fe = p->function_emitter(100);
-  EXPECT_TRUE(fe.EmitBody()) << p->error();
-  EXPECT_THAT(ToString(p->builder(), fe.ast_body()), HasSubstr(R"(VariableConst{
-    x_1
-    none
-    __i32
-    {
-      Bitcast[not set]<__i32>{
-        TypeConstructor[not set]{
-          __u32
-          Identifier[not set]{x_30}
-        }
-      }
-    }
-  })"));
+  EXPECT_FALSE(p->Parse());
+  EXPECT_FALSE(p->success());
+  EXPECT_THAT(p->error(), HasSubstr("Expected unsigned int scalar or vector "
+                                    "type as Result Type: ConvertFToU"));
 }
 
 TEST_F(SpvUnaryConversionTest, ConvertFToU_Scalar_ToUnsigned) {
-  const auto assembly = CommonTypes() + R"(
+  const auto assembly = Preamble() + R"(
      %100 = OpFunction %void None %voidfn
      %entry = OpLabel
      %30 = OpCopyObject %float %float_50
@@ -698,8 +690,8 @@
   })"));
 }
 
-TEST_F(SpvUnaryConversionTest, ConvertFToU_Vector_ToSigned) {
-  const auto assembly = CommonTypes() + R"(
+TEST_F(SpvUnaryConversionTest, ConvertFToU_Vector_ToSigned_IsError) {
+  const auto assembly = Preamble() + R"(
      %100 = OpFunction %void None %voidfn
      %entry = OpLabel
      %30 = OpCopyObject %v2float %v2float_50_60
@@ -708,26 +700,14 @@
      OpFunctionEnd
   )";
   auto p = parser(test::Assemble(assembly));
-  ASSERT_TRUE(p->BuildAndParseInternalModuleExceptFunctions());
-  auto fe = p->function_emitter(100);
-  EXPECT_TRUE(fe.EmitBody()) << p->error();
-  EXPECT_THAT(ToString(p->builder(), fe.ast_body()), HasSubstr(R"(VariableConst{
-    x_1
-    none
-    __vec_2__i32
-    {
-      Bitcast[not set]<__vec_2__i32>{
-        TypeConstructor[not set]{
-          __vec_2__u32
-          Identifier[not set]{x_30}
-        }
-      }
-    }
-  })"));
+  EXPECT_FALSE(p->Parse());
+  EXPECT_FALSE(p->success());
+  EXPECT_THAT(p->error(), HasSubstr("Expected unsigned int scalar or vector "
+                                    "type as Result Type: ConvertFToU"));
 }
 
 TEST_F(SpvUnaryConversionTest, ConvertFToU_Vector_ToUnsigned) {
-  const auto assembly = CommonTypes() + R"(
+  const auto assembly = Preamble() + R"(
      %100 = OpFunction %void None %voidfn
      %entry = OpLabel
      %30 = OpCopyObject %v2float %v2float_50_60