Skip to content

Commit de4c319

Browse files
committed
Sema: Kill some duplication in @Frozen checking
1 parent 039acb6 commit de4c319

File tree

1 file changed

+8
-6
lines changed

1 file changed

+8
-6
lines changed

lib/Sema/TypeCheckAttr.cpp

Lines changed: 8 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -2085,19 +2085,21 @@ void AttributeChecker::visitImplementsAttr(ImplementsAttr *attr) {
20852085
}
20862086

20872087
void AttributeChecker::visitFrozenAttr(FrozenAttr *attr) {
2088-
switch (D->getModuleContext()->getResilienceStrategy()) {
2088+
auto *ED = cast<EnumDecl>(D);
2089+
2090+
switch (ED->getModuleContext()->getResilienceStrategy()) {
20892091
case ResilienceStrategy::Default:
20902092
diagnoseAndRemoveAttr(attr, diag::enum_frozen_nonresilient, attr);
20912093
return;
20922094
case ResilienceStrategy::Resilient:
20932095
break;
20942096
}
20952097

2096-
if (cast<EnumDecl>(D)->getFormalAccess() >= AccessLevel::Public)
2097-
return;
2098-
if (D->getAttrs().hasAttribute<UsableFromInlineAttr>())
2099-
return;
2100-
diagnoseAndRemoveAttr(attr, diag::enum_frozen_nonpublic, attr);
2098+
auto access = ED->getFormalAccess(/*useDC=*/nullptr,
2099+
/*isUsageFromInline=*/true);
2100+
if (access < AccessLevel::Public) {
2101+
diagnoseAndRemoveAttr(attr, diag::enum_frozen_nonpublic, attr);
2102+
}
21012103
}
21022104

21032105
void TypeChecker::checkDeclAttributes(Decl *D) {

0 commit comments

Comments
 (0)