ProgramBuilder: Don't wrap call-exprs with a call-stmts

ast::CallExpression will soon encompase function & intrinsic calls,
along with type-constructors and type-casts. The latter two cannot be
wrapped with a CallStatement, so change
ProgramBuilder::WrapInStatement() to always assign the expression to a
temporary.

Fix the few places that actually relied on this behavior to use
CallStmt() explicitly.

Bug: tint:888
Change-Id: I48b8a2be73128df9cd2b4bdcc00ae81c4a872359
Reviewed-on: https://dawn-review.googlesource.com/c/tint/+/69104
Kokoro: Kokoro <noreply+kokoro@google.com>
Commit-Queue: Ben Clayton <bclayton@google.com>
Reviewed-by: James Price <jrprice@google.com>
diff --git a/src/program_builder.cc b/src/program_builder.cc
index f20b76a..c7e6751 100644
--- a/src/program_builder.cc
+++ b/src/program_builder.cc
@@ -116,9 +116,6 @@
 
 const ast::Statement* ProgramBuilder::WrapInStatement(
     const ast::Expression* expr) {
-  if (auto* ce = expr->As<ast::CallExpression>()) {
-    return CallStmt(ce);
-  }
   // Create a temporary variable of inferred type from expr.
   return Decl(Const(symbols_.New(), nullptr, expr));
 }
diff --git a/src/resolver/resolver_test.cc b/src/resolver/resolver_test.cc
index a92c19c..f6d465b 100644
--- a/src/resolver/resolver_test.cc
+++ b/src/resolver/resolver_test.cc
@@ -913,8 +913,8 @@
   auto* call_2 = Call("foo");
   auto* bar = Func("bar", ast::VariableList{}, ty.void_(),
                    {
-                       WrapInStatement(call_1),
-                       WrapInStatement(call_2),
+                       CallStmt(call_1),
+                       CallStmt(call_2),
                    });
 
   EXPECT_TRUE(r()->Resolve()) << r()->error();
diff --git a/src/writer/glsl/generator_impl_intrinsic_test.cc b/src/writer/glsl/generator_impl_intrinsic_test.cc
index 7891beb..8e81801 100644
--- a/src/writer/glsl/generator_impl_intrinsic_test.cc
+++ b/src/writer/glsl/generator_impl_intrinsic_test.cc
@@ -264,7 +264,7 @@
   Global("param1", ty.vec3<f32>(), ast::StorageClass::kPrivate);
   Global("param2", ty.vec3<f32>(), ast::StorageClass::kPrivate);
 
-  WrapInFunction(call);
+  WrapInFunction(CallStmt(call));
 
   GeneratorImpl& gen = Build();
 
