Skip to content

Commit 310c56a

Browse files
authored
Merge pull request #28571 from nkcsgexi/auto-reexport
test: add backward ABI compatibility test case for moving symbols using @_originallyDefinedIn
2 parents cafa338 + ba95536 commit 310c56a

File tree

4 files changed

+79
-0
lines changed

4 files changed

+79
-0
lines changed
Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,5 @@
1+
@_exported import LowLevel
2+
3+
public func printMessage() {
4+
printMessageMoved()
5+
}
Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,12 @@
1+
public func printMessageMoved() {
2+
print("Hello from HighLevel")
3+
}
4+
public func printMessage() {
5+
printMessageMoved()
6+
}
7+
8+
public struct Entity {
9+
public let value = "HighLevel"
10+
public init() {}
11+
public func location() -> String { return "Entity from " + value }
12+
}
Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,11 @@
1+
@_originallyDefinedIn(module: "HighLevel", OSX 10.10)
2+
public func printMessageMoved() {
3+
print("Hello from LowLevel")
4+
}
5+
6+
@_originallyDefinedIn(module: "HighLevel", OSX 10.10)
7+
public struct Entity {
8+
public let value = "LowLevel"
9+
public init() {}
10+
public func location() -> String { return "Entity from " + value }
11+
}
Lines changed: 51 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,51 @@
1+
// REQUIRES: objc_interop
2+
//
3+
// RUN: %empty-directory(%t)
4+
//
5+
// -----------------------------------------------------------------------------
6+
// --- Prepare SDK (.swiftmodule).
7+
// RUN: %empty-directory(%t/SDK)
8+
//
9+
10+
// --- Build original high level framework.
11+
// RUN: mkdir -p %t/SDK/Frameworks/HighLevel.framework/Modules/HighLevel.swiftmodule
12+
// RUN: %target-build-swift-dylib(%t/SDK/Frameworks/HighLevel.framework/HighLevel) -module-name HighLevel -emit-module \
13+
// RUN: -emit-module-path %t/SDK/Frameworks/HighLevel.framework/Modules/HighLevel.swiftmodule/%module-target-triple.swiftmodule \
14+
// RUN: %S/Inputs/SymbolMove/HighLevelOriginal.swift -Xlinker -install_name -Xlinker @rpath/HighLevel.framework/HighLevel
15+
16+
// --- Build an executable using the original high level framework
17+
// RUN: %target-build-swift -emit-executable %s -g -o %t/HighlevelRunner -F %t/SDK/Frameworks/ -framework HighLevel \
18+
// RUN: -Xlinker -rpath -Xlinker %t/SDK/Frameworks
19+
20+
// --- Run the executable
21+
// RUN: %t/HighlevelRunner | %FileCheck %s -check-prefix=BEFORE_MOVE
22+
23+
// --- Build low level framework.
24+
// RUN: mkdir -p %t/SDK/Frameworks/LowLevel.framework/Modules/LowLevel.swiftmodule
25+
// RUN: %target-build-swift-dylib(%t/SDK/Frameworks/LowLevel.framework/LowLevel) -module-name LowLevel -emit-module \
26+
// RUN: -emit-module-path %t/SDK/Frameworks/LowLevel.framework/Modules/LowLevel.swiftmodule/%module-target-triple.swiftmodule \
27+
// RUN: %S/Inputs/SymbolMove/LowLevel.swift -Xlinker -install_name -Xlinker @rpath/LowLevel.framework/LowLevel
28+
29+
// --- Build high level framework.
30+
// RUN: mkdir -p %t/SDK/Frameworks/HighLevel.framework/Modules/HighLevel.swiftmodule
31+
// RUN: %target-build-swift-dylib(%t/SDK/Frameworks/HighLevel.framework/HighLevel) -module-name HighLevel -emit-module \
32+
// RUN: -emit-module-path %t/SDK/Frameworks/HighLevel.framework/Modules/HighLevel.swiftmodule/%module-target-triple.swiftmodule \
33+
// RUN: %S/Inputs/SymbolMove/HighLevel.swift -F %t/SDK/Frameworks -Xlinker -reexport_framework -Xlinker LowLevel
34+
35+
// --- Run the executable
36+
// RUN: %t/HighlevelRunner | %FileCheck %s -check-prefix=AFTER_MOVE
37+
38+
import HighLevel
39+
40+
printMessage()
41+
printMessageMoved()
42+
43+
// BEFORE_MOVE: Hello from HighLevel
44+
// BEFORE_MOVE: Hello from HighLevel
45+
// AFTER_MOVE: Hello from LowLevel
46+
// AFTER_MOVE: Hello from LowLevel
47+
48+
let e = Entity()
49+
print(e.location())
50+
// BEFORE_MOVE: Entity from HighLevel
51+
// AFTER_MOVE: Entity from LowLevel

0 commit comments

Comments
 (0)