Skip to content

Commit 78c71c9

Browse files
committed
Sema: Change checkOverrideAccessControl() to not need a synthesized setter
We can compute the setter's AccessScope directly, without creating it first.
1 parent c68cf85 commit 78c71c9

File tree

3 files changed

+13
-6
lines changed

3 files changed

+13
-6
lines changed

include/swift/AST/Decl.h

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -4647,6 +4647,10 @@ class AbstractStorageDecl : public ValueDecl {
46474647

46484648
AccessLevel getSetterFormalAccess() const;
46494649

4650+
AccessScope
4651+
getSetterFormalAccessScope(const DeclContext *useDC = nullptr,
4652+
bool treatUsableFromInlineAsPublic = false) const;
4653+
46504654
void setSetterAccess(AccessLevel accessLevel) {
46514655
assert(!Accessors.getInt().hasValue());
46524656
overwriteSetterAccess(accessLevel);

lib/AST/Decl.cpp

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -4799,6 +4799,13 @@ AbstractStorageDecl::getSetterFormalAccess() const {
47994799
AccessLevel::Private);
48004800
}
48014801

4802+
AccessScope
4803+
AbstractStorageDecl::getSetterFormalAccessScope(const DeclContext *useDC,
4804+
bool treatUsableFromInlineAsPublic) const {
4805+
return getAccessScopeForFormalAccess(this, getSetterFormalAccess(), useDC,
4806+
treatUsableFromInlineAsPublic);
4807+
}
4808+
48024809
void AbstractStorageDecl::setComputedSetter(AccessorDecl *setter) {
48034810
assert(getImplInfo().getReadImpl() == ReadImplKind::Get);
48044811
assert(!getImplInfo().supportsMutation());

lib/Sema/TypeCheckDeclOverride.cpp

Lines changed: 2 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -896,12 +896,8 @@ static void checkOverrideAccessControl(ValueDecl *baseDecl, ValueDecl *decl,
896896
if (!shouldDiagnose && baseDecl->isSettable(dc)){
897897
auto matchASD = cast<AbstractStorageDecl>(baseDecl);
898898
if (matchASD->isSetterAccessibleFrom(dc)) {
899-
// Match sure we've created the setter.
900-
if (!matchASD->getSetter())
901-
addExpectedOpaqueAccessorsToStorage(matchASD);
902-
903-
auto matchSetterAccessScope = matchASD->getSetter()
904-
->getFormalAccessScope(dc);
899+
auto matchSetterAccessScope =
900+
matchASD->getSetterFormalAccessScope(dc);
905901
auto requiredSetterAccessScope =
906902
matchSetterAccessScope.intersectWith(classAccessScope);
907903
auto setterScopeDC = requiredSetterAccessScope->getDeclContext();

0 commit comments

Comments
 (0)