diff --git a/BUILD.gn b/BUILD.gn
index 28606b1..162f7a1 100644
--- a/BUILD.gn
+++ b/BUILD.gn
@@ -278,8 +278,6 @@
     "src/ast/sint_literal.h",
     "src/ast/statement.cc",
     "src/ast/statement.h",
-    "src/ast/statement_condition.cc",
-    "src/ast/statement_condition.h",
     "src/ast/storage_class.cc",
     "src/ast/storage_class.h",
     "src/ast/struct.cc",
diff --git a/src/CMakeLists.txt b/src/CMakeLists.txt
index 7f2f274..e848119 100644
--- a/src/CMakeLists.txt
+++ b/src/CMakeLists.txt
@@ -115,8 +115,6 @@
   ast/sint_literal.h
   ast/statement.cc
   ast/statement.h
-  ast/statement_condition.cc
-  ast/statement_condition.h
   ast/storage_class.cc
   ast/storage_class.h
   ast/struct_decoration.cc
diff --git a/src/ast/break_statement.cc b/src/ast/break_statement.cc
index a1dda43..db543d3 100644
--- a/src/ast/break_statement.cc
+++ b/src/ast/break_statement.cc
@@ -21,19 +21,6 @@
 
 BreakStatement::BreakStatement(const Source& source) : Statement(source) {}
 
-BreakStatement::BreakStatement(StatementCondition condition,
-                               std::unique_ptr<Expression> conditional)
-    : Statement(),
-      condition_(condition),
-      conditional_(std::move(conditional)) {}
-
-BreakStatement::BreakStatement(const Source& source,
-                               StatementCondition condition,
-                               std::unique_ptr<Expression> conditional)
-    : Statement(source),
-      condition_(condition),
-      conditional_(std::move(conditional)) {}
-
 BreakStatement::BreakStatement(BreakStatement&&) = default;
 
 BreakStatement::~BreakStatement() = default;
@@ -43,26 +30,12 @@
 }
 
 bool BreakStatement::IsValid() const {
-  if (condition_ == StatementCondition::kNone)
-    return conditional_ == nullptr;
-
-  return conditional_ != nullptr && conditional_->IsValid();
+  return true;
 }
 
 void BreakStatement::to_str(std::ostream& out, size_t indent) const {
   make_indent(out, indent);
-  out << "Break{";
-
-  if (condition_ != StatementCondition::kNone) {
-    out << std::endl;
-
-    make_indent(out, indent + 2);
-    out << condition_ << std::endl;
-    conditional_->to_str(out, indent + 2);
-
-    make_indent(out, indent);
-  }
-  out << "}" << std::endl;
+  out << "Break{}" << std::endl;
 }
 
 }  // namespace ast
diff --git a/src/ast/break_statement.h b/src/ast/break_statement.h
index 4a720de..f29d5fc 100644
--- a/src/ast/break_statement.h
+++ b/src/ast/break_statement.h
@@ -15,12 +15,7 @@
 #ifndef SRC_AST_BREAK_STATEMENT_H_
 #define SRC_AST_BREAK_STATEMENT_H_
 
-#include <memory>
-#include <utility>
-
-#include "src/ast/expression.h"
 #include "src/ast/statement.h"
-#include "src/ast/statement_condition.h"
 
 namespace tint {
 namespace ast {
@@ -33,36 +28,10 @@
   /// Constructor
   /// @param source the break statement source
   explicit BreakStatement(const Source& source);
-  /// Constructor
-  /// @param condition the condition type
-  /// @param conditional the condition expression
-  BreakStatement(StatementCondition condition,
-                 std::unique_ptr<Expression> conditional);
-  /// Constructor
-  /// @param source the break statement source
-  /// @param condition the condition type
-  /// @param conditional the condition expression
-  BreakStatement(const Source& source,
-                 StatementCondition condition,
-                 std::unique_ptr<Expression> conditional);
   /// Move constructor
   BreakStatement(BreakStatement&&);
   ~BreakStatement() override;
 
-  /// Sets the condition type
-  /// @param condition the condition type
-  void set_condition(StatementCondition condition) { condition_ = condition; }
-  /// @returns the condition type
-  StatementCondition condition() const { return condition_; }
-
-  /// Sets the conditional expression
-  /// @param conditional the conditional expression
-  void set_conditional(std::unique_ptr<Expression> conditional) {
-    conditional_ = std::move(conditional);
-  }
-  /// @returns the conditional expression
-  Expression* conditional() const { return conditional_.get(); }
-
   /// @returns true if this is an break statement
   bool IsBreak() const override;
 
@@ -76,9 +45,6 @@
 
  private:
   BreakStatement(const BreakStatement&) = delete;
-
-  StatementCondition condition_ = StatementCondition::kNone;
-  std::unique_ptr<Expression> conditional_;
 };
 
 }  // namespace ast
diff --git a/src/ast/break_statement_test.cc b/src/ast/break_statement_test.cc
index 49df1ba..4e39386 100644
--- a/src/ast/break_statement_test.cc
+++ b/src/ast/break_statement_test.cc
@@ -15,8 +15,6 @@
 #include "src/ast/break_statement.h"
 
 #include "gtest/gtest.h"
