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_)