Remove support for the elseif keyword

This was deprecated in M99 and can now be removed.

Fixed: tint:1289
Change-Id: I6513360c5615609a3cc36ae28d5ef8ebddece710
Reviewed-on: https://dawn-review.googlesource.com/c/tint/+/83964
Reviewed-by: Ben Clayton <bclayton@google.com>
Kokoro: Kokoro <noreply+kokoro@google.com>
diff --git a/docs/tint/origin-trial-changes.md b/docs/tint/origin-trial-changes.md
index ff3c4f6..fb48d13 100644
--- a/docs/tint/origin-trial-changes.md
+++ b/docs/tint/origin-trial-changes.md
@@ -7,6 +7,7 @@
 * The `@block` attribute has been removed. [tint:1324](crbug.com/tint/1324)
 * The `@stride` attribute has been removed. [tint:1381](crbug.com/tint/1381)
 * Attributes using `[[attribute]]` syntax are no longer supported. [tint:1382](crbug.com/tint/1382)
+* The `elseif` keyword is no longer supported. [tint:1289](crbug.com/tint/1289)
 
 ## Changes for M101
 
diff --git a/src/tint/reader/wgsl/lexer.cc b/src/tint/reader/wgsl/lexer.cc
index 1d01375..e6a01da 100644
--- a/src/tint/reader/wgsl/lexer.cc
+++ b/src/tint/reader/wgsl/lexer.cc
@@ -971,8 +971,6 @@
     return {Token::Type::kDefault, source, "default"};
   if (str == "else")
     return {Token::Type::kElse, source, "else"};
-  if (str == "elseif")
-    return {Token::Type::kElseIf, source, "elseif"};
   if (str == "f32")
     return {Token::Type::kF32, source, "f32"};
   if (str == "fallthrough")
diff --git a/src/tint/reader/wgsl/lexer_test.cc b/src/tint/reader/wgsl/lexer_test.cc
index f9354e4..0833691 100644
--- a/src/tint/reader/wgsl/lexer_test.cc
+++ b/src/tint/reader/wgsl/lexer_test.cc
@@ -865,7 +865,6 @@
         TokenData{"default", Token::Type::kDefault},
         TokenData{"discard", Token::Type::kDiscard},
         TokenData{"else", Token::Type::kElse},
-        TokenData{"elseif", Token::Type::kElseIf},
         TokenData{"f32", Token::Type::kF32},
         TokenData{"fallthrough", Token::Type::kFallthrough},
         TokenData{"false", Token::Type::kFalse},
diff --git a/src/tint/reader/wgsl/parser_impl.cc b/src/tint/reader/wgsl/parser_impl.cc
index 0f62a2f..20e8d38 100644
--- a/src/tint/reader/wgsl/parser_impl.cc
+++ b/src/tint/reader/wgsl/parser_impl.cc
@@ -1684,9 +1684,6 @@
     bool else_if = false;
     if (match(Token::Type::kElse, &start)) {
       else_if = match(Token::Type::kIf);
-    } else if (match(Token::Type::kElseIf, &start)) {
-      deprecated(start, "'elseif' is now 'else if'");
-      else_if = true;
     } else {
       break;
     }
diff --git a/src/tint/reader/wgsl/parser_impl_elseif_stmt_test.cc b/src/tint/reader/wgsl/parser_impl_elseif_stmt_test.cc
index 8608771..56d978f 100644
--- a/src/tint/reader/wgsl/parser_impl_elseif_stmt_test.cc
+++ b/src/tint/reader/wgsl/parser_impl_elseif_stmt_test.cc
@@ -64,68 +64,6 @@
   EXPECT_EQ(p->error(), "1:15: expected '{'");
 }
 