-#include "src/ast/identifier_expression.h"
-#include "src/ast/statement_condition.h"
 
 namespace tint {
 namespace ast {
@@ -24,21 +22,6 @@
 
 using BreakStatementTest = testing::Test;
 
-TEST_F(BreakStatementTest, Creation) {
-  BreakStatement stmt;
-  EXPECT_EQ(stmt.condition(), StatementCondition::kNone);
-  EXPECT_EQ(stmt.conditional(), nullptr);
-}
-
-TEST_F(BreakStatementTest, CreationWithConditional) {
-  auto expr = std::make_unique<IdentifierExpression>("expr");
-  auto* expr_ptr = expr.get();
-
-  BreakStatement stmt(StatementCondition::kIf, std::move(expr));
-  EXPECT_EQ(stmt.condition(), StatementCondition::kIf);
-  EXPECT_EQ(stmt.conditional(), expr_ptr);
-}
-
 TEST_F(BreakStatementTest, Creation_WithSource) {
   BreakStatement stmt(Source{20, 2});
   auto src = stmt.source();
@@ -46,51 +29,17 @@
   EXPECT_EQ(src.column, 2u);
 }
 
-TEST_F(BreakStatementTest, Creation_WithSourceAndCondition) {
-  auto expr = std::make_unique<IdentifierExpression>("expr");
-
-  BreakStatement stmt(Source{20, 2}, StatementCondition::kUnless,
-                      std::move(expr));
-  auto src = stmt.source();
-  EXPECT_EQ(src.line, 20u);
-  EXPECT_EQ(src.column, 2u);
-}
-
 TEST_F(BreakStatementTest, IsBreak) {
   BreakStatement stmt;
   EXPECT_TRUE(stmt.IsBreak());
 }
 
-TEST_F(BreakStatementTest, IsValid_WithoutCondition) {
+TEST_F(BreakStatementTest, IsValid) {
   BreakStatement stmt;
   EXPECT_TRUE(stmt.IsValid());
 }
 
-TEST_F(BreakStatementTest, IsValid_WithCondition) {
-  auto expr = std::make_unique<IdentifierExpression>("expr");
-  BreakStatement stmt(StatementCondition::kIf, std::move(expr));
-  EXPECT_TRUE(stmt.IsValid());
-}
-
-TEST_F(BreakStatementTest, IsValid_WithConditionAndConditionNone) {
-  auto expr = std::make_unique<IdentifierExpression>("expr");
-  BreakStatement stmt(StatementCondition::kNone, std::move(expr));
-  EXPECT_FALSE(stmt.IsValid());
-}
-
-TEST_F(BreakStatementTest, IsValid_WithCondition_MissingConditional) {
-  BreakStatement stmt;
-  stmt.set_condition(StatementCondition::kIf);
-  EXPECT_FALSE(stmt.IsValid());
-}
-
-TEST_F(BreakStatementTest, IsValid_InvalidConditional) {
-  auto expr = std::make_unique<IdentifierExpression>("");
-  BreakStatement stmt(StatementCondition::kIf, std::move(expr));
-  EXPECT_FALSE(stmt.IsValid());
-}
-
-TEST_F(BreakStatementTest, ToStr_WithoutCondition) {
+TEST_F(BreakStatementTest, ToStr) {
   BreakStatement stmt;
   std::ostringstream out;
   stmt.to_str(out, 2);
@@ -98,18 +47,6 @@
 )");
 }
 
-TEST_F(BreakStatementTest, ToStr_WithCondition) {
-  auto expr = std::make_unique<IdentifierExpression>("expr");
-  BreakStatement stmt(StatementCondition::kUnless, std::move(expr));
-  std::ostringstream out;
-  stmt.to_str(out, 2);
-  EXPECT_EQ(out.str(), R"(  Break{
-    unless
-    Identifier{expr}
-  }
-)");
-}
-
 }  // namespace
 }  // namespace ast
 }  // namespace tint
diff --git a/src/ast/continue_statement.cc b/src/ast/continue_statement.cc
index 6ef2f81..efc17d9 100644
--- a/src/ast/continue_statement.cc
+++ b/src/ast/continue_statement.cc
@@ -22,19 +22,6 @@
 ContinueStatement::ContinueStatement(const Source& source)
     : Statement(source) {}
 
-ContinueStatement::ContinueStatement(StatementCondition condition,
-                                     std::unique_ptr<Expression> conditional)
-    : Statement(),
-      condition_(condition),
-      conditional_(std::move(conditional)) {}
-
-ContinueStatement::ContinueStatement(const Source& source,
-                                     StatementCondition condition,
-                                     std::unique_ptr<Expression> conditional)
-    : Statement(source),
-      condition_(condition),
-      conditional_(std::move(conditional)) {}
-
 ContinueStatement::ContinueStatement(ContinueStatement&&) = default;
 
 ContinueStatement::~ContinueStatement() = default;
@@ -44,26 +31,12 @@
 }
 
 bool ContinueStatement::IsValid() const {
-  if (condition_ == StatementCondition::kNone)
-    return conditional_ == nullptr;
-
-  return conditional_ && conditional_->IsValid();
+  return true;
 }
 
 void ContinueStatement::to_str(std::ostream& out, size_t indent) const {
   make_indent(out, indent);
-  out << "Continue{";
-
-  if (condition_ != StatementCondition::kNone) {
-    out << std::endl;
-
-    make_indent(out, indent + 2);
-    out << condition_ << std::endl;
-    conditional_->to_str(out, indent + 2);
-
-    make_indent(out, indent);
-  }
-  out << "}" << std::endl;
+  out << "Continue{}" << std::endl;
 }
 
 }  // namespace ast
diff --git a/src/ast/continue_statement.h b/src/ast/continue_statement.h
index f06df2f..866917b 100644
--- a/src/ast/continue_statement.h
+++ b/src/ast/continue_statement.h
@@ -18,9 +18,7 @@
 #include <memory>
 #include <utility>
 
-#include "src/ast/expression.h"
 #include "src/ast/statement.h"
