Skip to content

Commit f49dbb0

Browse files
committed
TBDGen: Specify the correct macCatalyst platform ID in $ld$previous directives.
Resolves rdar://123491072
1 parent 9a0598c commit f49dbb0

File tree

5 files changed

+45
-32
lines changed

5 files changed

+45
-32
lines changed

include/swift/AST/Attr.h

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1862,8 +1862,8 @@ class OriginallyDefinedInAttr: public DeclAttribute {
18621862
struct ActiveVersion {
18631863
StringRef ModuleName;
18641864
PlatformKind Platform;
1865-
bool IsSimulator;
18661865
llvm::VersionTuple Version;
1866+
bool ForTargetVariant = false;
18671867
};
18681868

18691869
/// Returns non-optional if this attribute is active given the current platform.

lib/AST/Attr.cpp

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -2215,7 +2215,6 @@ OriginallyDefinedInAttr::isActivePlatform(const ASTContext &ctx) const {
22152215
Result.Version = MovedVersion;
22162216
Result.ModuleName = OriginalModuleName;
22172217
if (isPlatformActive(Platform, ctx.LangOpts, /*TargetVariant*/false)) {
2218-
Result.IsSimulator = ctx.LangOpts.Target.isSimulatorEnvironment();
22192218
return Result;
22202219
}
22212220

@@ -2224,7 +2223,7 @@ OriginallyDefinedInAttr::isActivePlatform(const ASTContext &ctx) const {
22242223
// libraries.
22252224
if (ctx.LangOpts.TargetVariant.has_value() &&
22262225
isPlatformActive(Platform, ctx.LangOpts, /*TargetVariant*/true)) {
2227-
Result.IsSimulator = ctx.LangOpts.TargetVariant->isSimulatorEnvironment();
2226+
Result.ForTargetVariant = true;
22282227
return Result;
22292228
}
22302229
return std::nullopt;

lib/IRGen/TBDGen.cpp

Lines changed: 18 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -233,7 +233,12 @@ TBDGenVisitor::parsePreviousModuleInstallNameMap() {
233233
}
234234

235235
static LinkerPlatformId
236-
getLinkerPlatformId(OriginallyDefinedInAttr::ActiveVersion Ver) {
236+
getLinkerPlatformId(OriginallyDefinedInAttr::ActiveVersion Ver,
237+
ASTContext &Ctx) {
238+
auto target =
239+
Ver.ForTargetVariant ? Ctx.LangOpts.TargetVariant : Ctx.LangOpts.Target;
240+
bool isSimulator = target ? target->isSimulatorEnvironment() : false;
241+
237242
switch(Ver.Platform) {
238243
case swift::PlatformKind::none:
239244
llvm_unreachable("cannot find platform kind");
@@ -243,16 +248,16 @@ getLinkerPlatformId(OriginallyDefinedInAttr::ActiveVersion Ver) {
243248
llvm_unreachable("not used for this platform");
244249
case swift::PlatformKind::iOS:
245250
case swift::PlatformKind::iOSApplicationExtension:
246-
return Ver.IsSimulator ? LinkerPlatformId::iOS_sim:
247-
LinkerPlatformId::iOS;
251+
if (target && target->isMacCatalystEnvironment())
252+
return LinkerPlatformId::macCatalyst;
253+
return isSimulator ? LinkerPlatformId::iOS_sim : LinkerPlatformId::iOS;
248254
case swift::PlatformKind::tvOS:
249255
case swift::PlatformKind::tvOSApplicationExtension:
250-
return Ver.IsSimulator ? LinkerPlatformId::tvOS_sim:
251-
LinkerPlatformId::tvOS;
256+
return isSimulator ? LinkerPlatformId::tvOS_sim : LinkerPlatformId::tvOS;
252257
case swift::PlatformKind::watchOS:
253258
case swift::PlatformKind::watchOSApplicationExtension:
254-
return Ver.IsSimulator ? LinkerPlatformId::watchOS_sim:
255-
LinkerPlatformId::watchOS;
259+
return isSimulator ? LinkerPlatformId::watchOS_sim
260+
: LinkerPlatformId::watchOS;
256261
case swift::PlatformKind::macOS:
257262
case swift::PlatformKind::macOSApplicationExtension:
258263
return LinkerPlatformId::macOS;
@@ -264,8 +269,9 @@ getLinkerPlatformId(OriginallyDefinedInAttr::ActiveVersion Ver) {
264269
}
265270

266271
static StringRef
267-
getLinkerPlatformName(OriginallyDefinedInAttr::ActiveVersion Ver) {
268-
return getLinkerPlatformName((uint8_t)getLinkerPlatformId(Ver));
272+
getLinkerPlatformName(OriginallyDefinedInAttr::ActiveVersion Ver,
273+
ASTContext &Ctx) {
274+
return getLinkerPlatformName(getLinkerPlatformId(Ver, Ctx));
269275
}
270276

271277
/// Find the most relevant introducing version of the decl stack we have visited
@@ -313,17 +319,17 @@ void TBDGenVisitor::addLinkerDirectiveSymbolsLdPrevious(
313319
// so we don't need the linker directives.
314320
if (*IntroVer >= Ver.Version)
315321
continue;
316-
auto PlatformNumber = getLinkerPlatformId(Ver);
322+
auto PlatformNumber = getLinkerPlatformId(Ver, Ctx);
317323
auto It = previousInstallNameMap->find(Ver.ModuleName.str());
318324
if (It == previousInstallNameMap->end()) {
319325
Ctx.Diags.diagnose(SourceLoc(), diag::cannot_find_install_name,
320-
Ver.ModuleName, getLinkerPlatformName(Ver));
326+
Ver.ModuleName, getLinkerPlatformName(Ver, Ctx));
321327
continue;
322328
}
323329
auto InstallName = It->second.getInstallName(PlatformNumber);
324330
if (InstallName.empty()) {
325331
Ctx.Diags.diagnose(SourceLoc(), diag::cannot_find_install_name,
326-
Ver.ModuleName, getLinkerPlatformName(Ver));
332+
Ver.ModuleName, getLinkerPlatformName(Ver, Ctx));
327333
continue;
328334
}
329335
llvm::SmallString<64> Buffer;

test/TBD/Inputs/install-name-map-toasterkit.json

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -8,5 +8,10 @@
88
"module": "ToasterKit",
99
"install_name": "/System/Previous/iOS/ToasterKit.dylib",
1010
"platforms": ["iOS", "iOS_sim"]
11+
},
12+
{
13+
"module": "ToasterKit",
14+
"install_name": "/System/Previous/macCatalyst/ToasterKit.dylib",
15+
"platforms": ["macCatalyst"]
1116
}
1217
]

test/TBD/linker-directives-ld-previous-macos.swift

Lines changed: 20 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -2,24 +2,27 @@
22

33
// RUN: %empty-directory(%t)
44

5-
// RUN: %target-swift-frontend -typecheck %S/Inputs/linker-directive.swift -tbd-is-installapi -emit-tbd -emit-tbd-path %t/linker_directives.tbd -previous-module-installname-map-file %S/Inputs/install-name-map-toasterkit.json -tbd-install_name toasterkit
6-
// RUN: %llvm-nm %t/linker_directives.tbd | %FileCheck %s
7-
// RUN: %llvm-nm %t/linker_directives.tbd | %FileCheck -check-prefix=CHECK-NO-NEW-SYMBOL %s
8-
// RUN: %target-swift-frontend -typecheck %S/Inputs/linker-directive.swift -emit-tbd -emit-tbd-path %t/linker_directives.tbd -previous-module-installname-map-file %S/Inputs/install-name-map-toasterkit.json -tbd-install_name toasterkit
9-
// RUN: %llvm-nm %t/linker_directives.tbd | %FileCheck %s
10-
// RUN: %llvm-nm %t/linker_directives.tbd | %FileCheck -check-prefix=CHECK-NO-NEW-SYMBOL %s
5+
// RUN: %target-swift-frontend -typecheck %S/Inputs/linker-directive.swift -tbd-is-installapi -emit-tbd -emit-tbd-path %t/linker_directives_installapi.tbd -previous-module-installname-map-file %S/Inputs/install-name-map-toasterkit.json -tbd-install_name toasterkit
6+
// RUN: %llvm-nm %t/linker_directives_installapi.tbd | %FileCheck %s --check-prefixes=CHECK,CHECK-MAC --implicit-check-not "System/Previous/macCatalyst"
7+
// RUN: %target-swift-frontend -typecheck %S/Inputs/linker-directive.swift -emit-tbd -emit-tbd-path %t/linker_directives_macos.tbd -previous-module-installname-map-file %S/Inputs/install-name-map-toasterkit.json -tbd-install_name toasterkit
8+
// RUN: %llvm-nm %t/linker_directives_macos.tbd | %FileCheck %s --check-prefixes=CHECK,CHECK-MAC --implicit-check-not "System/Previous/macCatalyst"
119

12-
// RUN: %target-swift-frontend -target-variant x86_64-apple-ios13.1-macabi -typecheck %S/Inputs/linker-directive.swift -emit-tbd -emit-tbd-path %t/linker_directives.tbd -previous-module-installname-map-file %S/Inputs/install-name-map-toasterkit.json -tbd-install_name toasterkit
13-
// RUN: %llvm-nm %t/linker_directives.tbd | %FileCheck -check-prefix=CHECK-ZIPPERED %s
14-
// RUN: %llvm-nm %t/linker_directives.tbd | %FileCheck -check-prefix=CHECK-NO-NEW-SYMBOL %s
10+
// RUN: %target-swift-frontend -target-variant x86_64-apple-ios13.1-macabi -typecheck %S/Inputs/linker-directive.swift -emit-tbd -emit-tbd-path %t/linker_directives_macos_macabi.tbd -previous-module-installname-map-file %S/Inputs/install-name-map-toasterkit.json -tbd-install_name toasterkit
11+
// RUN: %llvm-nm %t/linker_directives_macos_macabi.tbd | %FileCheck -check-prefixes=CHECK,CHECK-MAC,CHECK-MACCATALYST %s
1512

16-
// CHECK: D $ld$previous$/System/Previous/macOS/ToasterKit.dylib$$1$10.8$10.15$_$s10ToasterKit5toastyyF$
17-
// CHECK: D $ld$previous$/System/Previous/macOS/ToasterKit.dylib$$1$10.8$10.15$_$s10ToasterKit7VehicleV4moveyyF$
18-
// CHECK: D $ld$previous$/System/Previous/macOS/ToasterKit.dylib$$1$10.8$10.15$_$s10ToasterKit7VehicleVMa$
19-
// CHECK: D $ld$previous$/System/Previous/macOS/ToasterKit.dylib$$1$10.8$10.15$_$s10ToasterKit7VehicleVMn$
20-
// CHECK: D $ld$previous$/System/Previous/macOS/ToasterKit.dylib$$1$10.8$10.15$_$s10ToasterKit7VehicleVN$
13+
// RUN: %target-swift-frontend -target x86_64-apple-ios13.1-macabi -typecheck %S/Inputs/linker-directive.swift -emit-tbd -emit-tbd-path %t/linker_directives_macabi.tbd -previous-module-installname-map-file %S/Inputs/install-name-map-toasterkit.json -tbd-install_name toasterkit
14+
// R/UN: %llvm-nm %t/linker_directives_macabi.tbd | %FileCheck -check-prefixes=CHECK,CHECK-MACCATALYST %s --implicit-check-not "System/Previous/macOS"
2115

22-
// CHECK-ZIPPERED: $ld$previous$/System/Previous/iOS/ToasterKit.dylib$$2$10.2$13.0$_$s10ToasterKit5toastyyF$
23-
// CHECK-ZIPPERED: $ld$previous$/System/Previous/macOS/ToasterKit.dylib$$1$10.8$10.15$_$s10ToasterKit5toastyyF$
16+
// CHECK-MACCATALYST: D $ld$previous$/System/Previous/macCatalyst/ToasterKit.dylib$$6$10.2$13.0$_$s10ToasterKit5toastyyF$
17+
// CHECK-MACCATALYST: D $ld$previous$/System/Previous/macCatalyst/ToasterKit.dylib$$6$10.2$13.0$_$s10ToasterKit7VehicleV4moveyyF$
18+
// CHECK-MACCATALYST: D $ld$previous$/System/Previous/macCatalyst/ToasterKit.dylib$$6$10.2$13.0$_$s10ToasterKit7VehicleVMa$
19+
// CHECK-MACCATALYST: D $ld$previous$/System/Previous/macCatalyst/ToasterKit.dylib$$6$10.2$13.0$_$s10ToasterKit7VehicleVMn$
20+
// CHECK-MACCATALYST: D $ld$previous$/System/Previous/macCatalyst/ToasterKit.dylib$$6$10.2$13.0$_$s10ToasterKit7VehicleVN$
2421

25-
// CHECK-NO-NEW-SYMBOL-NOT: $_$s10ToasterKit7VehicleV32originallyDefinedInCurrentModuleyyF
22+
// CHECK-MAC: D $ld$previous$/System/Previous/macOS/ToasterKit.dylib$$1$10.8$10.15$_$s10ToasterKit5toastyyF$
23+
// CHECK-MAC: D $ld$previous$/System/Previous/macOS/ToasterKit.dylib$$1$10.8$10.15$_$s10ToasterKit7VehicleV4moveyyF$
24+
// CHECK-MAC: D $ld$previous$/System/Previous/macOS/ToasterKit.dylib$$1$10.8$10.15$_$s10ToasterKit7VehicleVMa$
25+
// CHECK-MAC: D $ld$previous$/System/Previous/macOS/ToasterKit.dylib$$1$10.8$10.15$_$s10ToasterKit7VehicleVMn$
26+
// CHECK-MAC: D $ld$previous$/System/Previous/macOS/ToasterKit.dylib$$1$10.8$10.15$_$s10ToasterKit7VehicleVN$
27+
28+
// CHECK-NOT: $_$s10ToasterKit7VehicleV32originallyDefinedInCurrentModuleyyF

0 commit comments

Comments
 (0)