Skip to content

Commit abce071

Browse files
authored
Merge pull request #76000 from tshortli/no-app-extensions-in-if-available-fix-its
Sema: Avoid application extension platforms in `if #available` fix-its
2 parents 74d7a15 + 6d1a6c5 commit abce071

File tree

2 files changed

+14
-0
lines changed

2 files changed

+14
-0
lines changed

lib/Sema/TypeCheckAvailability.cpp

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1979,6 +1979,12 @@ static void fixAvailabilityByAddingVersionCheck(
19791979

19801980
PlatformKind Target = targetPlatform(Context.LangOpts);
19811981

1982+
// Runtime availability checks that specify app extension platforms don't
1983+
// work, so only suggest checks against the base platform.
1984+
if (auto TargetRemovingAppExtension =
1985+
basePlatformForExtensionPlatform(Target))
1986+
Target = *TargetRemovingAppExtension;
1987+
19821988
Out << "if #available(" << platformString(Target)
19831989
<< " " << RequiredRange.getLowerEndpoint().getAsString()
19841990
<< ", *) {\n";

test/attr/attr_availability_transitive_osx_appext.swift

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -69,3 +69,11 @@ extension NotOnOSXApplicationExtension {
6969
osx_extension() // OK
7070
}
7171
}
72+
73+
@available(OSXApplicationExtension, introduced: 12)
74+
func osx_introduced_in_macOS_extesnions_12() {}
75+
76+
func call_osx_introduced_in_macOS_extesnions_12() { // expected-note {{add @available attribute to enclosing global function}} {{1-1=@available(macOSApplicationExtension 12, *)\n}}
77+
osx_introduced_in_macOS_extesnions_12() // expected-error {{'osx_introduced_in_macOS_extesnions_12()' is only available in application extensions for macOS 12 or newer}}
78+
// expected-note@-1 {{add 'if #available' version check}} {{3-42=if #available(macOS 12, *) {\n osx_introduced_in_macOS_extesnions_12()\n \} else {\n // Fallback on earlier versions\n \}}}
79+
}

0 commit comments

Comments
 (0)