[msl] Address/remove TODOs from MSL backend

Bug: 42251016
Change-Id: Icfa59b84a505ef4bab18c62040f6c70e94b084af
Reviewed-on: https://dawn-review.googlesource.com/c/dawn/+/205117
Commit-Queue: James Price <jrprice@google.com>
Reviewed-by: dan sinclair <dsinclair@chromium.org>
diff --git a/src/tint/lang/msl/writer/printer/printer.cc b/src/tint/lang/msl/writer/printer/printer.cc
index 2b58d4a..4311e2b 100644
--- a/src/tint/lang/msl/writer/printer/printer.cc
+++ b/src/tint/lang/msl/writer/printer/printer.cc
@@ -348,8 +348,6 @@
                 result_.workgroup_allocations.insert({func_name, {}});
             }
 
-            // TODO(dsinclair): Handle return type attributes
-
             EmitType(out, func->ReturnType());
             out << " " << func_name << "(";
 
@@ -934,8 +932,6 @@
     }
 
     void EmitCoreBuiltinName(StringStream& out, core::BuiltinFn func) {
-        // TODO(crbug.com/360166776): Implement subgroupBallot and quadSwap{X,Y,Diagonal} builtins
-        // in MSL IR backend.
         switch (func) {
             case core::BuiltinFn::kAbs:
             case core::BuiltinFn::kAcos:
diff --git a/src/tint/lang/msl/writer/type_test.cc b/src/tint/lang/msl/writer/type_test.cc
index 1a6edbb..886b4d0 100644
--- a/src/tint/lang/msl/writer/type_test.cc
+++ b/src/tint/lang/msl/writer/type_test.cc
@@ -283,34 +283,32 @@
 )");
 }
 
-// TODO(dsinclair): How do we create a pointer type ... ?
-TEST_F(MslWriterTest, DISABLED_EmitType_Pointer_Workgroup) {
+TEST_F(MslWriterTest, EmitType_Pointer_Workgroup) {
     auto* func = b.Function("foo", ty.void_());
-    b.Append(func->Block(), [&] {
-        b.Var("a", ty.ptr<workgroup, f32, read_write>());
+    auto* param = b.FunctionParam("param", ty.ptr<workgroup, f32>());
+    func->SetParams({param});
+    b.Append(func->Block(), [&] {  //
         b.Return(func);
     });
 
     ASSERT_TRUE(Generate()) << err_ << output_.msl;
     EXPECT_EQ(output_.msl, MetalHeader() + R"(
-void foo() {
-  threadgroup float* a;
+void foo(threadgroup float* const param) {
 }
 )");
 }
 
-// TODO(dsinclair): How do we create a pointer type ... ?
-TEST_F(MslWriterTest, DISABLED_EmitType_Pointer_Const) {
+TEST_F(MslWriterTest, EmitType_Pointer_Const) {
     auto* func = b.Function("foo", ty.void_());
-    b.Append(func->Block(), [&] {
-        b.Var("a", ty.ptr<function, f32>());
+    auto* param = b.FunctionParam("param", ty.ptr<storage, i32, read>());
+    func->SetParams({param});
+    b.Append(func->Block(), [&] {  //
         b.Return(func);
     });
 
     ASSERT_TRUE(Generate()) << err_ << output_.msl;
     EXPECT_EQ(output_.msl, MetalHeader() + R"(
-void foo() {
-  const thread float* a = 0.0f;
+void foo(const device int* const param) {
 }
 )");
 }