-#include "src/ast/statement_condition.h"
 
 namespace tint {
 namespace ast {
@@ -33,36 +31,10 @@
   /// Constructor
   /// @param source the continue statement source
   explicit ContinueStatement(const Source& source);
-  /// Constructor
-  /// @param condition the condition type
-  /// @param conditional the condition expression
-  ContinueStatement(StatementCondition condition,
-                    std::unique_ptr<Expression> conditional);
-  /// Constructor
-  /// @param source the continue statement source
-  /// @param condition the condition type
-  /// @param conditional the condition expression
-  ContinueStatement(const Source& source,
-                    StatementCondition condition,
-                    std::unique_ptr<Expression> conditional);
   /// Move constructor
   ContinueStatement(ContinueStatement&&);
   ~ContinueStatement() override;
 
-  /// Sets the condition type
-  /// @param condition the condition type
-  void set_condition(StatementCondition condition) { condition_ = condition; }
-  /// @returns the condition type
-  StatementCondition condition() const { return condition_; }
-
-  /// Sets the conditional expression
-  /// @param conditional the conditional expression
-  void set_conditional(std::unique_ptr<Expression> conditional) {
-    conditional_ = std::move(conditional);
-  }
-  /// @returns the conditional expression
-  Expression* conditional() const { return conditional_.get(); }
-
   /// @returns true if this is an continue statement
   bool IsContinue() const override;
 
@@ -76,9 +48,6 @@
 
  private:
   ContinueStatement(const ContinueStatement&) = delete;
-
-  StatementCondition condition_ = StatementCondition::kNone;
-  std::unique_ptr<Expression> conditional_;
 };
 
 }  // namespace ast
diff --git a/src/ast/continue_statement_test.cc b/src/ast/continue_statement_test.cc
index 10026bd..4ba18e9 100644
--- a/src/ast/continue_statement_test.cc
+++ b/src/ast/continue_statement_test.cc
@@ -15,8 +15,6 @@
 #include "src/ast/continue_statement.h"
 
 #include "gtest/gtest.h"
-#include "src/ast/identifier_expression.h"
-#include "src/ast/statement_condition.h"
 
 namespace tint {
 namespace ast {
@@ -24,21 +22,6 @@
 
 using ContinueStatementTest = testing::Test;
 
-TEST_F(ContinueStatementTest, Creation) {
-  ContinueStatement stmt;
-  EXPECT_EQ(stmt.condition(), StatementCondition::kNone);
-  EXPECT_EQ(stmt.conditional(), nullptr);
-}
-
-TEST_F(ContinueStatementTest, CreationWithConditional) {
-  auto expr = std::make_unique<IdentifierExpression>("expr");
-  auto* expr_ptr = expr.get();
-
-  ContinueStatement stmt(StatementCondition::kIf, std::move(expr));
-  EXPECT_EQ(stmt.condition(), StatementCondition::kIf);
-  EXPECT_EQ(stmt.conditional(), expr_ptr);
-}
-
 TEST_F(ContinueStatementTest, Creation_WithSource) {
   ContinueStatement stmt(Source{20, 2});
   auto src = stmt.source();
@@ -46,51 +29,17 @@
   EXPECT_EQ(src.column, 2u);
 }
 
-TEST_F(ContinueStatementTest, Creation_WithSourceAndCondition) {
-  auto expr = std::make_unique<IdentifierExpression>("expr");
-
-  ContinueStatement stmt(Source{20, 2}, StatementCondition::kUnless,
-                         std::move(expr));
-  auto src = stmt.source();
-  EXPECT_EQ(src.line, 20u);
-  EXPECT_EQ(src.column, 2u);
-}
-
 TEST_F(ContinueStatementTest, IsContinue) {
   ContinueStatement stmt;
   EXPECT_TRUE(stmt.IsContinue());
 }
 
-TEST_F(ContinueStatementTest, IsValid_WithoutCondition) {
+TEST_F(ContinueStatementTest, IsValid) {
   ContinueStatement stmt;
   EXPECT_TRUE(stmt.IsValid());
 }
 
-TEST_F(ContinueStatementTest, IsValid_WithCondition) {
-  auto expr = std::make_unique<IdentifierExpression>("expr");
-  ContinueStatement stmt(StatementCondition::kIf, std::move(expr));
-  EXPECT_TRUE(stmt.IsValid());
-}
-
-TEST_F(ContinueStatementTest, IsValid_InvalidConditional) {
-  auto expr = std::make_unique<IdentifierExpression>("");
-  ContinueStatement stmt(StatementCondition::kIf, std::move(expr));
-  EXPECT_FALSE(stmt.IsValid());
-}
-
-TEST_F(ContinueStatementTest, IsValid_NoneConditionWithConditional) {
-  auto expr = std::make_unique<IdentifierExpression>("expr");
-  ContinueStatement stmt(StatementCondition::kNone, std::move(expr));
-  EXPECT_FALSE(stmt.IsValid());
-}
-
-TEST_F(ContinueStatementTest, IsValid_WithCondition_MissingConditional) {
-  ContinueStatement stmt;
-  stmt.set_condition(StatementCondition::kIf);
-  EXPECT_FALSE(stmt.IsValid());
-}
-
-TEST_F(ContinueStatementTest, ToStr_WithoutCondition) {
+TEST_F(ContinueStatementTest, ToStr) {
   ContinueStatement stmt;
   std::ostringstream out;
   stmt.to_str(out, 2);
@@ -98,18 +47,6 @@
 )");
 }
 
-TEST_F(ContinueStatementTest, ToStr_WithCondition) {
-  auto expr = std::make_unique<IdentifierExpression>("expr");
-  ContinueStatement stmt(StatementCondition::kUnless, std::move(expr));
-  std::ostringstream out;
-  stmt.to_str(out, 2);
-  EXPECT_EQ(out.str(), R"(  Continue{
-    unless
-    Identifier{expr}
-  }
-)");
-}
-
 }  // namespace
 }  // namespace ast
 }  // namespace tint
