Extend array accessor validity checks

This Cl extends the array accessor to verify the sub expressions are
also valid.

Bug: tint:11
Change-Id: Ieaa9643e07deaa8c406743c3bbb6fbe3ca9cb1ef
Reviewed-on: https://dawn-review.googlesource.com/c/tint/+/16467
Commit-Queue: Sarah Mashayekhi <sarahmashay@google.com>
Reviewed-by: Sarah Mashayekhi <sarahmashay@google.com>
diff --git a/src/ast/array_accessor_expression.cc b/src/ast/array_accessor_expression.cc
index 2397484..87e0ea2 100644
--- a/src/ast/array_accessor_expression.cc
+++ b/src/ast/array_accessor_expression.cc
@@ -35,7 +35,12 @@
 ArrayAccessorExpression::~ArrayAccessorExpression() = default;
 
 bool ArrayAccessorExpression::IsValid() const {
-  return array_ != nullptr && idx_expr_ != nullptr;
+  if (array_ == nullptr || !array_->IsValid())
+    return false;
+  if (idx_expr_ == nullptr || !idx_expr_->IsValid())
+    return false;
+
+  return true;
 }
 
 void ArrayAccessorExpression::to_str(std::ostream& out, size_t indent) const {
diff --git a/src/ast/array_accessor_expression_test.cc b/src/ast/array_accessor_expression_test.cc
index c3c643b..51b41e3 100644
--- a/src/ast/array_accessor_expression_test.cc
+++ b/src/ast/array_accessor_expression_test.cc
@@ -72,6 +72,20 @@
   EXPECT_FALSE(exp.IsValid());
 }
 
+TEST_F(ArrayAccessorExpressionTest, IsValid_InvalidArray) {
+  auto ary = std::make_unique<IdentifierExpression>("");
+  auto idx = std::make_unique<IdentifierExpression>("idx");
+  ArrayAccessorExpression exp(std::move(ary), std::move(idx));
+  EXPECT_FALSE(exp.IsValid());
+}
+
+TEST_F(ArrayAccessorExpressionTest, IsValid_InvalidIndex) {
+  auto ary = std::make_unique<IdentifierExpression>("ary");
+  auto idx = std::make_unique<IdentifierExpression>("");
+  ArrayAccessorExpression exp(std::move(ary), std::move(idx));
+  EXPECT_FALSE(exp.IsValid());
+}
+
 TEST_F(ArrayAccessorExpressionTest, ToStr) {
   auto ary = std::make_unique<IdentifierExpression>("ary");
   auto idx = std::make_unique<IdentifierExpression>("idx");
diff --git a/src/ast/else_statement.cc b/src/ast/else_statement.cc
index 09f39e2..1ad7a02 100644
--- a/src/ast/else_statement.cc
+++ b/src/ast/else_statement.cc
@@ -41,9 +41,7 @@
 
 bool ElseStatement::IsValid() const {
   for (const auto& stmt : body_) {
-    if (stmt == nullptr)
-      return false;
-    if (!stmt->IsValid())
+    if (stmt == nullptr || !stmt->IsValid())
       return false;
   }
   if (condition_)