@@ -276,7 +276,7 @@
 
 TEST_F(GlslGeneratorImplTest_Intrinsic, Select_Scalar) {
   auto* call = Call("select", 1.0f, 2.0f, true);
-  WrapInFunction(call);
+  WrapInFunction(CallStmt(call));
   GeneratorImpl& gen = Build();
 
   gen.increment_indent();
@@ -288,7 +288,7 @@
 TEST_F(GlslGeneratorImplTest_Intrinsic, Select_Vector) {
   auto* call =
       Call("select", vec2<i32>(1, 2), vec2<i32>(3, 4), vec2<bool>(true, false));
-  WrapInFunction(call);
+  WrapInFunction(CallStmt(call));
   GeneratorImpl& gen = Build();
 
   gen.increment_indent();
@@ -385,7 +385,7 @@
 TEST_F(GlslGeneratorImplTest_Intrinsic, Pack4x8Snorm) {
   auto* call = Call("pack4x8snorm", "p1");
   Global("p1", ty.vec4<f32>(), ast::StorageClass::kPrivate);
-  WrapInFunction(call);
+  WrapInFunction(CallStmt(call));
   GeneratorImpl& gen = Build();
 
   gen.increment_indent();
@@ -400,7 +400,7 @@
 TEST_F(GlslGeneratorImplTest_Intrinsic, Pack4x8Unorm) {
   auto* call = Call("pack4x8unorm", "p1");
   Global("p1", ty.vec4<f32>(), ast::StorageClass::kPrivate);
-  WrapInFunction(call);
+  WrapInFunction(CallStmt(call));
   GeneratorImpl& gen = Build();
 
   gen.increment_indent();
@@ -415,7 +415,7 @@
 TEST_F(GlslGeneratorImplTest_Intrinsic, Pack2x16Snorm) {
   auto* call = Call("pack2x16snorm", "p1");
   Global("p1", ty.vec2<f32>(), ast::StorageClass::kPrivate);
-  WrapInFunction(call);
+  WrapInFunction(CallStmt(call));
   GeneratorImpl& gen = Build();
 
   gen.increment_indent();
@@ -429,7 +429,7 @@
 TEST_F(GlslGeneratorImplTest_Intrinsic, Pack2x16Unorm) {
   auto* call = Call("pack2x16unorm", "p1");
   Global("p1", ty.vec2<f32>(), ast::StorageClass::kPrivate);
-  WrapInFunction(call);
+  WrapInFunction(CallStmt(call));
   GeneratorImpl& gen = Build();
 
   gen.increment_indent();
@@ -443,7 +443,7 @@
 TEST_F(GlslGeneratorImplTest_Intrinsic, Pack2x16Float) {
   auto* call = Call("pack2x16float", "p1");
   Global("p1", ty.vec2<f32>(), ast::StorageClass::kPrivate);
-  WrapInFunction(call);
+  WrapInFunction(CallStmt(call));
   GeneratorImpl& gen = Build();
 
   gen.increment_indent();
@@ -456,7 +456,7 @@
 TEST_F(GlslGeneratorImplTest_Intrinsic, Unpack4x8Snorm) {
   auto* call = Call("unpack4x8snorm", "p1");
   Global("p1", ty.u32(), ast::StorageClass::kPrivate);
-  WrapInFunction(call);
+  WrapInFunction(CallStmt(call));
   GeneratorImpl& gen = Build();
 
   gen.increment_indent();
@@ -473,7 +473,7 @@
 TEST_F(GlslGeneratorImplTest_Intrinsic, Unpack4x8Unorm) {
   auto* call = Call("unpack4x8unorm", "p1");
   Global("p1", ty.u32(), ast::StorageClass::kPrivate);
-  WrapInFunction(call);
+  WrapInFunction(CallStmt(call));
   GeneratorImpl& gen = Build();
 
   gen.increment_indent();
@@ -490,7 +490,7 @@
 TEST_F(GlslGeneratorImplTest_Intrinsic, Unpack2x16Snorm) {
   auto* call = Call("unpack2x16snorm", "p1");
   Global("p1", ty.u32(), ast::StorageClass::kPrivate);
-  WrapInFunction(call);
+  WrapInFunction(CallStmt(call));
   GeneratorImpl& gen = Build();
 
   gen.increment_indent();
@@ -507,7 +507,7 @@
 TEST_F(GlslGeneratorImplTest_Intrinsic, Unpack2x16Unorm) {
   auto* call = Call("unpack2x16unorm", "p1");
   Global("p1", ty.u32(), ast::StorageClass::kPrivate);
-  WrapInFunction(call);
+  WrapInFunction(CallStmt(call));
   GeneratorImpl& gen = Build();
 
   gen.increment_indent();
@@ -523,7 +523,7 @@
 TEST_F(GlslGeneratorImplTest_Intrinsic, Unpack2x16Float) {
   auto* call = Call("unpack2x16float", "p1");
   Global("p1", ty.u32(), ast::StorageClass::kPrivate);
-  WrapInFunction(call);
+  WrapInFunction(CallStmt(call));
   GeneratorImpl& gen = Build();
 
   gen.increment_indent();
@@ -601,7 +601,7 @@
 
 TEST_F(GlslGeneratorImplTest_Intrinsic, DotI32) {
   Global("v", ty.vec3<i32>(), ast::StorageClass::kPrivate);
-  WrapInFunction(Call("dot", "v", "v"));
+  WrapInFunction(CallStmt(Call("dot", "v", "v")));
 
   GeneratorImpl& gen = SanitizeAndBuild();
 
@@ -630,7 +630,7 @@
 
 TEST_F(GlslGeneratorImplTest_Intrinsic, DotU32) {
   Global("v", ty.vec3<u32>(), ast::StorageClass::kPrivate);
-  WrapInFunction(Call("dot", "v", "v"));
+  WrapInFunction(CallStmt(Call("dot", "v", "v")));
 
   GeneratorImpl& gen = SanitizeAndBuild();
 
diff --git a/src/writer/hlsl/generator_impl_intrinsic_test.cc b/src/writer/hlsl/generator_impl_intrinsic_test.cc
index 92f5c55..cda470a 100644
--- a/src/writer/hlsl/generator_impl_intrinsic_test.cc
+++ b/src/writer/hlsl/generator_impl_intrinsic_test.cc
@@ -264,7 +264,7 @@
   Global("param1", ty.vec3<f32>(), ast::StorageClass::kPrivate);
   Global("param2", ty.vec3<f32>(), ast::StorageClass::kPrivate);
 
-  WrapInFunction(call);
+  WrapInFunction(CallStmt(call));
 
   GeneratorImpl& gen = Build();
 
@@ -276,7 +276,7 @@
 
 TEST_F(HlslGeneratorImplTest_Intrinsic, Select_Scalar) {
   auto* call = Call("select", 1.0f, 2.0f, true);
-  WrapInFunction(call);
+  WrapInFunction(CallStmt(call));
   GeneratorImpl& gen = Build();
 
   gen.increment_indent();
@@ -288,7 +288,7 @@
 TEST_F(HlslGeneratorImplTest_Intrinsic, Select_Vector) {
   auto* call =
       Call("select", vec2<i32>(1, 2), vec2<i32>(3, 4), vec2<bool>(true, false));
-  WrapInFunction(call);
+  WrapInFunction(CallStmt(call));
   GeneratorImpl& gen = Build();
 
   gen.increment_indent();
@@ -299,7 +299,7 @@
 
 TEST_F(HlslGeneratorImplTest_Intrinsic, Modf_Scalar) {
   auto* call = Call("modf", 1.0f);
-  WrapInFunction(call);
+  WrapInFunction(CallStmt(call));
 
   GeneratorImpl& gen = SanitizeAndBuild();
 
@@ -325,7 +325,7 @@
 
 TEST_F(HlslGeneratorImplTest_Intrinsic, Modf_Vector) {
   auto* call = Call("modf", vec3<f32>());
-  WrapInFunction(call);
+  WrapInFunction(CallStmt(call));
 
   GeneratorImpl& gen = SanitizeAndBuild();
 
@@ -351,7 +351,7 @@
 
 TEST_F(HlslGeneratorImplTest_Intrinsic, Frexp_Scalar_i32) {
   auto* call = Call("frexp", 1.0f);
-  WrapInFunction(call);
+  WrapInFunction(CallStmt(call));
 
   GeneratorImpl& gen = SanitizeAndBuild();
 
@@ -377,7 +377,7 @@
 
 TEST_F(HlslGeneratorImplTest_Intrinsic, Frexp_Vector_i32) {
   auto* call = Call("frexp", vec3<f32>());
-  WrapInFunction(call);
+  WrapInFunction(CallStmt(call));
 
   GeneratorImpl& gen = SanitizeAndBuild();
 
@@ -418,7 +418,7 @@
 [numthreads(1, 1, 1)]
 void test_function() {
   float val = 0.0f;
-  tint_isNormal(val);
+  const bool tint_symbol = tint_isNormal(val);
   return;
 }
 )");
@@ -441,7 +441,7 @@
 [numthreads(1, 1, 1)]
 void test_function() {
   float3 val = float3(0.0f, 0.0f, 0.0f);
-  tint_isNormal(val);
+  const bool3 tint_symbol = tint_isNormal(val);
   return;
 }
 )");
@@ -450,7 +450,7 @@
 TEST_F(HlslGeneratorImplTest_Intrinsic, Pack4x8Snorm) {
   auto* call = Call("pack4x8snorm", "p1");
   Global("p1", ty.vec4<f32>(), ast::StorageClass::kPrivate);
-  WrapInFunction(call);
+  WrapInFunction(CallStmt(call));
   GeneratorImpl& gen = Build();
 
   ASSERT_TRUE(gen.Generate()) << gen.error();
@@ -472,7 +472,7 @@
 TEST_F(HlslGeneratorImplTest_Intrinsic, Pack4x8Unorm) {
   auto* call = Call("pack4x8unorm", "p1");
   Global("p1", ty.vec4<f32>(), ast::StorageClass::kPrivate);
-  WrapInFunction(call);
+  WrapInFunction(CallStmt(call));
   GeneratorImpl& gen = Build();
 
   ASSERT_TRUE(gen.Generate()) << gen.error();
@@ -494,7 +494,7 @@
 TEST_F(HlslGeneratorImplTest_Intrinsic, Pack2x16Snorm) {
   auto* call = Call("pack2x16snorm", "p1");
   Global("p1", ty.vec2<f32>(), ast::StorageClass::kPrivate);
-  WrapInFunction(call);
+  WrapInFunction(CallStmt(call));
   GeneratorImpl& gen = Build();
 
   ASSERT_TRUE(gen.Generate()) << gen.error();
@@ -516,7 +516,7 @@
 TEST_F(HlslGeneratorImplTest_Intrinsic, Pack2x16Unorm) {
   auto* call = Call("pack2x16unorm", "p1");
   Global("p1", ty.vec2<f32>(), ast::StorageClass::kPrivate);
-  WrapInFunction(call);
+  WrapInFunction(CallStmt(call));
   GeneratorImpl& gen = Build();
 
   ASSERT_TRUE(gen.Generate()) << gen.error();
@@ -538,7 +538,7 @@
 TEST_F(HlslGeneratorImplTest_Intrinsic, Pack2x16Float) {
   auto* call = Call("pack2x16float", "p1");
   Global("p1", ty.vec2<f32>(), ast::StorageClass::kPrivate);
-  WrapInFunction(call);
+  WrapInFunction(CallStmt(call));
   GeneratorImpl& gen = Build();
 
   ASSERT_TRUE(gen.Generate()) << gen.error();
@@ -560,7 +560,7 @@
 TEST_F(HlslGeneratorImplTest_Intrinsic, Unpack4x8Snorm) {
   auto* call = Call("unpack4x8snorm", "p1");
   Global("p1", ty.u32(), ast::StorageClass::kPrivate);
-  WrapInFunction(call);
+  WrapInFunction(CallStmt(call));
   GeneratorImpl& gen = Build();
 
   ASSERT_TRUE(gen.Generate()) << gen.error();
@@ -583,7 +583,7 @@
 TEST_F(HlslGeneratorImplTest_Intrinsic, Unpack4x8Unorm) {
   auto* call = Call("unpack4x8unorm", "p1");
   Global("p1", ty.u32(), ast::StorageClass::kPrivate);
-  WrapInFunction(call);
+  WrapInFunction(CallStmt(call));
   GeneratorImpl& gen = Build();
 
   ASSERT_TRUE(gen.Generate()) << gen.error();
@@ -606,7 +606,7 @@
 TEST_F(HlslGeneratorImplTest_Intrinsic, Unpack2x16Snorm) {
   auto* call = Call("unpack2x16snorm", "p1");
   Global("p1", ty.u32(), ast::StorageClass::kPrivate);
-  WrapInFunction(call);
+  WrapInFunction(CallStmt(call));
   GeneratorImpl& gen = Build();
 
   ASSERT_TRUE(gen.Generate()) << gen.error();
@@ -629,7 +629,7 @@
 TEST_F(HlslGeneratorImplTest_Intrinsic, Unpack2x16Unorm) {
   auto* call = Call("unpack2x16unorm", "p1");
   Global("p1", ty.u32(), ast::StorageClass::kPrivate);
-  WrapInFunction(call);
+  WrapInFunction(CallStmt(call));
   GeneratorImpl& gen = Build();
 
   ASSERT_TRUE(gen.Generate()) << gen.error();
@@ -652,7 +652,7 @@
 TEST_F(HlslGeneratorImplTest_Intrinsic, Unpack2x16Float) {
   auto* call = Call("unpack2x16float", "p1");
   Global("p1", ty.u32(), ast::StorageClass::kPrivate);
-  WrapInFunction(call);
+  WrapInFunction(CallStmt(call));
   GeneratorImpl& gen = Build();
 
   ASSERT_TRUE(gen.Generate()) << gen.error();
diff --git a/src/writer/msl/generator_impl_intrinsic_test.cc b/src/writer/msl/generator_impl_intrinsic_test.cc
index 1f5c78e..413b49d 100644
--- a/src/writer/msl/generator_impl_intrinsic_test.cc
+++ b/src/writer/msl/generator_impl_intrinsic_test.cc
@@ -288,7 +288,7 @@
   Global("param2", ty.vec2<f32>(), ast::StorageClass::kPrivate);
 
   auto* call = Call("dot", "param1", "param2");
-  WrapInFunction(call);
+  WrapInFunction(CallStmt(call));
 
   GeneratorImpl& gen = Build();
 
@@ -322,7 +322,7 @@
 TEST_F(MslGeneratorImplTest, Pack2x16Float) {
   auto* call = Call("pack2x16float", "p1");
   Global("p1", ty.vec2<f32>(), ast::StorageClass::kPrivate);
-  WrapInFunction(call);
+  WrapInFunction(CallStmt(call));
 
   GeneratorImpl& gen = Build();
 
@@ -334,7 +334,7 @@
 TEST_F(MslGeneratorImplTest, Unpack2x16Float) {
   auto* call = Call("unpack2x16float", "p1");
   Global("p1", ty.u32(), ast::StorageClass::kPrivate);
-  WrapInFunction(call);
+  WrapInFunction(CallStmt(call));
 
   GeneratorImpl& gen = Build();
 
@@ -345,7 +345,7 @@
 
 TEST_F(MslGeneratorImplTest, DotI32) {
   Global("v", ty.vec3<i32>(), ast::StorageClass::kPrivate);
-  WrapInFunction(Call("dot", "v", "v"));
+  WrapInFunction(CallStmt(Call("dot", "v", "v")));
 
   GeneratorImpl& gen = SanitizeAndBuild();