Derive all ast::Node from Castable

The hand-rolled `AsBlah()`, `IsBlah()` methods will be migrated in future changes.

Change-Id: I078c100b561b50018771cc38c1cac4379c393424
Reviewed-on: https://dawn-review.googlesource.com/c/tint/+/34301
Reviewed-by: dan sinclair <dsinclair@chromium.org>
diff --git a/src/ast/discard_statement.cc b/src/ast/discard_statement.cc
index 6864aa0..e2c17fa 100644
--- a/src/ast/discard_statement.cc
+++ b/src/ast/discard_statement.cc
@@ -17,9 +17,11 @@
 namespace tint {
 namespace ast {
 
-DiscardStatement::DiscardStatement() : Statement() {}
+DiscardStatement::DiscardStatement() : Base() {}
 
-DiscardStatement::DiscardStatement(const Source& source) : Statement(source) {}
+DiscardStatement::DiscardStatement(const Source& source) : Base(source) {}
+
+DiscardStatement::DiscardStatement(DiscardStatement&&) = default;
 
 DiscardStatement::~DiscardStatement() = default;