diff --git a/src/writer/spirv/builder.cc b/src/writer/spirv/builder.cc index 680abd3f41..a8eaa1d197 100644 --- a/src/writer/spirv/builder.cc +++ b/src/writer/spirv/builder.cc @@ -416,6 +416,7 @@ bool Builder::GenerateFunctionVariable(ast::Variable* var) { 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 d4e8513176..0917616671 100644 --- a/src/writer/spirv/builder_function_variable_test.cc +++ b/src/writer/spirv/builder_function_variable_test.cc @@ -158,6 +158,15 @@ OpStore %7 %6 )"); } +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);