diff --git a/src/ast/fallthrough_statement.h b/src/ast/fallthrough_statement.h
index a165b3a..7579e49 100644
--- a/src/ast/fallthrough_statement.h
+++ b/src/ast/fallthrough_statement.h
@@ -15,9 +15,7 @@
 #ifndef SRC_AST_FALLTHROUGH_STATEMENT_H_
 #define SRC_AST_FALLTHROUGH_STATEMENT_H_
 
-#include "src/ast/expression.h"
 #include "src/ast/statement.h"
-#include "src/ast/statement_condition.h"
 
 namespace tint {
 namespace ast {
diff --git a/src/ast/statement_condition.cc b/src/ast/statement_condition.cc
deleted file mode 100644
index dc2136f..0000000
--- a/src/ast/statement_condition.cc
+++ /dev/null
@@ -1,37 +0,0 @@
-// Copyright 2020 The Tint Authors.
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-//     http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-#include "src/ast/statement_condition.h"
-
-namespace tint {
-namespace ast {
-
-std::ostream& operator<<(std::ostream& out, StatementCondition condition) {
-  switch (condition) {
-    case StatementCondition::kNone:
-      out << "none";
-      break;
-    case StatementCondition::kIf:
-      out << "if";
-      break;
-    case StatementCondition::kUnless:
-      out << "unless";
-      break;
-  }
-
-  return out;
-}
-
-}  // namespace ast
-}  // namespace tint
diff --git a/src/ast/statement_condition.h b/src/ast/statement_condition.h
deleted file mode 100644
index fa4149e..0000000
--- a/src/ast/statement_condition.h
+++ /dev/null
@@ -1,31 +0,0 @@
-// Copyright 2020 The Tint Authors.
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-//     http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-#ifndef SRC_AST_STATEMENT_CONDITION_H_
-#define SRC_AST_STATEMENT_CONDITION_H_
-
-#include <ostream>
-
-namespace tint {
-namespace ast {
-
-/// Type of  condition attached to a statement
-enum class StatementCondition { kNone = 0, kIf, kUnless };
-
-std::ostream& operator<<(std::ostream& out, StatementCondition condition);
-
-}  // namespace ast
-}  // namespace tint
-
-#endif  // SRC_AST_STATEMENT_CONDITION_H_
diff --git a/src/ast/switch_statement.h b/src/ast/switch_statement.h
index 29078cc..ba3f268 100644
--- a/src/ast/switch_statement.h
+++ b/src/ast/switch_statement.h
@@ -22,7 +22,6 @@
 #include "src/ast/expression.h"
 #include "src/ast/literal.h"
 #include "src/ast/statement.h"
-#include "src/ast/statement_condition.h"
 
 namespace tint {
 namespace ast {
diff --git a/src/reader/wgsl/parser_impl.cc b/src/reader/wgsl/parser_impl.cc
index 89edc77..eebea01 100644
--- a/src/reader/wgsl/parser_impl.cc
+++ b/src/reader/wgsl/parser_impl.cc
@@ -41,7 +41,6 @@
 #include "src/ast/scalar_constructor_expression.h"
 #include "src/ast/set_decoration.h"
 #include "src/ast/sint_literal.h"
-#include "src/ast/statement_condition.h"
 #include "src/ast/struct_member_offset_decoration.h"
 #include "src/ast/switch_statement.h"
 #include "src/ast/type/alias_type.h"
@@ -1943,73 +1942,25 @@
 }
 
 // break_stmt
-//   : BREAK ({IF | UNLESS} paren_rhs_stmt)?
+//   : BREAK
 std::unique_ptr<ast::BreakStatement> ParserImpl::break_stmt() {
   auto t = peek();
   if (!t.IsBreak())
     return nullptr;
 
-  auto source = t.source();
   next();  // Consume the peek
-
-  ast::StatementCondition condition = ast::StatementCondition::kNone;
-  std::unique_ptr<ast::Expression> conditional = nullptr;
-
-  t = peek();
-  if (t.IsIf() || t.IsUnless()) {
-    next();  // Consume the peek
-
-    if (t.IsIf())
-      condition = ast::StatementCondition::kIf;
-    else
-      condition = ast::StatementCondition::kUnless;
-
-    conditional = paren_rhs_stmt();
-    if (has_error())
-      return nullptr;
-    if (conditional == nullptr) {
-      set_error(peek(), "unable to parse conditional statement");
-      return nullptr;
-    }
-  }
-
-  return std::make_unique<ast::BreakStatement>(source, condition,
-                                               std::move(conditional));
+  return std::make_unique<ast::BreakStatement>(t.source());
 }
 
 // continue_stmt
-//   : CONTINUE ({IF | UNLESS} paren_rhs_stmt)?
+//   : CONTINUE
 std::unique_ptr<ast::ContinueStatement> ParserImpl::continue_stmt() {
   auto t = peek();
   if (!t.IsContinue())
     return nullptr;
 
-  auto source = t.source();
   next();  // Consume the peek
-
-  ast::StatementCondition condition = ast::StatementCondition::kNone;
-  std::unique_ptr<ast::Expression> conditional = nullptr;
-
-  t = peek();
-  if (t.IsIf() || t.IsUnless()) {
-    next();  // Consume the peek
-
-    if (t.IsIf())
-      condition = ast::StatementCondition::kIf;
-    else
-      condition = ast::StatementCondition::kUnless;
-
-    conditional = paren_rhs_stmt();
-    if (has_error())
-      return nullptr;
-    if (conditional == nullptr) {
-      set_error(peek(), "unable to parse conditional statement");
-      return nullptr;
-    }
-  }
-
-  return std::make_unique<ast::ContinueStatement>(source, condition,
-                                                  std::move(conditional));
+  return std::make_unique<ast::ContinueStatement>(t.source());
 }
 
 // continuing_stmt
diff --git a/src/reader/wgsl/parser_impl_break_stmt_test.cc b/src/reader/wgsl/parser_impl_break_stmt_test.cc
index 45ff183..4eba159 100644
--- a/src/reader/wgsl/parser_impl_break_stmt_test.cc
+++ b/src/reader/wgsl/parser_impl_break_stmt_test.cc
@@ -14,8 +14,6 @@
 
 #include "gtest/gtest.h"
 #include "src/ast/break_statement.h"
-#include "src/ast/return_statement.h"
-#include "src/ast/statement.h"
 #include "src/reader/wgsl/parser_impl.h"
 #include "src/reader/wgsl/parser_impl_test_helper.h"
 
@@ -30,46 +28,6 @@
   ASSERT_FALSE(p->has_error()) << p->error();
   ASSERT_NE(e, nullptr);
   ASSERT_TRUE(e->IsBreak());
-  EXPECT_EQ(e->condition(), ast::StatementCondition::kNone);
-  EXPECT_EQ(e->conditional(), nullptr);
-}
-
-TEST_F(ParserImplTest, BreakStmt_WithIf) {
-  auto* p = parser("break if (a == b)");
-  auto e = p->break_stmt();
-  ASSERT_FALSE(p->has_error()) << p->error();
-  ASSERT_NE(e, nullptr);
-  ASSERT_TRUE(e->IsBreak());
-  EXPECT_EQ(e->condition(), ast::StatementCondition::kIf);
-  ASSERT_NE(e->conditional(), nullptr);
-  EXPECT_TRUE(e->conditional()->IsBinary());
-}
-
-TEST_F(ParserImplTest, BreakStmt_WithUnless) {
-  auto* p = parser("break unless (a == b)");
-  auto e = p->break_stmt();
-  ASSERT_FALSE(p->has_error()) << p->error();
-  ASSERT_NE(e, nullptr);
-  ASSERT_TRUE(e->IsBreak());
-  EXPECT_EQ(e->condition(), ast::StatementCondition::kUnless);
-  ASSERT_NE(e->conditional(), nullptr);
-  EXPECT_TRUE(e->conditional()->IsBinary());
-}
-
-TEST_F(ParserImplTest, BreakStmt_InvalidRHS) {
-  auto* p = parser("break if (a = b)");
-  auto e = p->break_stmt();
-  ASSERT_TRUE(p->has_error());
-  ASSERT_EQ(e, nullptr);
-  EXPECT_EQ(p->error(), "1:13: expected )");
-}
-
-TEST_F(ParserImplTest, BreakStmt_MissingRHS) {
-  auto* p = parser("break if");
-  auto e = p->break_stmt();
-  ASSERT_TRUE(p->has_error());
-  ASSERT_EQ(e, nullptr);
-  EXPECT_EQ(p->error(), "1:9: expected (");
 }
 
 }  // namespace
diff --git a/src/reader/wgsl/parser_impl_continue_stmt_test.cc b/src/reader/wgsl/parser_impl_continue_stmt_test.cc
index 9a7b6fa..8207e57 100644
--- a/src/reader/wgsl/parser_impl_continue_stmt_test.cc
+++ b/src/reader/wgsl/parser_impl_continue_stmt_test.cc
@@ -14,8 +14,6 @@
 
 #include "gtest/gtest.h"
 #include "src/ast/continue_statement.h"
-#include "src/ast/return_statement.h"
-#include "src/ast/statement.h"
 #include "src/reader/wgsl/parser_impl.h"
 #include "src/reader/wgsl/parser_impl_test_helper.h"
 
@@ -30,46 +28,6 @@
   ASSERT_FALSE(p->has_error()) << p->error();
   ASSERT_NE(e, nullptr);
   ASSERT_TRUE(e->IsContinue());
-  EXPECT_EQ(e->condition(), ast::StatementCondition::kNone);
-  EXPECT_EQ(e->conditional(), nullptr);
-}
-
-TEST_F(ParserImplTest, ContinueStmt_WithIf) {
-  auto* p = parser("continue if (a == b)");
-  auto e = p->continue_stmt();
-  ASSERT_FALSE(p->has_error()) << p->error();
-  ASSERT_NE(e, nullptr);
-  ASSERT_TRUE(e->IsContinue());
-  EXPECT_EQ(e->condition(), ast::StatementCondition::kIf);
-  ASSERT_NE(e->conditional(), nullptr);
-  EXPECT_TRUE(e->conditional()->IsBinary());
-}
-
-TEST_F(ParserImplTest, ContinueStmt_WithUnless) {
-  auto* p = parser("continue unless (a == b)");
-  auto e = p->continue_stmt();
-  ASSERT_FALSE(p->has_error()) << p->error();
-  ASSERT_NE(e, nullptr);
-  ASSERT_TRUE(e->IsContinue());
-  EXPECT_EQ(e->condition(), ast::StatementCondition::kUnless);
-  ASSERT_NE(e->conditional(), nullptr);
-  EXPECT_TRUE(e->conditional()->IsBinary());
-}
-
-TEST_F(ParserImplTest, ContinueStmt_InvalidRHS) {
-  auto* p = parser("continue if (a = b)");
-  auto e = p->continue_stmt();
-  ASSERT_TRUE(p->has_error());
-  ASSERT_EQ(e, nullptr);
-  EXPECT_EQ(p->error(), "1:16: expected )");
-}
-
-TEST_F(ParserImplTest, ContinueStmt_MissingRHS) {
-  auto* p = parser("continue if");
-  auto e = p->continue_stmt();
-  ASSERT_TRUE(p->has_error());
-  ASSERT_EQ(e, nullptr);
-  EXPECT_EQ(p->error(), "1:12: expected (");
 }
 
 }  // namespace
