[spirv-writer] Generate load for var initializer, if needed

Change-Id: I609860bb05fae3e6e5eb21a471f869030f384ad0
Reviewed-on: https://dawn-review.googlesource.com/c/tint/+/20721
Reviewed-by: dan sinclair <dsinclair@google.com>
diff --git a/src/writer/spirv/builder.cc b/src/writer/spirv/builder.cc
index 680abd3..a8eaa1d 100644
--- a/src/writer/spirv/builder.cc
+++ b/src/writer/spirv/builder.cc
@@ -416,6 +416,7 @@
   push_function_var(
       {Operand::Int(type_id), result, Operand::Int(ConvertStorageClass(sc))});
   if (var->has_constructor()) {
+    init_id = GenerateLoadIfNeeded(var->constructor()->result_type(), init_id);
     GenerateStore(var_id, init_id);
   }
 
diff --git a/src/writer/spirv/builder_function_variable_test.cc b/src/writer/spirv/builder_function_variable_test.cc
index d4e8513..0917616 100644
--- a/src/writer/spirv/builder_function_variable_test.cc
+++ b/src/writer/spirv/builder_function_variable_test.cc
@@ -158,6 +158,15 @@
 )");
 }
 
+TEST_F(BuilderTest,
+       DISABLED_FunctionVar_WithNonConstantConstructorLoadedFromVar) {
+  // fn main() -> void {
+  //   var v : f32 = 1.0;
+  //   var v2 : f32 = v; // Should generate the load automatically.
+  // }
+  FAIL();
+}
+
 TEST_F(BuilderTest, FunctionVar_Const) {
   ast::type::F32Type f32;
   ast::type::VectorType vec(&f32, 3);