Skip to content

Commit 6e264d9

Browse files
committed
SILGen: Fix if #available miscompile with -disable-availabilty-checking.
1 parent f2f4cf2 commit 6e264d9

File tree

5 files changed

+38
-13
lines changed

5 files changed

+38
-13
lines changed

include/swift/AST/Stmt.h

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -504,8 +504,7 @@ class alignas(8) PoundAvailableInfo final :
504504
ArrayRef<AvailabilitySpec *> queries, SourceLoc RParenLoc,
505505
bool isUnavailability)
506506
: PoundLoc(PoundLoc), LParenLoc(LParenLoc), RParenLoc(RParenLoc),
507-
NumQueries(queries.size()), AvailableRange(VersionRange::empty()),
508-
VariantAvailableRange(VersionRange::empty()), Flags() {
507+
NumQueries(queries.size()), Flags() {
509508
Flags.isInvalid = false;
510509
Flags.isUnavailability = isUnavailability;
511510
std::uninitialized_copy(queries.begin(), queries.end(),

test/SILGen/availability_disabled.swift

Lines changed: 0 additions & 5 deletions
This file was deleted.

test/SILGen/availability_disabled_zippered.swift

Lines changed: 0 additions & 6 deletions
This file was deleted.
Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,16 @@
1+
// RUN: %target-swift-emit-silgen -disable-availability-checking %s -verify
2+
// RUN: %target-swift-emit-silgen -disable-availability-checking %s | %FileCheck %s
3+
4+
// CHECK-LABEL: // available()
5+
func available() {
6+
// CHECK: [[TRUE:%.*]] = integer_literal $Builtin.Int1, -1
7+
// CHECK: cond_br [[TRUE]]
8+
if #available(macOS 10.15, *) {}
9+
}
10+
11+
// CHECK-LABEL: // unavailable()
12+
func unavailable() {
13+
// CHECK: [[FALSE:%.*]] = integer_literal $Builtin.Int1, 0
14+
// CHECK: cond_br [[FALSE]]
15+
if #unavailable(macOS 10.15) {}
16+
}
Lines changed: 21 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,21 @@
1+
// RUN: %target-swift-emit-silgen -target %target-cpu-apple-macosx13 -target-variant %target-cpu-apple-ios16-macabi -disable-availability-checking %s -verify
2+
// RUN: %target-swift-emit-silgen -target-variant %target-cpu-apple-macosx13 -target %target-cpu-apple-ios16-macabi -disable-availability-checking %s -verify
3+
4+
// RUN: %target-swift-emit-silgen -target %target-cpu-apple-macosx13 -target-variant %target-cpu-apple-ios16-macabi -disable-availability-checking %s | %FileCheck %s
5+
// RUN: %target-swift-emit-silgen -target-variant %target-cpu-apple-macosx13 -target %target-cpu-apple-ios16-macabi -disable-availability-checking %s | %FileCheck %s
6+
7+
// REQUIRES: OS=macosx || OS=maccatalyst
8+
9+
// CHECK-LABEL: // available()
10+
func available() {
11+
// CHECK: [[TRUE:%.*]] = integer_literal $Builtin.Int1, -1
12+
// CHECK: cond_br [[TRUE]]
13+
if #available(macOS 10.15, *) {}
14+
}
15+
16+
// CHECK-LABEL: // unavailable()
17+
func unavailable() {
18+
// CHECK: [[FALSE:%.*]] = integer_literal $Builtin.Int1, 0
19+
// CHECK: cond_br [[FALSE]]
20+
if #unavailable(macOS 10.15) {}
21+
}

0 commit comments

Comments
 (0)