Resolver: Fix UB with nullptr method calls
Change-Id: Iaa098d7851ffaf01aac384fe623c94809948fe2e
Reviewed-on: https://dawn-review.googlesource.com/c/tint/+/51182
Commit-Queue: Ben Clayton <bclayton@google.com>
Commit-Queue: Antonio Maiorano <amaiorano@google.com>
Auto-Submit: Ben Clayton <bclayton@google.com>
Reviewed-by: Antonio Maiorano <amaiorano@google.com>
diff --git a/src/resolver/resolver.cc b/src/resolver/resolver.cc
index e21e22f..d5166d9 100644
--- a/src/resolver/resolver.cc
+++ b/src/resolver/resolver.cc
@@ -501,14 +501,19 @@
// TODO(crbug.com/tint/802): Temporary while ast::AccessControl exits.
auto find_first_access_control =
[this](ast::Type* ty) -> ast::AccessControl* {
- ast::AccessControl* ac = ty->As<ast::AccessControl>();
- if (ac) {
+ if (ty == nullptr) {
+ return nullptr;
+ }
+ if (ast::AccessControl* ac = ty->As<ast::AccessControl>()) {
return ac;
}
while (auto* tn = ty->As<ast::TypeName>()) {
- ty = name_to_ast_type_[tn->name()];
- ac = ty->As<ast::AccessControl>();
- if (ac) {
+ auto it = name_to_ast_type_.find(tn->name());
+ if (it == name_to_ast_type_.end()) {
+ break;
+ }
+ ty = it->second;
+ if (auto* ac = ty->As<ast::AccessControl>()) {
return ac;
}
}