diff --git a/src/reader/wgsl/parser_impl_statement_test.cc b/src/reader/wgsl/parser_impl_statement_test.cc
index 1deaa12..5fc9339 100644
--- a/src/reader/wgsl/parser_impl_statement_test.cc
+++ b/src/reader/wgsl/parser_impl_statement_test.cc
@@ -197,20 +197,12 @@
   EXPECT_TRUE(e->IsBreak());
 }
 
-TEST_F(ParserImplTest, Statement_Break_Invalid) {
-  auto* p = parser("break if (a = b);");
-  auto e = p->statement();
-  ASSERT_TRUE(p->has_error());
-  ASSERT_EQ(e, nullptr);
-  EXPECT_EQ(p->error(), "1:13: expected )");
-}
-
 TEST_F(ParserImplTest, Statement_Break_MissingSemicolon) {
-  auto* p = parser("break if (a == b)");
+  auto* p = parser("break");
   auto e = p->statement();
   ASSERT_TRUE(p->has_error());
   ASSERT_EQ(e, nullptr);
-  EXPECT_EQ(p->error(), "1:18: missing ;");
+  EXPECT_EQ(p->error(), "1:6: missing ;");
 }
 
 TEST_F(ParserImplTest, Statement_Continue) {
@@ -221,20 +213,12 @@
   EXPECT_TRUE(e->IsContinue());
 }
 
