[spirv-writer] Enable FunctionVar_WithNonConstantConstructor

This CL updates and enables the disabled
FunctionVar_WithNonConstantConstructor test.

Bug: tint:5
Change-Id: If45152034968bd81aa3cf7ae76dfdb02598b6e4b
Reviewed-on: https://dawn-review.googlesource.com/c/tint/+/20760
Reviewed-by: David Neto <dneto@google.com>
diff --git a/src/writer/spirv/builder_function_variable_test.cc b/src/writer/spirv/builder_function_variable_test.cc
index 33ce0f1..d4e8513 100644
--- a/src/writer/spirv/builder_function_variable_test.cc
+++ b/src/writer/spirv/builder_function_variable_test.cc
@@ -107,8 +107,7 @@
 )");
 }
 
-// DISABLED until we have BinaryExpression Output
-TEST_F(BuilderTest, DISABLED_FunctionVar_WithNonConstantConstructor) {
+TEST_F(BuilderTest, FunctionVar_WithNonConstantConstructor) {
   ast::type::F32Type f32;
   ast::type::VectorType vec(&f32, 2);
 
@@ -127,30 +126,35 @@
   auto init =
       std::make_unique<ast::TypeConstructorExpression>(&vec, std::move(vals));
 
-  ast::Variable v("var", ast::StorageClass::kOutput, &f32);
+  Context ctx;
+  ast::Module mod;
+  TypeDeterminer td(&ctx, &mod);
+  EXPECT_TRUE(td.DetermineResultType(init.get())) << td.error();
+
+  ast::Variable v("var", ast::StorageClass::kFunction, &vec);
   v.set_constructor(std::move(init));
 
-  ast::Module mod;
+  td.RegisterVariableForTesting(&v);
   Builder b(&mod);
   b.push_function(Function{});
   EXPECT_TRUE(b.GenerateFunctionVariable(&v)) << b.error();
   ASSERT_FALSE(b.has_error()) << b.error();
 
-  EXPECT_EQ(DumpInstructions(b.debug()), R"(OpName %6 "var"
+  EXPECT_EQ(DumpInstructions(b.debug()), R"(OpName %7 "var"
 )");
   EXPECT_EQ(DumpInstructions(b.types()), R"(%2 = OpTypeFloat 32
 %1 = OpTypeVector %2 2
 %3 = OpConstant %2 1
 %4 = OpConstant %2 3
-%7 = OpTypePointer Output %2
+%8 = OpTypePointer Function %1
 )");
   EXPECT_EQ(DumpInstructions(b.functions()[0].variables()),
-            R"(%6 = OpVariable %7 Output %5
+            R"(%7 = OpVariable %8 Function
 )");
   EXPECT_EQ(DumpInstructions(b.functions()[0].instructions()),
-            R"(%10 = OpIAdd %3 %3
-%9 = OpCompositeConstruct %1 %3 %10
-OpStore %6 %9
+            R"(%5 = OpFAdd %2 %4 %4
+%6 = OpCompositeConstruct %1 %3 %5
+OpStore %7 %6
 )");
 }