Skip to content

Commit b79c33b

Browse files
committed
Parse/Sema: Consolidate diagnostics for unexpected versions.
Since resolving the domain of an `@available` attribute is done during type checking now, diagnostics about unexpected versions for a domain need to be emitted at that point instead of during parsing. It doesn't make sense to maintain the special version of this diagnostic that is emitted during parsing for the universal availability domain only.
1 parent 79c0173 commit b79c33b

File tree

4 files changed

+4
-30
lines changed

4 files changed

+4
-30
lines changed

include/swift/AST/DiagnosticsParse.def

Lines changed: 0 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1579,10 +1579,6 @@ ERROR(attr_availability_expected_equal,none,
15791579
ERROR(attr_availability_expected_version,none,
15801580
"expected version number in '%0' attribute", (StringRef))
15811581

1582-
WARNING(attr_availability_nonspecific_platform_unexpected_version,none,
1583-
"unexpected version number in '%0' attribute for non-specific platform "
1584-
"'*'", (StringRef))
1585-
15861582
WARNING(attr_availability_wildcard_ignored,none,
15871583
"* as platform name has no effect in '%0' attribute", (StringRef))
15881584

lib/Parse/ParseDecl.cpp

Lines changed: 0 additions & 20 deletions
Original file line numberDiff line numberDiff line change
@@ -546,26 +546,6 @@ ParserResult<AvailableAttr> Parser::parseExtendedAvailabilitySpecList(
546546
if (AnyArgumentInvalid)
547547
return nullptr;
548548

549-
// Warn if any version is specified with the universal domain ('*').
550-
bool SomeVersion = (!Introduced.empty() ||
551-
!Deprecated.empty() ||
552-
!Obsoleted.empty());
553-
if (Platform == "*" && SomeVersion) {
554-
auto diag = diagnose(AttrLoc,
555-
diag::attr_availability_nonspecific_platform_unexpected_version,
556-
AttrName);
557-
if (!Introduced.empty())
558-
diag.fixItRemove(SourceRange(Introduced.DelimiterLoc,
559-
Introduced.Range.End));
560-
if (!Deprecated.empty())
561-
diag.fixItRemove(SourceRange(Deprecated.DelimiterLoc,
562-
Deprecated.Range.End));
563-
if (!Obsoleted.empty())
564-
diag.fixItRemove(SourceRange(Obsoleted.DelimiterLoc,
565-
Obsoleted.Range.End));
566-
return nullptr;
567-
}
568-
569549
auto Attr = new (Context) AvailableAttr(
570550
AtLoc, SourceRange(AttrLoc, Tok.getLoc()), Platform, PlatformLoc,
571551
AttrKind, Message, Renamed, Introduced.Version, Introduced.Range,

lib/Sema/TypeCheckAttr.cpp

Lines changed: 1 addition & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -8404,9 +8404,7 @@ SemanticAvailableAttrRequest::evaluate(swift::Evaluator &evaluator,
84048404
bool hasVersionSpec =
84058405
(introducedVersion || deprecatedVersion || obsoletedVersion);
84068406

8407-
// FIXME: [availability] For the universal domain, this is currently
8408-
// diagnosed during parsing. That diagnostic should be subsumed by this one.
8409-
if (!domain->isVersioned() && hasVersionSpec && !domain->isUniversal()) {
8407+
if (!domain->isVersioned() && hasVersionSpec) {
84108408
SourceRange versionSourceRange;
84118409
if (introducedVersion)
84128410
versionSourceRange = semanticAttr.getIntroducedSourceRange();

test/Parse/diagnose_availability.swift

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -33,15 +33,15 @@ func twoShorthandsFollowedByDeprecated() {}
3333
// Missing/wrong warning message for '*' or 'swift' platform.
3434

3535
@available(*, deprecated: 4.2)
36-
// expected-warning@-1 {{unexpected version number in 'available' attribute for non-specific platform '*'}} {{25-30=}}
36+
// expected-warning@-1 {{unexpected version number in '@available' attribute for '*'}}
3737
func allPlatformsDeprecatedVersion() {}
3838

3939
@available(*, deprecated, obsoleted: 4.2)
40-
// expected-warning@-1 {{unexpected version number in 'available' attribute for non-specific platform '*'}} {{36-41=}}
40+
// expected-warning@-1 {{unexpected version number in '@available' attribute for '*'}}
4141
func allPlatformsDeprecatedAndObsoleted() {}
4242

4343
@available(*, introduced: 4.0, deprecated: 4.1, obsoleted: 4.2)
44-
// expected-warning@-1 {{unexpected version number in 'available' attribute for non-specific platform '*'}} {{25-30=}} {{42-47=}} {{58-63=}}
44+
// expected-warning@-1 {{unexpected version number in '@available' attribute for '*'}}
4545
func allPlatformsDeprecatedAndObsoleted2() {}
4646

4747
@available(swift, unavailable)

0 commit comments

Comments
 (0)