[msl-writer] Always add the metal_stdlib include.

This CL adds the metal_stdlib include to the MSL generator.

Bug: tint:8
Change-Id: Ie80a7aa3921e2c4594cb7dc5a69d1b04a253c752
Reviewed-on: https://dawn-review.googlesource.com/c/tint/+/24185
Reviewed-by: David Neto <dneto@google.com>
diff --git a/src/writer/msl/generator_impl.cc b/src/writer/msl/generator_impl.cc
index affbbf2..0a2c72f 100644
--- a/src/writer/msl/generator_impl.cc
+++ b/src/writer/msl/generator_impl.cc
@@ -69,6 +69,8 @@
 bool GeneratorImpl::Generate(const ast::Module& module) {
   module_ = &module;
 
+  out_ << "#include <metal_stdlib>" << std::endl << std::endl;
+
   for (auto* const alias : module.alias_types()) {
     if (!EmitAliasType(alias)) {
       return false;
diff --git a/src/writer/msl/generator_impl_function_test.cc b/src/writer/msl/generator_impl_function_test.cc
index 083daac..e555ed5 100644
--- a/src/writer/msl/generator_impl_function_test.cc
+++ b/src/writer/msl/generator_impl_function_test.cc
@@ -47,7 +47,9 @@
   g.increment_indent();
 
   ASSERT_TRUE(g.Generate(m)) << g.error();
-  EXPECT_EQ(g.result(), R"(  void my_func() {
+  EXPECT_EQ(g.result(), R"(#include <metal_stdlib>
+
+  void my_func() {
     return;
   }
 
@@ -71,7 +73,9 @@
   g.increment_indent();
 
   ASSERT_TRUE(g.Generate(m)) << g.error();
-  EXPECT_EQ(g.result(), R"(  void main_tint_0() {
+  EXPECT_EQ(g.result(), R"(#include <metal_stdlib>
+
+  void main_tint_0() {
     return;
   }
 
@@ -103,7 +107,9 @@
   g.increment_indent();
 
   ASSERT_TRUE(g.Generate(m)) << g.error();
-  EXPECT_EQ(g.result(), R"(  void my_func(float a, int b) {
+  EXPECT_EQ(g.result(), R"(#include <metal_stdlib>
+
+  void my_func(float a, int b) {
     return;
   }
 
@@ -124,7 +130,9 @@
 
   GeneratorImpl g;
   ASSERT_TRUE(g.Generate(m)) << g.error();
-  EXPECT_EQ(g.result(), R"(fragment void frag_main() {
+  EXPECT_EQ(g.result(), R"(#include <metal_stdlib>
+
+fragment void frag_main() {
 }
 
 )");
@@ -144,7 +152,9 @@
 
   GeneratorImpl g;
   ASSERT_TRUE(g.Generate(m)) << g.error();
-  EXPECT_EQ(g.result(), R"(kernel void my_main() {
+  EXPECT_EQ(g.result(), R"(#include <metal_stdlib>
+
+kernel void my_main() {
 }
 
 )");
@@ -164,7 +174,9 @@
 
   GeneratorImpl g;
   ASSERT_TRUE(g.Generate(m)) << g.error();
-  EXPECT_EQ(g.result(), R"(kernel void main_tint_0() {
+  EXPECT_EQ(g.result(), R"(#include <metal_stdlib>
+
+kernel void main_tint_0() {
 }
 
 )");
@@ -193,7 +205,9 @@
   g.increment_indent();
 
   ASSERT_TRUE(g.Generate(m)) << g.error();
-  EXPECT_EQ(g.result(), R"(  void my_func(float a[5]) {
+  EXPECT_EQ(g.result(), R"(#include <metal_stdlib>
+
+  void my_func(float a[5]) {
     return;
   }