ast: Remove no-arg constructor for ast::CastStatement

In a near-future change, AST nodes, such as ast::BlockStatement will no longer
be std::unique_ptrs, and will have to be constructed and owned by an external
class. This means AST nodes can no longer allocate default child nodes.

Bug: tint:322
Change-Id: I2a571d0a4727d6dc3d6c38e8b6602e131292f49c
Reviewed-on: https://dawn-review.googlesource.com/c/tint/+/32676
Reviewed-by: dan sinclair <dsinclair@chromium.org>
Commit-Queue: dan sinclair <dsinclair@chromium.org>
diff --git a/src/ast/case_statement.cc b/src/ast/case_statement.cc
index ab4cb35..3b137aa 100644
--- a/src/ast/case_statement.cc
+++ b/src/ast/case_statement.cc
@@ -17,9 +17,6 @@
 namespace tint {
 namespace ast {
 
-CaseStatement::CaseStatement()
-    : Statement(), body_(std::make_unique<BlockStatement>()) {}
-
 CaseStatement::CaseStatement(std::unique_ptr<BlockStatement> body)
     : Statement(), body_(std::move(body)) {}
 
diff --git a/src/ast/case_statement.h b/src/ast/case_statement.h
index 0b3cf7a..b15c93b 100644
--- a/src/ast/case_statement.h
+++ b/src/ast/case_statement.h
@@ -34,8 +34,6 @@
 class CaseStatement : public Statement {
  public:
   /// Constructor
-  CaseStatement();
-  /// Constructor
   /// Creates a default case statement
   /// @param body the case body
   explicit CaseStatement(std::unique_ptr<BlockStatement> body);
diff --git a/src/ast/case_statement_test.cc b/src/ast/case_statement_test.cc
index 1d61291..0a67de3 100644
--- a/src/ast/case_statement_test.cc
+++ b/src/ast/case_statement_test.cc
@@ -85,7 +85,7 @@
   auto body = create<BlockStatement>();
   body->append(create<DiscardStatement>());
 
-  CaseStatement c;
+  CaseStatement c(create<ast::BlockStatement>());
   c.set_body(std::move(body));
   EXPECT_TRUE(c.IsDefault());
 }
@@ -95,18 +95,18 @@
   CaseSelectorList b;
   b.push_back(create<SintLiteral>(&i32, 2));
 
-  CaseStatement c;
+  CaseStatement c(create<ast::BlockStatement>());
   c.set_selectors(std::move(b));
   EXPECT_FALSE(c.IsDefault());
 }
 
 TEST_F(CaseStatementTest, IsCase) {
-  CaseStatement c;
+  CaseStatement c(create<ast::BlockStatement>());
   EXPECT_TRUE(c.IsCase());
 }
 
 TEST_F(CaseStatementTest, IsValid) {
-  CaseStatement c;
+  CaseStatement c(create<ast::BlockStatement>());
   EXPECT_TRUE(c.IsValid());
 }
 
diff --git a/src/reader/spirv/function.cc b/src/reader/spirv/function.cc
index c37f7ee..f2e90d0 100644
--- a/src/reader/spirv/function.cc
+++ b/src/reader/spirv/function.cc
@@ -2150,7 +2150,8 @@
   for (size_t i = last_clause_index;; --i) {
     // Create the case clause.  Temporarily put it in the wrong order
     // on the case statement list.
-    cases->emplace_back(std::make_unique<ast::CaseStatement>());
+    cases->emplace_back(std::make_unique<ast::CaseStatement>(
+        std::make_unique<ast::BlockStatement>()));
     auto* clause = cases->back().get();
 
     // Create a list of integer literals for the selector values leading to
@@ -2189,8 +2190,7 @@
       // Generate a default clause with a just fallthrough.
       auto stmts = std::make_unique<ast::BlockStatement>();
       stmts->append(std::make_unique<ast::FallthroughStatement>());
-      auto case_stmt = std::make_unique<ast::CaseStatement>();
-      case_stmt->set_body(std::move(stmts));
+      auto case_stmt = std::make_unique<ast::CaseStatement>(std::move(stmts));
       cases->emplace_back(std::move(case_stmt));
     }
 
diff --git a/src/reader/wgsl/parser_impl.cc b/src/reader/wgsl/parser_impl.cc
index e70d2a4..ac1b004 100644
--- a/src/reader/wgsl/parser_impl.cc
+++ b/src/reader/wgsl/parser_impl.cc
@@ -1653,7 +1653,8 @@
   auto source = t.source();
   next();  // Consume the peek
 
-  auto stmt = std::make_unique<ast::CaseStatement>();
+  auto stmt = std::make_unique<ast::CaseStatement>(
+      std::make_unique<ast::BlockStatement>());
   stmt->set_source(source);
   if (t.IsCase()) {
     auto selectors = expect_case_selectors();
diff --git a/src/writer/hlsl/generator_impl_case_test.cc b/src/writer/hlsl/generator_impl_case_test.cc
index 8da7d20..bffb1e5 100644
--- a/src/writer/hlsl/generator_impl_case_test.cc
+++ b/src/writer/hlsl/generator_impl_case_test.cc
@@ -106,11 +106,9 @@
 }
 
 TEST_F(HlslGeneratorImplTest_Case, Emit_Case_Default) {
-  ast::CaseStatement c;
-
   auto body = create<ast::BlockStatement>();
   body->append(create<ast::BreakStatement>());
-  c.set_body(std::move(body));
+  ast::CaseStatement c(std::move(body));
 
   gen.increment_indent();
 
diff --git a/src/writer/hlsl/generator_impl_switch_test.cc b/src/writer/hlsl/generator_impl_switch_test.cc
index 005f3d3..a80d7e9 100644
--- a/src/writer/hlsl/generator_impl_switch_test.cc
+++ b/src/writer/hlsl/generator_impl_switch_test.cc
@@ -31,10 +31,9 @@
 using HlslGeneratorImplTest_Switch = TestHelper;
 
 TEST_F(HlslGeneratorImplTest_Switch, Emit_Switch) {
-  auto def = create<ast::CaseStatement>();
   auto def_body = create<ast::BlockStatement>();
   def_body->append(create<ast::BreakStatement>());
-  def->set_body(std::move(def_body));
+  auto def = create<ast::CaseStatement>(std::move(def_body));
 
   ast::type::I32Type i32;
   ast::CaseSelectorList case_val;
diff --git a/src/writer/msl/generator_impl_case_test.cc b/src/writer/msl/generator_impl_case_test.cc
index 9902a4d..0ffaa21 100644
--- a/src/writer/msl/generator_impl_case_test.cc
+++ b/src/writer/msl/generator_impl_case_test.cc
@@ -108,11 +108,9 @@
 }
 
 TEST_F(MslGeneratorImplTest, Emit_Case_Default) {
-  ast::CaseStatement c;
-
   auto body = create<ast::BlockStatement>();
   body->append(create<ast::BreakStatement>());
-  c.set_body(std::move(body));
+  ast::CaseStatement c(std::move(body));
 
   gen.increment_indent();
 
diff --git a/src/writer/msl/generator_impl_switch_test.cc b/src/writer/msl/generator_impl_switch_test.cc
index 9b85f23..d71b534 100644
--- a/src/writer/msl/generator_impl_switch_test.cc
+++ b/src/writer/msl/generator_impl_switch_test.cc
@@ -33,10 +33,9 @@
 using MslGeneratorImplTest = TestHelper;
 
 TEST_F(MslGeneratorImplTest, Emit_Switch) {
-  auto def = create<ast::CaseStatement>();
   auto def_body = create<ast::BlockStatement>();
   def_body->append(create<ast::BreakStatement>());
-  def->set_body(std::move(def_body));
+  auto def = create<ast::CaseStatement>(std::move(def_body));
 
   ast::type::I32Type i32;
   ast::CaseSelectorList case_val;
diff --git a/src/writer/wgsl/generator_impl_case_test.cc b/src/writer/wgsl/generator_impl_case_test.cc
index 3830b51..a6705e2 100644
--- a/src/writer/wgsl/generator_impl_case_test.cc
+++ b/src/writer/wgsl/generator_impl_case_test.cc
@@ -70,11 +70,9 @@
 }
 
 TEST_F(WgslGeneratorImplTest, Emit_Case_Default) {
-  ast::CaseStatement c;
-
   auto body = create<ast::BlockStatement>();
   body->append(create<ast::BreakStatement>());
-  c.set_body(std::move(body));
+  ast::CaseStatement c(std::move(body));
 
   gen.increment_indent();
 
diff --git a/src/writer/wgsl/generator_impl_switch_test.cc b/src/writer/wgsl/generator_impl_switch_test.cc
index 491e2f0..2319a87 100644
--- a/src/writer/wgsl/generator_impl_switch_test.cc
+++ b/src/writer/wgsl/generator_impl_switch_test.cc
@@ -32,10 +32,9 @@
 using WgslGeneratorImplTest = TestHelper;
 
 TEST_F(WgslGeneratorImplTest, Emit_Switch) {
-  auto def = create<ast::CaseStatement>();
   auto def_body = create<ast::BlockStatement>();
   def_body->append(create<ast::BreakStatement>());
-  def->set_body(std::move(def_body));
+  auto def = create<ast::CaseStatement>(std::move(def_body));
 
   ast::type::I32Type i32;
   ast::CaseSelectorList case_val;