tint: Fix implicit conversion of vector-scalar of abstract types in binary operations

Example: const v2 = vec3(1) + 2.2;

Bug: chromium:1350147
Change-Id: Ie75d76bf00a6b2f6abd49293290f6e5065c31dfb
Reviewed-on: https://dawn-review.googlesource.com/c/dawn/+/99301
Reviewed-by: Ben Clayton <bclayton@google.com>
Kokoro: Kokoro <noreply+kokoro@google.com>
Commit-Queue: Antonio Maiorano <amaiorano@google.com>
diff --git a/src/tint/resolver/const_eval_test.cc b/src/tint/resolver/const_eval_test.cc
index a82e471..6623a5a 100644
--- a/src/tint/resolver/const_eval_test.cc
+++ b/src/tint/resolver/const_eval_test.cc
@@ -3262,9 +3262,9 @@
     EXPECT_EQ(r()->error(), "1:1 error: '-inf' cannot be represented as 'abstract-float'");
 }
 
-TEST_F(ResolverConstEvalTest, BinaryAbstractMixed) {
-    auto* a = Const("a", nullptr, Expr(1_a));
-    auto* b = Const("b", nullptr, Expr(2.3_a));
+TEST_F(ResolverConstEvalTest, BinaryAbstractMixed_ScalarScalar) {
+    auto* a = Const("a", nullptr, Expr(1_a));    // AInt
+    auto* b = Const("b", nullptr, Expr(2.3_a));  // AFloat
     auto* c = Add(Expr("a"), Expr("b"));
     WrapInFunction(a, b, c);
     EXPECT_TRUE(r()->Resolve()) << r()->error();
@@ -3275,6 +3275,20 @@
     EXPECT_EQ(result, 3.3f);
 }
 
+TEST_F(ResolverConstEvalTest, BinaryAbstractMixed_ScalarVector) {
+    auto* a = Const("a", nullptr, Expr(1_a));                                   // AInt
+    auto* b = Const("b", nullptr, Construct(ty.vec(nullptr, 3), Expr(2.3_a)));  // AFloat
+    auto* c = Add(Expr("a"), Expr("b"));
+    WrapInFunction(a, b, c);
+    EXPECT_TRUE(r()->Resolve()) << r()->error();
+    auto* sem = Sem().Get(c);
+    ASSERT_TRUE(sem);
+    ASSERT_TRUE(sem->ConstantValue());
+    EXPECT_EQ(sem->ConstantValue()->Index(0)->As<AFloat>(), 3.3f);
+    EXPECT_EQ(sem->ConstantValue()->Index(1)->As<AFloat>(), 3.3f);
+    EXPECT_EQ(sem->ConstantValue()->Index(2)->As<AFloat>(), 3.3f);
+}
+
 }  // namespace binary_op
 
 ////////////////////////////////////////////////////////////////////////////////////////////////////
diff --git a/src/tint/resolver/resolver.cc b/src/tint/resolver/resolver.cc
index 028cf1a..2edab1f 100644
--- a/src/tint/resolver/resolver.cc
+++ b/src/tint/resolver/resolver.cc
@@ -2329,10 +2329,10 @@
         if (op.const_eval_fn) {
             auto const_args = utils::Vector{lhs->ConstantValue(), rhs->ConstantValue()};
             // Implicit conversion (e.g. AInt -> AFloat)
-            if (!Convert(const_args[0], op.result, lhs->Declaration()->source)) {
+            if (!Convert(const_args[0], op.lhs, lhs->Declaration()->source)) {
                 return nullptr;
             }
-            if (!Convert(const_args[1], op.result, rhs->Declaration()->source)) {
+            if (!Convert(const_args[1], op.rhs, rhs->Declaration()->source)) {
                 return nullptr;
             }