Skip to content

Commit e9c7b1b

Browse files
authored
Merge pull request #16468 from tkremenek/obsoleted-4.2
Swift 4.x (x < 2) names are obsoleted in 4.2, not 5.
2 parents 014f6f3 + 836e6c1 commit e9c7b1b

File tree

6 files changed

+54
-18
lines changed

6 files changed

+54
-18
lines changed

lib/ClangImporter/ImportDecl.cpp

Lines changed: 14 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -2359,19 +2359,31 @@ namespace {
23592359
PlatformAgnosticAvailabilityKind::UnavailableInSwift);
23602360
} else {
23612361
unsigned majorVersion = getVersion().majorVersionNumber();
2362+
unsigned minorVersion = getVersion().minorVersionNumber();
23622363
if (getVersion() < getActiveSwiftVersion()) {
23632364
// A Swift 2 name, for example, was obsoleted in Swift 3.
2365+
// However, a Swift 4 name is obsoleted in Swift 4.2.
2366+
// FIXME: it would be better to have a unified place
2367+
// to represent Swift versions for API versioning.
2368+
clang::VersionTuple obsoletedVersion =
2369+
(majorVersion == 4 && minorVersion < 2)
2370+
? clang::VersionTuple(4, 2)
2371+
: clang::VersionTuple(majorVersion + 1);
23642372
attr = AvailableAttr::createPlatformAgnostic(
23652373
ctx, /*Message*/StringRef(), ctx.AllocateCopy(renamed.str()),
23662374
PlatformAgnosticAvailabilityKind::SwiftVersionSpecific,
2367-
clang::VersionTuple(majorVersion + 1));
2375+
obsoletedVersion);
23682376
} else {
23692377
// Future names are introduced in their future version.
23702378
assert(getVersion() > getActiveSwiftVersion());
2379+
clang::VersionTuple introducedVersion =
2380+
(majorVersion == 4 && minorVersion == 2)
2381+
? clang::VersionTuple(4, 2)
2382+
: clang::VersionTuple(majorVersion);
23712383
attr = new (ctx) AvailableAttr(
23722384
SourceLoc(), SourceRange(), PlatformKind::none,
23732385
/*Message*/StringRef(), ctx.AllocateCopy(renamed.str()),
2374-
/*Introduced*/clang::VersionTuple(majorVersion), SourceRange(),
2386+
/*Introduced*/introducedVersion, SourceRange(),
23752387
/*Deprecated*/clang::VersionTuple(), SourceRange(),
23762388
/*Obsoleted*/clang::VersionTuple(), SourceRange(),
23772389
PlatformAgnosticAvailabilityKind::SwiftVersionSpecific,
Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,10 @@
1+
Name: M
2+
Classes:
3+
- Name: FooID
4+
SwiftName: Foo_ID
5+
6+
SwiftVersions:
7+
- Version: 4
8+
Classes:
9+
- Name: FooID
10+
SwiftName: FooID
Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,3 @@
1+
@import Foundation;
2+
@interface FooID: NSObject
3+
@end
Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,6 @@
11
module APINotesTest {
22
header "APINotesTest.h"
33
}
4+
module ObsoletedAPINotesTest {
5+
header "ObsoletedAPINotesTest.h"
6+
}

test/APINotes/obsoleted.swift

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,8 @@
1+
// RUN: not %target-swift-frontend -typecheck -verify -I %S/Inputs/custom-modules -F %S/Inputs/custom-frameworks -swift-version 3 %s
2+
// RUN: %target-swift-frontend -typecheck -verify -I %S/Inputs/custom-modules -F %S/Inputs/custom-frameworks -swift-version 4.2 %s
3+
// RUN: %target-swift-frontend -typecheck -verify -I %S/Inputs/custom-modules -F %S/Inputs/custom-frameworks -swift-version 5 %s
4+
// REQUIRES: objc_interop
5+
import ObsoletedAPINotesTest
6+
7+
let _: FooID // expected-error{{'FooID' has been renamed to 'Foo_ID'}}
8+
let _: Foo_ID

test/APINotes/versioned-multi.swift

Lines changed: 16 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -308,98 +308,98 @@
308308

309309

310310
// CHECK-SWIFT-5: var multiVersionedGlobal4: Int32
311-
// CHECK-SWIFT-5: @available(swift, obsoleted: 5, renamed: "multiVersionedGlobal4")
311+
// CHECK-SWIFT-5: @available(swift, obsoleted: 4.2, renamed: "multiVersionedGlobal4")
312312
// CHECK-SWIFT-5: var multiVersionedGlobal4_4: Int32
313313
// CHECK-SWIFT-5: @available(swift, obsoleted: 3, renamed: "multiVersionedGlobal4Notes_NEW")
314314
// CHECK-SWIFT-5: var multiVersionedGlobal4Notes: Int32
315-
// CHECK-SWIFT-5: @available(swift, obsoleted: 5, renamed: "multiVersionedGlobal4Notes_NEW")
315+
// CHECK-SWIFT-5: @available(swift, obsoleted: 4.2, renamed: "multiVersionedGlobal4Notes_NEW")
316316
// CHECK-SWIFT-5: var multiVersionedGlobal4Notes_4: Int32
317317
// CHECK-SWIFT-5: var multiVersionedGlobal4Notes_NEW: Int32
318318
// CHECK-SWIFT-5: @available(swift, obsoleted: 3, renamed: "multiVersionedGlobal4Header_NEW")
319319
// CHECK-SWIFT-5: var multiVersionedGlobal4Header: Int32
320-
// CHECK-SWIFT-5: @available(swift, obsoleted: 5, renamed: "multiVersionedGlobal4Header_NEW")
320+
// CHECK-SWIFT-5: @available(swift, obsoleted: 4.2, renamed: "multiVersionedGlobal4Header_NEW")
321321
// CHECK-SWIFT-5: var multiVersionedGlobal4Header_4: Int32
322322
// CHECK-SWIFT-5: var multiVersionedGlobal4Header_NEW: Int32
323323
// CHECK-SWIFT-5: @available(swift, obsoleted: 3, renamed: "multiVersionedGlobal4Both_NEW")
324324
// CHECK-SWIFT-5: var multiVersionedGlobal4Both: Int32
325-
// CHECK-SWIFT-5: @available(swift, obsoleted: 5, renamed: "multiVersionedGlobal4Both_NEW")
325+
// CHECK-SWIFT-5: @available(swift, obsoleted: 4.2, renamed: "multiVersionedGlobal4Both_NEW")
326326
// CHECK-SWIFT-5: var multiVersionedGlobal4Both_4: Int32
327327
// CHECK-SWIFT-5: var multiVersionedGlobal4Both_NEW: Int32
328328

329329
// CHECK-SWIFT-5: var multiVersionedGlobal34: Int32
330330
// CHECK-SWIFT-5: @available(swift, obsoleted: 4, renamed: "multiVersionedGlobal34")
331331
// CHECK-SWIFT-5: var multiVersionedGlobal34_3: Int32
332-
// CHECK-SWIFT-5: @available(swift, obsoleted: 5, renamed: "multiVersionedGlobal34")
332+
// CHECK-SWIFT-5: @available(swift, obsoleted: 4.2, renamed: "multiVersionedGlobal34")
333333
// CHECK-SWIFT-5: var multiVersionedGlobal34_4: Int32
334334
// CHECK-SWIFT-5: @available(swift, obsoleted: 3, renamed: "multiVersionedGlobal34Notes_NEW")
335335
// CHECK-SWIFT-5: var multiVersionedGlobal34Notes: Int32
336336
// CHECK-SWIFT-5: @available(swift, obsoleted: 4, renamed: "multiVersionedGlobal34Notes_NEW")
337337
// CHECK-SWIFT-5: var multiVersionedGlobal34Notes_3: Int32
338-
// CHECK-SWIFT-5: @available(swift, obsoleted: 5, renamed: "multiVersionedGlobal34Notes_NEW")
338+
// CHECK-SWIFT-5: @available(swift, obsoleted: 4.2, renamed: "multiVersionedGlobal34Notes_NEW")
339339
// CHECK-SWIFT-5: var multiVersionedGlobal34Notes_4: Int32
340340
// CHECK-SWIFT-5: var multiVersionedGlobal34Notes_NEW: Int32
341341
// CHECK-SWIFT-5: @available(swift, obsoleted: 3, renamed: "multiVersionedGlobal34Header_NEW")
342342
// CHECK-SWIFT-5: var multiVersionedGlobal34Header: Int32
343343
// CHECK-SWIFT-5: @available(swift, obsoleted: 4, renamed: "multiVersionedGlobal34Header_NEW")
344344
// CHECK-SWIFT-5: var multiVersionedGlobal34Header_3: Int32
345-
// CHECK-SWIFT-5: @available(swift, obsoleted: 5, renamed: "multiVersionedGlobal34Header_NEW")
345+
// CHECK-SWIFT-5: @available(swift, obsoleted: 4.2, renamed: "multiVersionedGlobal34Header_NEW")
346346
// CHECK-SWIFT-5: var multiVersionedGlobal34Header_4: Int32
347347
// CHECK-SWIFT-5: var multiVersionedGlobal34Header_NEW: Int32
348348
// CHECK-SWIFT-5: @available(swift, obsoleted: 3, renamed: "multiVersionedGlobal34Both_NEW")
349349
// CHECK-SWIFT-5: var multiVersionedGlobal34Both: Int32
350350
// CHECK-SWIFT-5: @available(swift, obsoleted: 4, renamed: "multiVersionedGlobal34Both_NEW")
351351
// CHECK-SWIFT-5: var multiVersionedGlobal34Both_3: Int32
352-
// CHECK-SWIFT-5: @available(swift, obsoleted: 5, renamed: "multiVersionedGlobal34Both_NEW")
352+
// CHECK-SWIFT-5: @available(swift, obsoleted: 4.2, renamed: "multiVersionedGlobal34Both_NEW")
353353
// CHECK-SWIFT-5: var multiVersionedGlobal34Both_4: Int32
354354
// CHECK-SWIFT-5: var multiVersionedGlobal34Both_NEW: Int32
355355

356356
// CHECK-SWIFT-5: @available(swift, obsoleted: 3, renamed: "multiVersionedGlobal45_5")
357357
// CHECK-SWIFT-5: var multiVersionedGlobal45: Int32
358-
// CHECK-SWIFT-5: @available(swift, obsoleted: 5, renamed: "multiVersionedGlobal45_5")
358+
// CHECK-SWIFT-5: @available(swift, obsoleted: 4.2, renamed: "multiVersionedGlobal45_5")
359359
// CHECK-SWIFT-5: var multiVersionedGlobal45_4: Int32
360360
// CHECK-SWIFT-5: var multiVersionedGlobal45_5: Int32
361361
// CHECK-SWIFT-5: @available(swift, obsoleted: 3, renamed: "multiVersionedGlobal45Notes_5")
362362
// CHECK-SWIFT-5: var multiVersionedGlobal45Notes: Int32
363-
// CHECK-SWIFT-5: @available(swift, obsoleted: 5, renamed: "multiVersionedGlobal45Notes_5")
363+
// CHECK-SWIFT-5: @available(swift, obsoleted: 4.2, renamed: "multiVersionedGlobal45Notes_5")
364364
// CHECK-SWIFT-5: var multiVersionedGlobal45Notes_4: Int32
365365
// CHECK-SWIFT-5: var multiVersionedGlobal45Notes_5: Int32
366366
// CHECK-SWIFT-5: @available(swift, obsoleted: 3, renamed: "multiVersionedGlobal45Header_5")
367367
// CHECK-SWIFT-5: var multiVersionedGlobal45Header: Int32
368-
// CHECK-SWIFT-5: @available(swift, obsoleted: 5, renamed: "multiVersionedGlobal45Header_5")
368+
// CHECK-SWIFT-5: @available(swift, obsoleted: 4.2, renamed: "multiVersionedGlobal45Header_5")
369369
// CHECK-SWIFT-5: var multiVersionedGlobal45Header_4: Int32
370370
// CHECK-SWIFT-5: var multiVersionedGlobal45Header_5: Int32
371371
// CHECK-SWIFT-5: @available(swift, obsoleted: 3, renamed: "multiVersionedGlobal45Both_5")
372372
// CHECK-SWIFT-5: var multiVersionedGlobal45Both: Int32
373-
// CHECK-SWIFT-5: @available(swift, obsoleted: 5, renamed: "multiVersionedGlobal45Both_5")
373+
// CHECK-SWIFT-5: @available(swift, obsoleted: 4.2, renamed: "multiVersionedGlobal45Both_5")
374374
// CHECK-SWIFT-5: var multiVersionedGlobal45Both_4: Int32
375375
// CHECK-SWIFT-5: var multiVersionedGlobal45Both_5: Int32
376376

377377
// CHECK-SWIFT-5: @available(swift, obsoleted: 3, renamed: "multiVersionedGlobal345_5")
378378
// CHECK-SWIFT-5: var multiVersionedGlobal345: Int32
379379
// CHECK-SWIFT-5: @available(swift, obsoleted: 4, renamed: "multiVersionedGlobal345_5")
380380
// CHECK-SWIFT-5: var multiVersionedGlobal345_3: Int32
381-
// CHECK-SWIFT-5: @available(swift, obsoleted: 5, renamed: "multiVersionedGlobal345_5")
381+
// CHECK-SWIFT-5: @available(swift, obsoleted: 4.2, renamed: "multiVersionedGlobal345_5")
382382
// CHECK-SWIFT-5: var multiVersionedGlobal345_4: Int32
383383
// CHECK-SWIFT-5: var multiVersionedGlobal345_5: Int32
384384
// CHECK-SWIFT-5: @available(swift, obsoleted: 3, renamed: "multiVersionedGlobal345Notes_5")
385385
// CHECK-SWIFT-5: var multiVersionedGlobal345Notes: Int32
386386
// CHECK-SWIFT-5: @available(swift, obsoleted: 4, renamed: "multiVersionedGlobal345Notes_5")
387387
// CHECK-SWIFT-5: var multiVersionedGlobal345Notes_3: Int32
388-
// CHECK-SWIFT-5: @available(swift, obsoleted: 5, renamed: "multiVersionedGlobal345Notes_5")
388+
// CHECK-SWIFT-5: @available(swift, obsoleted: 4.2, renamed: "multiVersionedGlobal345Notes_5")
389389
// CHECK-SWIFT-5: var multiVersionedGlobal345Notes_4: Int32
390390
// CHECK-SWIFT-5: var multiVersionedGlobal345Notes_5: Int32
391391
// CHECK-SWIFT-5: @available(swift, obsoleted: 3, renamed: "multiVersionedGlobal345Header_5")
392392
// CHECK-SWIFT-5: var multiVersionedGlobal345Header: Int32
393393
// CHECK-SWIFT-5: @available(swift, obsoleted: 4, renamed: "multiVersionedGlobal345Header_5")
394394
// CHECK-SWIFT-5: var multiVersionedGlobal345Header_3: Int32
395-
// CHECK-SWIFT-5: @available(swift, obsoleted: 5, renamed: "multiVersionedGlobal345Header_5")
395+
// CHECK-SWIFT-5: @available(swift, obsoleted: 4.2, renamed: "multiVersionedGlobal345Header_5")
396396
// CHECK-SWIFT-5: var multiVersionedGlobal345Header_4: Int32
397397
// CHECK-SWIFT-5: var multiVersionedGlobal345Header_5: Int32
398398
// CHECK-SWIFT-5: @available(swift, obsoleted: 3, renamed: "multiVersionedGlobal345Both_5")
399399
// CHECK-SWIFT-5: var multiVersionedGlobal345Both: Int32
400400
// CHECK-SWIFT-5: @available(swift, obsoleted: 4, renamed: "multiVersionedGlobal345Both_5")
401401
// CHECK-SWIFT-5: var multiVersionedGlobal345Both_3: Int32
402-
// CHECK-SWIFT-5: @available(swift, obsoleted: 5, renamed: "multiVersionedGlobal345Both_5")
402+
// CHECK-SWIFT-5: @available(swift, obsoleted: 4.2, renamed: "multiVersionedGlobal345Both_5")
403403
// CHECK-SWIFT-5: var multiVersionedGlobal345Both_4: Int32
404404
// CHECK-SWIFT-5: var multiVersionedGlobal345Both_5: Int32
405405
// CHECK-SWIFT-5: @available(swift, obsoleted: 5, renamed: "multiVersionedGlobal34_4_2")

0 commit comments

Comments
 (0)