Skip to content

Commit 6d8dbfa

Browse files
committed
[NFC] Style/assertion/test design improvements
1 parent 3f4355c commit 6d8dbfa

File tree

3 files changed

+50
-43
lines changed

3 files changed

+50
-43
lines changed

lib/AST/Attr.cpp

Lines changed: 16 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -131,8 +131,8 @@ DeclAttributes::isUnavailableInSwiftVersion(
131131
return false;
132132
}
133133

134-
const AvailableAttr *DeclAttributes::getPotentiallyUnavailable(
135-
const ASTContext &ctx) const {
134+
const AvailableAttr *
135+
DeclAttributes::getPotentiallyUnavailable(const ASTContext &ctx) const {
136136
const AvailableAttr *potential = nullptr;
137137
const AvailableAttr *conditional = nullptr;
138138

@@ -151,20 +151,20 @@ const AvailableAttr *DeclAttributes::getPotentiallyUnavailable(
151151
return AvAttr;
152152

153153
switch (AvAttr->getVersionAvailability(ctx)) {
154-
case AvailableVersionComparison::Available:
155-
// Doesn't limit the introduced version.
156-
break;
157-
158-
case AvailableVersionComparison::PotentiallyUnavailable:
159-
// We'll return this if we don't see something that proves it's
160-
// not available in this version.
161-
potential = AvAttr;
162-
break;
163-
164-
case AvailableVersionComparison::Unavailable:
165-
case AvailableVersionComparison::Obsoleted:
166-
conditional = AvAttr;
167-
break;
154+
case AvailableVersionComparison::Available:
155+
// Doesn't limit the introduced version.
156+
break;
157+
158+
case AvailableVersionComparison::PotentiallyUnavailable:
159+
// We'll return this if we don't see something that proves it's
160+
// not available in this version.
161+
potential = AvAttr;
162+
break;
163+
164+
case AvailableVersionComparison::Unavailable:
165+
case AvailableVersionComparison::Obsoleted:
166+
conditional = AvAttr;
167+
break;
168168
}
169169
}
170170

lib/Sema/DerivedConformanceRawRepresentable.cpp

Lines changed: 8 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -214,9 +214,8 @@ struct RuntimeVersionCheck {
214214
auto otherSpec = new (C) OtherPlatformAvailabilitySpec(SourceLoc());
215215

216216
// availableInfo = "#available(\(platformSpec), \(otherSpec))"
217-
auto availableInfo = PoundAvailableInfo::create(C, SourceLoc(),
218-
{ platformSpec, otherSpec },
219-
SourceLoc());
217+
auto availableInfo = PoundAvailableInfo::create(
218+
C, SourceLoc(), { platformSpec, otherSpec }, SourceLoc());
220219

221220
// This won't be filled in by TypeCheckAvailability because we have
222221
// invalid SourceLocs in this area of the AST.
@@ -242,8 +241,8 @@ struct RuntimeVersionCheck {
242241
/// be available, returns true. If it will sometimes be available, adds
243242
/// information about the runtime check needed to ensure it is available to
244243
/// \c versionCheck and returns true.
245-
static bool checkAvailability(EnumElementDecl* elt, ASTContext &C,
246-
Optional<RuntimeVersionCheck> &versionCheck) {
244+
static bool checkAvailability(const EnumElementDecl* elt, ASTContext &C,
245+
Optional<RuntimeVersionCheck> &versionCheck) {
247246
auto *attr = elt->getAttrs().getPotentiallyUnavailable(C);
248247

249248
// Is it always available?
@@ -261,7 +260,11 @@ static bool checkAvailability(EnumElementDecl* elt, ASTContext &C,
261260
return false;
262261

263262
// It's conditionally available; create a version constraint and return true.
263+
assert(attr->getPlatformAgnosticAvailability() ==
264+
PlatformAgnosticAvailabilityKind::None &&
265+
"can only express #available(somePlatform version) checks");
264266
versionCheck.emplace(attr->Platform, *attr->Introduced);
267+
265268
return true;
266269
}
267270

Lines changed: 26 additions & 22 deletions
Original file line numberDiff line numberDiff line change
@@ -1,53 +1,53 @@
11
// RUN: %target-typecheck-verify-swift
2-
// RUN: %target-swift-emit-silgen -emit-sorted-sil %s | %FileCheck %s
3-
// RUN: %target-swift-emit-silgen -emit-sorted-sil -enable-resilience %s | %FileCheck %s
42

5-
// Really just requires a platform with meaningful runtime #available() tests.
6-
// REQUIRES: objc_interop
3+
// RUN: %target-swift-emit-silgen -emit-sorted-sil -o %t.fragile.sil %s
4+
// RUN: %FileCheck %s < %t.fragile.sil
5+
// RUN: %FileCheck -check-prefix NEGATIVE %s < %t.fragile.sil
6+
7+
// RUN: %target-swift-emit-silgen -emit-sorted-sil -enable-resilience -o %t.resilient.sil %s
8+
// RUN: %FileCheck %s < %t.resilient.sil
9+
// RUN: %FileCheck -check-prefix NEGATIVE %s < %t.resilient.sil
10+
11+
// This test just requires a platform with meaningful #available() checks, but
12+
// for simplicity, it's written for macOS only.
13+
// REQUIRES: OS=macosx
714

815
public enum E: Int {
916
// For some reason, we generate strange SIL for the first case that's
1017
// difficult to validate. This just gets that out of the way.
1118
case sacrificial = -500
1219

1320
case normal = -1000
14-
@available(macOS 10.8, iOS 7, watchOS 1, tvOS 7, *)
21+
22+
@available(macOS 10.8, *)
1523
case alwaysAvailable = -2000
16-
@available(macOS 500.600.700, iOS 500.600.700, watchOS 500.600.700, tvOS 500.600.700, *)
24+
25+
@available(macOS 500.600.700, *)
1726
case potentiallyUnavailable = -3000
18-
@available(macOS, unavailable) @available(iOS, unavailable)
19-
@available(watchOS, unavailable) @available(tvOS, unavailable)
27+
28+
@available(macOS, unavailable)
2029
case neverAvailable = -4000
21-
}
2230

23-
// CHECK-LABEL: sil {{(\[serialized\] )?}}[ossa] @$s32enum_raw_representable_available1EO0B5ValueACSgSi_tcfC
31+
}
2432

25-
// CHECK-NOT: integer_literal $Builtin.IntLiteral, -4000
33+
// CHECK-LABEL: sil {{(\[serialized\] )?}}[ossa] @$s4main1EO8rawValueACSgSi_tcfC
2634

2735
// CHECK: integer_literal $Builtin.IntLiteral, -1000
2836
// CHECK: cond_br {{[^,]+}}, [[normal:bb[0-9]+]]
2937

30-
// CHECK-NOT: integer_literal $Builtin.IntLiteral, -4000
31-
3238
// CHECK: integer_literal $Builtin.IntLiteral, -2000
3339
// CHECK: cond_br {{[^,]+}}, [[alwaysAvailable:bb[0-9]+]]
3440

35-
// CHECK-NOT: integer_literal $Builtin.IntLiteral, -4000
36-
3741
// CHECK: integer_literal $Builtin.IntLiteral, -3000
3842
// CHECK: cond_br {{[^,]+}}, [[potentiallyUnavailable:bb[0-9]+]]
3943

40-
// CHECK-NOT: integer_literal $Builtin.IntLiteral, -4000
41-
4244
// CHECK: [[potentiallyUnavailable]]:
4345
// CHECK-NEXT: integer_literal $Builtin.Word, 500
4446
// CHECK-NEXT: integer_literal $Builtin.Word, 600
4547
// CHECK-NEXT: integer_literal $Builtin.Word, 700
4648
// CHECK: function_ref @$ss26_stdlib_isOSVersionAtLeastyBi1_Bw_BwBwtF
4749
// CHECK: cond_br {{[^,]+}}, [[potentiallyUnavailable_newEnough:bb[0-9]+]],
4850

49-
// CHECK-NOT: integer_literal $Builtin.IntLiteral, -4000
50-
5151
// CHECK: [[potentiallyUnavailable_newEnough]]:
5252
// CHECK: {{enum \$E|inject_enum_addr %[0-9]+ : \$\*E}}, #E.potentiallyUnavailable!enumelt
5353

@@ -59,9 +59,13 @@ public enum E: Int {
5959
// CHECK-NOT: function_ref @$ss26_stdlib_isOSVersionAtLeastyBi1_Bw_BwBwtF
6060
// CHECK: {{enum \$E|inject_enum_addr %[0-9]+ : \$\*E}}, #E.normal!enumelt
6161

62-
// CHECK: end sil function '$s32enum_raw_representable_available1EO0B5ValueACSgSi_tcfC'
62+
// CHECK: end sil function '$s4main1EO8rawValueACSgSi_tcfC'
6363

64-
// CHECK-LABEL: sil {{(\[serialized\] )?}}[ossa] @$s32enum_raw_representable_available1EO0B5ValueSivg
64+
// CHECK-LABEL: sil {{(\[serialized\] )?}}[ossa] @$s4main1EO8rawValueSivg
6565
// CHECK: {{switch_enum %0 : \$E|switch_enum_addr %2 : \$\*E}}
6666
// CHECK-NOT: function_ref @$ss26_stdlib_isOSVersionAtLeastyBi1_Bw_BwBwtF
67-
// CHECK: end sil function '$s32enum_raw_representable_available1EO0B5ValueSivg'
67+
// CHECK: end sil function '$s4main1EO8rawValueSivg'
68+
69+
// NEGATIVE-LABEL: sil {{(\[serialized\] )?}}[ossa] @$s4main1EO8rawValueACSgSi_tcfC
70+
// NEGATIVE-NOT: integer_literal $Builtin.IntLiteral, -4000
71+
// NEGATIVE: end sil function '$s4main1EO8rawValueACSgSi_tcfC'

0 commit comments

Comments
 (0)