Skip to content

Commit 79c0173

Browse files
committed
Parse: Temporarily revert removal of diagnostic.
SourceKit-LSP tests depend on the exact behavior of this diagnostic (which I don't plan to preserve) so I'm reverting the consolidation temporarily to get unblocked.
1 parent 1e76f19 commit 79c0173

File tree

4 files changed

+30
-4
lines changed

4 files changed

+30
-4
lines changed

include/swift/AST/DiagnosticsParse.def

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1579,6 +1579,10 @@ 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+
15821586
WARNING(attr_availability_wildcard_ignored,none,
15831587
"* as platform name has no effect in '%0' attribute", (StringRef))
15841588

lib/Parse/ParseDecl.cpp

Lines changed: 20 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -546,6 +546,26 @@ 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+
549569
auto Attr = new (Context) AvailableAttr(
550570
AtLoc, SourceRange(AttrLoc, Tok.getLoc()), Platform, PlatformLoc,
551571
AttrKind, Message, Renamed, Introduced.Version, Introduced.Range,

lib/Sema/TypeCheckAttr.cpp

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

8407-
if (!domain->isVersioned() && hasVersionSpec) {
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()) {
84088410
SourceRange versionSourceRange;
84098411
if (introducedVersion)
84108412
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 '*'}}
36+
// expected-warning@-1 {{unexpected version number in 'available' attribute for non-specific platform '*'}} {{25-30=}}
3737
func allPlatformsDeprecatedVersion() {}
3838

3939
@available(*, deprecated, obsoleted: 4.2)
40-
// expected-warning@-1 {{unexpected version number in '@available' attribute for '*'}}
40+
// expected-warning@-1 {{unexpected version number in 'available' attribute for non-specific platform '*'}} {{36-41=}}
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 '*'}}
44+
// expected-warning@-1 {{unexpected version number in 'available' attribute for non-specific platform '*'}} {{25-30=}} {{42-47=}} {{58-63=}}
4545
func allPlatformsDeprecatedAndObsoleted2() {}
4646

4747
@available(swift, unavailable)

0 commit comments

Comments
 (0)