Implement type inference

Bug: tint:672
Change-Id: I3f586ee867f75427c4e8c309f72fb468643c23c0
Reviewed-on: https://dawn-review.googlesource.com/c/tint/+/53182
Reviewed-by: Ben Clayton <bclayton@google.com>
Kokoro: Kokoro <noreply+kokoro@google.com>
Commit-Queue: Antonio Maiorano <amaiorano@google.com>
diff --git a/test/var/inferred/function-var.wgsl b/test/var/inferred/function-var.wgsl
new file mode 100644
index 0000000..0d39fe0
--- /dev/null
+++ b/test/var/inferred/function-var.wgsl
@@ -0,0 +1,39 @@
+struct MyStruct {

+    f1 : f32;

+};

+

+type MyArray = array<f32, 10>;

+

+fn ret_i32() -> i32 { return 1; }

+fn ret_u32() -> u32 { return 1u; }

+fn ret_f32() -> f32 { return 1.0; }

+fn ret_MyStruct() -> MyStruct { return MyStruct(); }

+fn ret_MyArray() -> MyArray { return MyArray(); }

+

+// Local variables

+fn var_decls() {

+    var v1 = 1;

+    var v2 = 1u;

+    var v3 = 1.0;

+

+    var v4 = vec3<i32>(1, 1, 1);

+    var v5 = vec3<u32>(1u, 1u, 1u);

+    var v6 = vec3<f32>(1.0, 1.0, 1.0);

+

+    var v7 = mat3x3<f32>(v6, v6, v6);

+

+    var v8 = MyStruct(1.0);

+    var v9 = MyArray();

+

+    var v10 = ret_i32();

+    var v11 = ret_u32();

+    var v12 = ret_f32();

+    var v13 = ret_MyStruct();

+    var v14 = ret_MyStruct();

+    var v15 = ret_MyArray();

+}

+

+[[stage(fragment)]]

+fn main() -> [[location(0)]] vec4<f32> {

+    return vec4<f32>(0.0,0.0,0.0,0.0);

+}