-TEST_F(ParserImplTest, Statement_Continue_Invalid) {
-  auto* p = parser("continue if (a = b);");
-  auto e = p->statement();
-  ASSERT_TRUE(p->has_error());
-  ASSERT_EQ(e, nullptr);
-  EXPECT_EQ(p->error(), "1:16: expected )");
-}
-
 TEST_F(ParserImplTest, Statement_Continue_MissingSemicolon) {
-  auto* p = parser("continue if (a == b)");
+  auto* p = parser("continue");
   auto e = p->statement();
   ASSERT_TRUE(p->has_error());
   ASSERT_EQ(e, nullptr);
-  EXPECT_EQ(p->error(), "1:21: missing ;");
+  EXPECT_EQ(p->error(), "1:9: missing ;");
 }
 
 TEST_F(ParserImplTest, Statement_Kill) {
diff --git a/src/type_determiner.cc b/src/type_determiner.cc
index beddba4..8604d7b 100644
--- a/src/type_determiner.cc
+++ b/src/type_determiner.cc
@@ -159,16 +159,14 @@
     return DetermineResultType(a->lhs()) && DetermineResultType(a->rhs());
   }
   if (stmt->IsBreak()) {
-    auto* b = stmt->AsBreak();
-    return DetermineResultType(b->conditional());
+    return true;
   }
   if (stmt->IsCase()) {
     auto* c = stmt->AsCase();
     return DetermineStatements(c->body());
   }
   if (stmt->IsContinue()) {
-    auto* c = stmt->AsContinue();
-    return DetermineResultType(c->conditional());
+    return true;
   }
   if (stmt->IsElse()) {
     auto* e = stmt->AsElse();
diff --git a/src/type_determiner_test.cc b/src/type_determiner_test.cc
index 0b746a9..40090f5 100644
--- a/src/type_determiner_test.cc
+++ b/src/type_determiner_test.cc
@@ -129,26 +129,6 @@
   EXPECT_TRUE(rhs_ptr->result_type()->IsF32());
 }
 
-TEST_F(TypeDeterminerTest, Stmt_Break) {
-  ast::type::I32Type i32;
-
-  auto cond = std::make_unique<ast::ScalarConstructorExpression>(
-      std::make_unique<ast::SintLiteral>(&i32, 2));
-  auto* cond_ptr = cond.get();
-
-  ast::BreakStatement brk(ast::StatementCondition::kIf, std::move(cond));
-
-  EXPECT_TRUE(td()->DetermineResultType(&brk));
-  ASSERT_NE(cond_ptr->result_type(), nullptr);
-  EXPECT_TRUE(cond_ptr->result_type()->IsI32());
-}
-
-TEST_F(TypeDeterminerTest, Stmt_Break_WithoutCondition) {
-  ast::type::I32Type i32;
-  ast::BreakStatement brk;
-  EXPECT_TRUE(td()->DetermineResultType(&brk));
-}
-
 TEST_F(TypeDeterminerTest, Stmt_Case) {
   ast::type::I32Type i32;
   ast::type::F32Type f32;
@@ -176,26 +156,6 @@
   EXPECT_TRUE(rhs_ptr->result_type()->IsF32());
 }
 