-////////////////////////////////////////////////////////////////////////////////
-// The tests below use the deprecated 'elseif' syntax
-////////////////////////////////////////////////////////////////////////////////
-
-TEST_F(ParserImplTest, DEPRECATED_ElseStmts) {
-  auto p = parser("elseif (a == 4) { a = b; c = d; }");
-  auto e = p->else_stmts();
-  EXPECT_FALSE(p->has_error()) << p->error();
-  EXPECT_EQ(
-      p->error(),
-      R"(1:1: use of deprecated language feature: 'elseif' is now 'else if')");
-  ASSERT_EQ(e.value.size(), 1u);
-
-  ASSERT_TRUE(e.value[0]->Is<ast::ElseStatement>());
-  ASSERT_NE(e.value[0]->condition, nullptr);
-  ASSERT_TRUE(e.value[0]->condition->Is<ast::BinaryExpression>());
-  EXPECT_EQ(e.value[0]->body->statements.size(), 2u);
-}
-
-TEST_F(ParserImplTest, DEPRECATED_ElseStmts_Multiple) {
-  auto p = parser("elseif (a == 4) { a = b; c = d; } elseif(c) { d = 2; }");
-  auto e = p->else_stmts();
-  EXPECT_FALSE(p->has_error()) << p->error();
-  EXPECT_EQ(
-      p->error(),
-      R"(1:1: use of deprecated language feature: 'elseif' is now 'else if'
-1:35: use of deprecated language feature: 'elseif' is now 'else if')");
-  ASSERT_EQ(e.value.size(), 2u);
-
-  ASSERT_TRUE(e.value[0]->Is<ast::ElseStatement>());
-  ASSERT_NE(e.value[0]->condition, nullptr);
-  ASSERT_TRUE(e.value[0]->condition->Is<ast::BinaryExpression>());
-  EXPECT_EQ(e.value[0]->body->statements.size(), 2u);
-
-  ASSERT_TRUE(e.value[1]->Is<ast::ElseStatement>());
-  ASSERT_NE(e.value[1]->condition, nullptr);
-  ASSERT_TRUE(e.value[1]->condition->Is<ast::IdentifierExpression>());
-  EXPECT_EQ(e.value[1]->body->statements.size(), 1u);
-}
-
-TEST_F(ParserImplTest, DEPRECATED_ElseStmts_InvalidBody) {
-  auto p = parser("elseif (true) { fn main() {}}");
-  auto e = p->else_stmts();
-  EXPECT_TRUE(e.errored);
-  EXPECT_TRUE(p->has_error());
-  EXPECT_EQ(
-      p->error(),
-      R"(1:1: use of deprecated language feature: 'elseif' is now 'else if'
-1:17: expected '}')");
-}
-
-TEST_F(ParserImplTest, DEPRECATED_ElseStmts_MissingBody) {
-  auto p = parser("elseif (true)");
-  auto e = p->else_stmts();
-  EXPECT_TRUE(e.errored);
-  EXPECT_TRUE(p->has_error());
-  EXPECT_EQ(
-      p->error(),
-      R"(1:1: use of deprecated language feature: 'elseif' is now 'else if'
-1:14: expected '{')");
-}
-
 }  // namespace
 }  // namespace wgsl
 }  // namespace reader
diff --git a/src/tint/reader/wgsl/token.cc b/src/tint/reader/wgsl/token.cc
index 266907e..c873e17 100644
--- a/src/tint/reader/wgsl/token.cc
+++ b/src/tint/reader/wgsl/token.cc
@@ -131,8 +131,6 @@
       return "default";
     case Token::Type::kElse:
       return "else";
-    case Token::Type::kElseIf:
-      return "elseif";
     case Token::Type::kF32:
       return "f32";
     case Token::Type::kFallthrough:
diff --git a/src/tint/reader/wgsl/token.h b/src/tint/reader/wgsl/token.h
index dcc0167..b25fb60 100644
--- a/src/tint/reader/wgsl/token.h
+++ b/src/tint/reader/wgsl/token.h
@@ -141,8 +141,6 @@
     kDefault,
     /// A 'else'
     kElse,
-    /// A 'elseif'
-    kElseIf,
     /// A 'f32'
     kF32,
     /// A 'fallthrough'