@@ -370,44 +370,56 @@ Optional<llvm::VersionTuple>
370
370
swift::getSwiftRuntimeCompatibilityVersionForTarget (
371
371
const llvm::Triple &Triple) {
372
372
unsigned Major, Minor, Micro;
373
-
374
- if (Triple.getArchName () == " arm64e" )
375
- return llvm::VersionTuple (5 , 3 );
373
+ #define MAX (a, b ) ((a) > (b) ? (a) : (b))
376
374
377
375
if (Triple.isMacOSX ()) {
378
376
Triple.getMacOSXVersion (Major, Minor, Micro);
377
+
378
+ auto floorFor64e = [&Triple](llvm::VersionTuple v) {
379
+ if (Triple.getArchName () != " arm64e" ) return v;
380
+ // macOS got first arm64e support in 11.0, i.e. VersionTuple(5, 3)
381
+ return MAX (v, llvm::VersionTuple (5 , 3 ));
382
+ };
383
+
379
384
if (Major == 10 ) {
380
385
if (Triple.isAArch64 () && Minor <= 16 )
381
- return llvm::VersionTuple (5 , 3 );
386
+ return floorFor64e ( llvm::VersionTuple (5 , 3 ) );
382
387
383
388
if (Minor <= 14 ) {
384
- return llvm::VersionTuple (5 , 0 );
389
+ return floorFor64e ( llvm::VersionTuple (5 , 0 ) );
385
390
} else if (Minor <= 15 ) {
386
391
if (Micro <= 3 ) {
387
- return llvm::VersionTuple (5 , 1 );
392
+ return floorFor64e ( llvm::VersionTuple (5 , 1 ) );
388
393
} else {
389
- return llvm::VersionTuple (5 , 2 );
394
+ return floorFor64e ( llvm::VersionTuple (5 , 2 ) );
390
395
}
391
396
}
392
397
} else if (Major == 11 ) {
393
- return llvm::VersionTuple (5 , 3 );
398
+ return floorFor64e ( llvm::VersionTuple (5 , 3 ) );
394
399
}
395
400
} else if (Triple.isiOS ()) { // includes tvOS
396
401
Triple.getiOSVersion (Major, Minor, Micro);
397
402
403
+ auto floorFor64e = [&Triple](llvm::VersionTuple v) {
404
+ if (Triple.getArchName () != " arm64e" ) return v;
405
+ // iOS got first arm64e support in 12.0, which has a Swift runtime version
406
+ // older than 5.0, so let's floor at VersionTuple(5, 0) instead.
407
+ return MAX (v, llvm::VersionTuple (5 , 0 ));
408
+ };
409
+
398
410
// arm64 simulators and macCatalyst are introduced in iOS 14.0/tvOS 14.0
399
411
// with Swift 5.3
400
412
if (Triple.isAArch64 () && Major <= 14 &&
401
413
(Triple.isSimulatorEnvironment () || Triple.isMacCatalystEnvironment ()))
402
- return llvm::VersionTuple (5 , 3 );
414
+ return floorFor64e ( llvm::VersionTuple (5 , 3 ) );
403
415
404
416
if (Major <= 12 ) {
405
- return llvm::VersionTuple (5 , 0 );
417
+ return floorFor64e ( llvm::VersionTuple (5 , 0 ) );
406
418
} else if (Major <= 13 ) {
407
419
if (Minor <= 3 ) {
408
- return llvm::VersionTuple (5 , 1 );
420
+ return floorFor64e ( llvm::VersionTuple (5 , 1 ) );
409
421
} else {
410
- return llvm::VersionTuple (5 , 2 );
422
+ return floorFor64e ( llvm::VersionTuple (5 , 2 ) );
411
423
}
412
424
}
413
425
} else if (Triple.isWatchOS ()) {
0 commit comments