-TEST_F(TypeDeterminerTest, Stmt_Continue) {
-  ast::type::I32Type i32;
-
-  auto cond = std::make_unique<ast::ScalarConstructorExpression>(
-      std::make_unique<ast::SintLiteral>(&i32, 2));
-  auto* cond_ptr = cond.get();
-
-  ast::ContinueStatement stmt(ast::StatementCondition::kIf, std::move(cond));
-
-  EXPECT_TRUE(td()->DetermineResultType(&stmt));
-  ASSERT_NE(cond_ptr->result_type(), nullptr);
-  EXPECT_TRUE(cond_ptr->result_type()->IsI32());
-}
-
-TEST_F(TypeDeterminerTest, Stmt_Continue_WithoutStatement) {
-  ast::type::I32Type i32;
-  ast::ContinueStatement stmt;
-  EXPECT_TRUE(td()->DetermineResultType(&stmt));
-}
-
 TEST_F(TypeDeterminerTest, Stmt_Else) {
   ast::type::I32Type i32;
   ast::type::F32Type f32;
diff --git a/src/writer/spirv/builder_if_test.cc b/src/writer/spirv/builder_if_test.cc
index 7818e5d..ceaff32 100644
--- a/src/writer/spirv/builder_if_test.cc
+++ b/src/writer/spirv/builder_if_test.cc
@@ -26,7 +26,6 @@
 #include "src/ast/return_statement.h"
 #include "src/ast/scalar_constructor_expression.h"
 #include "src/ast/sint_literal.h"
-#include "src/ast/statement_condition.h"
 #include "src/ast/type/bool_type.h"
 #include "src/ast/type/i32_type.h"
 #include "src/context.h"
@@ -488,67 +487,6 @@
 )");
 }
 
-// This is blocked on implementing conditional break
-TEST_F(BuilderTest, DISABLED_If_WithConditionalBreak) {
-  ast::type::BoolType bool_type;
-  // loop {
-  //   if (true) {
-  //     break if (false);
-  //   }
-  // }
-  auto cond_true = std::make_unique<ast::ScalarConstructorExpression>(
-      std::make_unique<ast::BoolLiteral>(&bool_type, true));
-  auto cond_false = std::make_unique<ast::ScalarConstructorExpression>(
-      std::make_unique<ast::BoolLiteral>(&bool_type, false));
-
-  ast::StatementList if_body;
-  if_body.push_back(std::make_unique<ast::BreakStatement>(
-      ast::StatementCondition::kIf, std::move(cond_false)));
-
-  auto if_stmt = std::make_unique<ast::IfStatement>(std::move(cond_true),
-                                                    std::move(if_body));
-
-  ast::StatementList loop_body;
-  loop_body.push_back(std::move(if_stmt));
-
-  ast::LoopStatement expr(std::move(loop_body), {});
-
-  Context ctx;
-  ast::Module mod;
-  TypeDeterminer td(&ctx, &mod);
-
-  ASSERT_TRUE(td.DetermineResultType(&expr)) << td.error();
-
-  Builder b(&mod);
-  b.push_function(Function{});
-
-  EXPECT_TRUE(b.GenerateLoopStatement(&expr)) << b.error();
-  EXPECT_EQ(DumpInstructions(b.types()), R"(%5 = OpTypeBool
-%6 = OpConstantTrue %5
-%7 = OpConstantFalse %5
-)");
-  EXPECT_EQ(DumpInstructions(b.functions()[0].instructions()),
-            R"(OpBranch %1
-%1 = OpLabel
-OpLoopMerge %2 %3 None
-OpBranch %4
-%4 = OpLabel
-OpSelectionMerge %8 None
-OpBranchConditional %6 %9 %8
-%9 = OpLabel
-OpBranchConditional %7 %2 %8
-%8 = OpLabel
-OpBranch %3
-%3 = OpLabel
-OpBranch %1
-%2 = OpLabel
-)");
-}
-
-TEST_F(BuilderTest, DISABLED_If_WithElseConditionalBreak) {
-  FAIL();
-}
-
 TEST_F(BuilderTest, If_WithContinue) {
   ast::type::BoolType bool_type;
   // loop {
@@ -601,10 +539,6 @@
 )");
 }
 
-TEST_F(BuilderTest, DISABLED_If_WithConditionalContinue) {
-  FAIL();
-}
-
 TEST_F(BuilderTest, If_WithElseContinue) {
   ast::type::BoolType bool_type;
   // loop {
@@ -666,10 +600,6 @@
 )");
 }
 
-TEST_F(BuilderTest, DISABLED_If_WithElseConditionalContinue) {
-  FAIL();
-}
-
 TEST_F(BuilderTest, If_WithReturn) {
   ast::type::BoolType bool_type;
   // if (true) {
diff --git a/src/writer/spirv/builder_loop_test.cc b/src/writer/spirv/builder_loop_test.cc
index d5bfe5b..1071470 100644
--- a/src/writer/spirv/builder_loop_test.cc
+++ b/src/writer/spirv/builder_loop_test.cc
@@ -202,8 +202,6 @@
 )");
 }
 
-TEST_F(BuilderTest, DISABLED_Loop_WithConditionalContinue) {}
-
 TEST_F(BuilderTest, Loop_WithBreak) {
   // loop {
   //   break;
@@ -236,8 +234,6 @@
 )");
 }
 
-TEST_F(BuilderTest, DISABLED_Loop_WithConditionalBreak) {}
-
 }  // namespace
 }  // namespace spirv
 }  // namespace writer
diff --git a/src/writer/spirv/builder_switch_test.cc b/src/writer/spirv/builder_switch_test.cc
index 3637a92..d320235 100644
--- a/src/writer/spirv/builder_switch_test.cc
+++ b/src/writer/spirv/builder_switch_test.cc
@@ -472,16 +472,6 @@
   EXPECT_EQ(b.error(), "fallthrough of last case statement is disallowed");
 }
 
