Add alias name to name resolution after processing the target to avoid self-referencing name crash (#1295)

Fixes #1294
This commit is contained in:
pk19604014
2022-06-02 12:47:41 -07:00
committed by GitHub
parent e206c3123f
commit ccc6498993
4 changed files with 59 additions and 13 deletions
+5 -3
View File
@@ -66,7 +66,8 @@ static auto AddExposedNames(const Declaration& declaration,
}
case DeclarationKind::AliasDeclaration: {
auto& alias = cast<AliasDeclaration>(declaration);
CARBON_RETURN_IF_ERROR(enclosing_scope.Add(alias.name(), &alias));
CARBON_RETURN_IF_ERROR(
enclosing_scope.Add(alias.name(), &alias, /*usable=*/false));
break;
}
}
@@ -458,8 +459,9 @@ static auto ResolveNames(Declaration& declaration, StaticScope& enclosing_scope)
}
case DeclarationKind::AliasDeclaration: {
CARBON_RETURN_IF_ERROR(ResolveNames(
cast<AliasDeclaration>(declaration).target(), enclosing_scope));
auto& alias = cast<AliasDeclaration>(declaration);
CARBON_RETURN_IF_ERROR(ResolveNames(alias.target(), enclosing_scope));
enclosing_scope.MarkUsable(alias.name());
break;
}
}