Skip to content

Commit ead0948

Browse files
committed
Sema: Bail out early when computing overrides of didSet, willSet, unsafeAddress and unsafeMutableAddress
1 parent 05b8720 commit ead0948

File tree

1 file changed

+18
-1
lines changed

1 file changed

+18
-1
lines changed

lib/Sema/TypeCheckDeclOverride.cpp

Lines changed: 18 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2031,13 +2031,30 @@ OverriddenDeclsRequest::evaluate(Evaluator &evaluator, ValueDecl *decl) const {
20312031
// Accessors determine their overrides based on their abstract storage
20322032
// declarations.
20332033
if (auto accessor = dyn_cast<AccessorDecl>(decl)) {
2034+
auto kind = accessor->getAccessorKind();
2035+
2036+
switch (kind) {
2037+
case AccessorKind::Get:
2038+
case AccessorKind::Set:
2039+
case AccessorKind::Read:
2040+
case AccessorKind::Modify:
2041+
break;
2042+
2043+
case AccessorKind::WillSet:
2044+
case AccessorKind::DidSet:
2045+
case AccessorKind::Address:
2046+
case AccessorKind::MutableAddress:
2047+
// These accessors are never part of the opaque set. Bail out early
2048+
// to avoid computing the overridden declarations of the storage.
2049+
return noResults;
2050+
}
2051+
20342052
auto overridingASD = accessor->getStorage();
20352053

20362054
// Check the various overridden storage declarations.
20372055
SmallVector<OverrideMatch, 2> matches;
20382056
for (auto overridden : overridingASD->getOverriddenDecls()) {
20392057
auto baseASD = cast<AbstractStorageDecl>(overridden);
2040-
auto kind = accessor->getAccessorKind();
20412058

20422059
// If the base doesn't consider this an opaque accessor,
20432060
// this isn't really an override.

0 commit comments

Comments
 (0)