-// TODO(dsinclair): Implement when parsing is handled for multi-value
-// case labels.
-TEST_F(BuilderTest, DISABLED_Switch_CaseWithMulitpleLabels) {
-  // switch (a) {
-  //   case 1, 2, 3:
-  //     v = 1;
-  // }
-  FAIL();
-}
-
 TEST_F(BuilderTest, Switch_WithNestedBreak) {
   ast::type::I32Type i32;
   ast::type::BoolType bool_type;
diff --git a/src/writer/wgsl/generator_impl.cc b/src/writer/wgsl/generator_impl.cc
index f27f518..2316d17 100644
--- a/src/writer/wgsl/generator_impl.cc
+++ b/src/writer/wgsl/generator_impl.cc
@@ -691,28 +691,9 @@
   return true;
 }
 
-bool GeneratorImpl::EmitBreak(ast::BreakStatement* stmt) {
+bool GeneratorImpl::EmitBreak(ast::BreakStatement*) {
   make_indent();
-
-  out_ << "break";
-
-  if (stmt->condition() != ast::StatementCondition::kNone) {
-    out_ << " ";
-    if (stmt->condition() == ast::StatementCondition::kIf) {
-      out_ << "if";
-    } else {
-      out_ << "unless";
-    }
-
-    out_ << " (";
-    if (!EmitExpression(stmt->conditional())) {
-      return false;
-    }
-    out_ << ")";
-  }
-
-  out_ << ";" << std::endl;
-
+  out_ << "break;" << std::endl;
   return true;
 }
 
@@ -742,28 +723,9 @@
   return EmitStatementBlockAndNewline(stmt->body());
 }
 
-bool GeneratorImpl::EmitContinue(ast::ContinueStatement* stmt) {
+bool GeneratorImpl::EmitContinue(ast::ContinueStatement*) {
   make_indent();
-
-  out_ << "continue";
-
-  if (stmt->condition() != ast::StatementCondition::kNone) {
-    out_ << " ";
-    if (stmt->condition() == ast::StatementCondition::kIf) {
-      out_ << "if";
-    } else {
-      out_ << "unless";
-    }
-
-    out_ << " (";
-    if (!EmitExpression(stmt->conditional())) {
-      return false;
-    }
-    out_ << ")";
-  }
-
-  out_ << ";" << std::endl;
-
+  out_ << "continue;" << std::endl;
   return true;
 }
 
diff --git a/src/writer/wgsl/generator_impl_break_test.cc b/src/writer/wgsl/generator_impl_break_test.cc
index 556dcfe..7bcc8e8 100644
--- a/src/writer/wgsl/generator_impl_break_test.cc
+++ b/src/writer/wgsl/generator_impl_break_test.cc
@@ -17,7 +17,6 @@
 
 #include "gtest/gtest.h"
 #include "src/ast/break_statement.h"
-#include "src/ast/identifier_expression.h"
 #include "src/writer/wgsl/generator_impl.h"
 
 namespace tint {
@@ -37,28 +36,6 @@
   EXPECT_EQ(g.result(), "  break;\n");
 }
 
-TEST_F(GeneratorImplTest, Emit_BreakWithIf) {
-  auto expr = std::make_unique<ast::IdentifierExpression>("expr");
-  ast::BreakStatement b(ast::StatementCondition::kIf, std::move(expr));
-
-  GeneratorImpl g;
-  g.increment_indent();
-
-  ASSERT_TRUE(g.EmitStatement(&b)) << g.error();
-  EXPECT_EQ(g.result(), "  break if (expr);\n");
-}
-
-TEST_F(GeneratorImplTest, Emit_BreakWithUnless) {
-  auto expr = std::make_unique<ast::IdentifierExpression>("expr");
-  ast::BreakStatement b(ast::StatementCondition::kUnless, std::move(expr));
-
-  GeneratorImpl g;
-  g.increment_indent();
-
-  ASSERT_TRUE(g.EmitStatement(&b)) << g.error();
-  EXPECT_EQ(g.result(), "  break unless (expr);\n");
-}
-
 }  // namespace
 }  // namespace wgsl
 }  // namespace writer
diff --git a/src/writer/wgsl/generator_impl_continue_test.cc b/src/writer/wgsl/generator_impl_continue_test.cc
index cb5b81b..ffd5b93 100644
--- a/src/writer/wgsl/generator_impl_continue_test.cc
+++ b/src/writer/wgsl/generator_impl_continue_test.cc
@@ -17,7 +17,6 @@
 
 #include "gtest/gtest.h"
 #include "src/ast/continue_statement.h"
-#include "src/ast/identifier_expression.h"
 #include "src/writer/wgsl/generator_impl.h"
 
 namespace tint {
@@ -37,28 +36,6 @@
   EXPECT_EQ(g.result(), "  continue;\n");
 }
 
-TEST_F(GeneratorImplTest, Emit_ContinueWithIf) {
-  auto expr = std::make_unique<ast::IdentifierExpression>("expr");
-  ast::ContinueStatement c(ast::StatementCondition::kIf, std::move(expr));
-
-  GeneratorImpl g;
-  g.increment_indent();
-
-  ASSERT_TRUE(g.EmitStatement(&c)) << g.error();
-  EXPECT_EQ(g.result(), "  continue if (expr);\n");
-}
-
-TEST_F(GeneratorImplTest, Emit_ContinueWithUnless) {
-  auto expr = std::make_unique<ast::IdentifierExpression>("expr");
-  ast::ContinueStatement c(ast::StatementCondition::kUnless, std::move(expr));
-
-  GeneratorImpl g;
-  g.increment_indent();
-
-  ASSERT_TRUE(g.EmitStatement(&c)) << g.error();
-  EXPECT_EQ(g.result(), "  continue unless (expr);\n");
-}
-
 }  // namespace
 }  // namespace wgsl
 }  // namespace writer
