Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
6 changes: 3 additions & 3 deletions lib/Sema/TypeCheckDeclOverride.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -1774,9 +1774,9 @@ static bool isAvailabilitySafeForOverride(ValueDecl *override,

// Allow overrides that are not as available as the base decl as long as the
// override is as available as its context.
auto overrideTypeAvailability = AvailabilityInference::inferForType(
override->getDeclContext()->getSelfTypeInContext());
auto overrideTypeAvailability = AvailabilityInference::availableRange(
override->getDeclContext()->getSelfNominalTypeDecl(), ctx);

return overrideTypeAvailability.isContainedIn(overrideInfo);
}

Expand Down
38 changes: 38 additions & 0 deletions test/Sema/availability_versions.swift
Original file line number Diff line number Diff line change
Expand Up @@ -218,6 +218,44 @@ class SubClassOverridingPotentiallyUnavailableMethod : ClassWithPotentiallyUnava
}
}

protocol BaseProto {
associatedtype A

var property: A { get set } // expected-note {{overridden declaration is here}}

@available(OSX 10.51, *)
var newProperty: A { get set } // expected-note {{overridden declaration is here}}

func method() // expected-note {{overridden declaration is here}}
}

protocol RefinesBaseProto_AsAvailableOverrides: BaseProto {
var property: A { get set }

@available(OSX 10.51, *)
var newProperty: A { get set }

func method()
}

protocol RefinesBaseProto_LessAvailableOverrides: BaseProto {
@available(OSX 10.52, *)
var property: A { get set } // expected-error {{overriding 'property' must be as available as declaration it overrides}}

@available(OSX 10.52, *)
var newProperty: A { get set } // expected-error {{overriding 'newProperty' must be as available as declaration it overrides}}

@available(OSX 10.52, *)
func method() // expected-error {{overriding 'method' must be as available as declaration it overrides}}
}

@available(OSX 10.52, *)
protocol RefinesBaseProto_LessAvailable: BaseProto {
var property: A { get set }
var newProperty: A { get set }
func method()
}

class ClassWithPotentiallyUnavailableOverloadedMethod {
@available(OSX, introduced: 10.9)
func overloadedMethod() {}
Expand Down