Import Tint changes from Dawn

Changes:
  - 901fb74279ef117ac5a86727ea2409c763b83d4f [tint] Add explicit error for double leading underscores ... by Ben Clayton <bclayton@google.com>
  - 70a16fff5c11612225e53055f43ba6523abc8f41 Enable ReadWrite/ReadOnly storage textures by default. by Corentin Wallez <cwallez@chromium.org>
  - add6c36157ad329110e694fc55db7fbb7a9571c3 [tint][wgsl] Use two underscores for internal builtin fn by Ben Clayton <bclayton@google.com>
GitOrigin-RevId: 901fb74279ef117ac5a86727ea2409c763b83d4f
Change-Id: I54f3a6b255fe81efc8cf5e0476cdaa6b640fe815
Reviewed-on: https://dawn-review.googlesource.com/c/tint/+/177860
Reviewed-by: Ben Clayton <bclayton@google.com>
Kokoro: Kokoro <noreply+kokoro@google.com>
Commit-Queue: Ben Clayton <bclayton@google.com>
diff --git a/src/tint/lang/wgsl/ast/transform/substitute_override_test.cc b/src/tint/lang/wgsl/ast/transform/substitute_override_test.cc
index a0ed463..5769c85 100644
--- a/src/tint/lang/wgsl/ast/transform/substitute_override_test.cc
+++ b/src/tint/lang/wgsl/ast/transform/substitute_override_test.cc
@@ -292,7 +292,7 @@
 fn f() {
   const smaller_than_any_f32 = 1e-50;
   const large_float = 1000000000000000013287555072.0;
-  _ = _tint_materialize(vec2(0))[i32(((_tint_materialize(vec2(smaller_than_any_f32))[O] * large_float) * large_float))];
+  _ = __tint_materialize(vec2(0))[i32(((__tint_materialize(vec2(smaller_than_any_f32))[O] * large_float) * large_float))];
 }
 )";
 
diff --git a/src/tint/lang/wgsl/builtin_fn.cc b/src/tint/lang/wgsl/builtin_fn.cc
index 04bdd2f..a601143 100644
--- a/src/tint/lang/wgsl/builtin_fn.cc
+++ b/src/tint/lang/wgsl/builtin_fn.cc
@@ -408,7 +408,7 @@
     if (name == "subgroupBroadcast") {
         return BuiltinFn::kSubgroupBroadcast;
     }
-    if (name == "_tint_materialize") {
+    if (name == "__tint_materialize") {
         return BuiltinFn::kTintMaterialize;
     }
     return BuiltinFn::kNone;
@@ -665,7 +665,7 @@
         case BuiltinFn::kSubgroupBroadcast:
             return "subgroupBroadcast";
         case BuiltinFn::kTintMaterialize:
-            return "_tint_materialize";
+            return "__tint_materialize";
     }
     return "<unknown>";
 }
diff --git a/src/tint/lang/wgsl/builtin_fn.h b/src/tint/lang/wgsl/builtin_fn.h
index 30d4bd7..8f061ee 100644
--- a/src/tint/lang/wgsl/builtin_fn.h
+++ b/src/tint/lang/wgsl/builtin_fn.h
@@ -444,7 +444,7 @@
     "atomicCompareExchangeWeak",
     "subgroupBallot",
     "subgroupBroadcast",
-    "_tint_materialize",
+    "__tint_materialize",
 };
 
 /// Determines if the given `f` is a coarse derivative.
diff --git a/src/tint/lang/wgsl/features/status.cc b/src/tint/lang/wgsl/features/status.cc
index 22fd78e..87462d2 100644
--- a/src/tint/lang/wgsl/features/status.cc
+++ b/src/tint/lang/wgsl/features/status.cc
@@ -36,8 +36,6 @@
             ////////////////////////////////////////////////////////////////////
             // Experimental features
             ///////////////////////////////////////////////////////////////////
-        case LanguageFeature::kReadonlyAndReadwriteStorageTextures:
-            return FeatureStatus::kExperimental;
 
             ////////////////////////////////////////////////////////////////////
             // Enabled features
@@ -45,6 +43,7 @@
         case LanguageFeature::kPacked4X8IntegerDotProduct:
         case LanguageFeature::kPointerCompositeAccess:
         case LanguageFeature::kUnrestrictedPointerParameters:
+        case LanguageFeature::kReadonlyAndReadwriteStorageTextures:
             return FeatureStatus::kShippedWithKillswitch;
 
             ////////////////////////////////////////////////////////////////////
diff --git a/src/tint/lang/wgsl/intrinsic/data.cc b/src/tint/lang/wgsl/intrinsic/data.cc
index 77641d2..4aeadb0 100644
--- a/src/tint/lang/wgsl/intrinsic/data.cc
+++ b/src/tint/lang/wgsl/intrinsic/data.cc
@@ -11546,7 +11546,7 @@
   },
   {
     /* [123] */
-    /* fn _tint_materialize[T](T) -> T */
+    /* fn __tint_materialize[T](T) -> T */
     /* num overloads */ 1,
     /* overloads */ OverloadIndex(524),
   },
diff --git a/src/tint/lang/wgsl/reader/parser/lexer.cc b/src/tint/lang/wgsl/reader/parser/lexer.cc
index 117f30a..b12c0ec 100644
--- a/src/tint/lang/wgsl/reader/parser/lexer.cc
+++ b/src/tint/lang/wgsl/reader/parser/lexer.cc
@@ -1012,19 +1012,17 @@
 
         // Consume continuing codepoint
         advance(static_cast<uint32_t>(n));
-
-        if (pos() - start == 2 && substr(start, 2) == "__") {
-            // Identifiers prefixed with two or more underscores are not allowed.
-            // We check for these in the loop to bail early and prevent quadratic parse time for
-            // long sequences of ____.
-            set_pos(start);
-            return {};
-        }
     }
 
     auto str = substr(start, pos() - start);
     end_source(source);
 
+    if (str.length() > 1 && substr(start, 2) == "__") {
+        // Identifiers prefixed with two or more underscores are not allowed.
+        return Token{Token::Type::kError, source,
+                     "identifiers must not start with two or more underscores"};
+    }
+
     if (auto t = parse_keyword(str); t.has_value()) {
         return Token{t.value(), source, str};
     }
diff --git a/src/tint/lang/wgsl/reader/parser/lexer_test.cc b/src/tint/lang/wgsl/reader/parser/lexer_test.cc
index b2b593b..38cbd46 100644
--- a/src/tint/lang/wgsl/reader/parser/lexer_test.cc
+++ b/src/tint/lang/wgsl/reader/parser/lexer_test.cc
@@ -769,7 +769,8 @@
     ASSERT_FALSE(list.empty());
 
     auto& t = list[0];
-    EXPECT_FALSE(t.IsIdentifier());
+    EXPECT_TRUE(t.IsError());
+    EXPECT_EQ(t.to_str(), "identifiers must not start with two or more underscores");
 }
 
 TEST_F(LexerTest, IdentifierTest_DoesNotStartWithNumber) {
diff --git a/src/tint/lang/wgsl/wgsl.def b/src/tint/lang/wgsl/wgsl.def
index 8a1740b..ca0b0a2 100644
--- a/src/tint/lang/wgsl/wgsl.def
+++ b/src/tint/lang/wgsl/wgsl.def
@@ -925,4 +925,4 @@
 ////////////////////////////////////////////////////////////////////////////////
 // Tint internal builtins                                                     //
 ////////////////////////////////////////////////////////////////////////////////
-@const("Identity") fn _tint_materialize[T](T) -> T
+@const("Identity") fn __tint_materialize[T](T) -> T