Skip to content

Commit 1c4a3bc

Browse files
authored
Merge pull request swiftlang#16390 from jrose-apple/4.2-just-autolink-everything
rdar://problem/39338239
2 parents 4e5c624 + 6bec6d8 commit 1c4a3bc

12 files changed

+72
-15
lines changed

lib/AST/Module.cpp

Lines changed: 5 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1214,13 +1214,15 @@ void ModuleDecl::collectLinkLibraries(LinkLibraryCallback callback) {
12141214

12151215
void
12161216
SourceFile::collectLinkLibraries(ModuleDecl::LinkLibraryCallback callback) const {
1217-
1218-
const_cast<SourceFile *>(this)->forAllVisibleModules([&](swift::ModuleDecl::ImportedModule import) {
1217+
forAllImportedModules<false>(getParentModule(), /*thisPath*/{},
1218+
/*includePrivateTopLevelImports*/false,
1219+
[=](ModuleDecl::ImportedModule import) -> bool {
12191220
swift::ModuleDecl *next = import.second;
12201221
if (next->getName() == getParentModule()->getName())
1221-
return;
1222+
return true;
12221223

12231224
next->collectLinkLibraries(callback);
1225+
return true;
12241226
});
12251227
}
12261228

test/ClangImporter/autolinking.swift

Lines changed: 6 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -7,8 +7,9 @@
77
// RUN: %FileCheck %s < %t/with-adapter.ll
88
// RUN: %FileCheck --check-prefix=CHECK-WITH-SWIFT %s < %t/with-adapter.ll
99

10-
// RUN: %target-swift-frontend %s -sdk %S/Inputs -I %S/Inputs/custom-modules -emit-ir -disable-autolink-framework LinkFramework -o %t/with-disabled.ll
11-
// RUN: %FileCheck --check-prefix=CHECK-WITH-DISABLED %s < %t/with-disabled.ll
10+
// RUN: %target-swift-frontend %s -sdk %S/Inputs -I %S/Inputs/custom-modules -emit-ir -disable-autolink-framework LinkFramework -o - > %t/with-disabled.ll
11+
// RUN: %FileCheck -check-prefix CHECK-WITH-DISABLED %s < %t/with-disabled.ll
12+
// RUN: %FileCheck -check-prefix NEGATIVE-WITH-DISABLED %s < %t/with-disabled.ll
1213

1314
// Linux uses a different autolinking mechanism, based on
1415
// swift-autolink-extract. This file tests the Darwin mechanism.
@@ -38,6 +39,6 @@ UsesSubmodule.useSomethingFromSubmodule()
3839

3940
// CHECK-WITH-SWIFT: !{{[0-9]+}} = !{!"-lSwiftAdapter"}
4041

41-
// CHECK-WITH-DISABLED: !{!"-framework", !"Barrel"}
42-
// CHECK-WITH-DISABLED-NOT: !{!"-framework", !"LinkFramework"}
43-
// CHECK-WITH-DISABLED: !{!"-framework", !"Indirect"}
42+
// CHECK-WITH-DISABLED-DAG: !{!"-framework", !"Barrel"}
43+
// CHECK-WITH-DISABLED-DAG: !{!"-framework", !"Indirect"}
44+
// NEGATIVE-WITH-DISABLED-NOT: !"LinkFramework"

test/IRGen/clang_inline.swift

Lines changed: 5 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,12 +1,13 @@
11
// RUN: %empty-directory(%t)
2-
// RUN: %target-swift-frontend -assume-parsing-unqualified-ownership-sil -sdk %S/Inputs -primary-file %s -O -disable-sil-perf-optzns -disable-llvm-optzns -emit-ir | %FileCheck %s
2+
// RUN: %build-irgen-test-overlays
3+
// RUN: %target-swift-frontend -enable-objc-interop -assume-parsing-unqualified-ownership-sil -sdk %S/Inputs -primary-file %s -O -disable-sil-perf-optzns -disable-llvm-optzns -emit-ir -Xcc -fstack-protector -I %t | %FileCheck %s
34

45
// RUN: %empty-directory(%t/Empty.framework/Modules/Empty.swiftmodule)
5-
// RUN: %target-swift-frontend -assume-parsing-unqualified-ownership-sil -emit-module-path %t/Empty.framework/Modules/Empty.swiftmodule/%target-swiftmodule-name %S/../Inputs/empty.swift -module-name Empty
6-
// RUN: %target-swift-frontend -assume-parsing-unqualified-ownership-sil -sdk %S/Inputs -primary-file %s -F %t -DIMPORT_EMPTY -O -disable-sil-perf-optzns -disable-llvm-optzns -emit-ir | %FileCheck %s
6+
// RUN: %target-swift-frontend -assume-parsing-unqualified-ownership-sil -emit-module-path %t/Empty.framework/Modules/Empty.swiftmodule/%target-swiftmodule-name %S/../Inputs/empty.swift -module-name Empty -I %t
7+
// RUN: %target-swift-frontend -assume-parsing-unqualified-ownership-sil -sdk %S/Inputs -primary-file %s -I %t -F %t -DIMPORT_EMPTY -O -disable-sil-perf-optzns -disable-llvm-optzns -emit-ir -Xcc -fstack-protector -enable-objc-interop | %FileCheck %s
78

89
// REQUIRES: CPU=i386 || CPU=x86_64
9-
// XFAIL: linux
10+
// REQUIRES: objc_interop
1011

1112
#if IMPORT_EMPTY
1213
import Empty

test/IRGen/clang_inline_reverse.swift

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,9 +1,11 @@
11
// Same test as clang_inline.swift, but with the order swapped.
22

3-
// RUN: %target-swift-frontend -assume-parsing-unqualified-ownership-sil -sdk %S/Inputs -primary-file %s -emit-ir -module-name clang_inline | %FileCheck %s
3+
// RUN: %empty-directory(%t)
4+
// RUN: %build-irgen-test-overlays
5+
// RUN: %target-swift-frontend -assume-parsing-unqualified-ownership-sil -sdk %S/Inputs -primary-file %s -enable-objc-interop -emit-ir -module-name clang_inline -I %t | %FileCheck %s
46

57
// REQUIRES: CPU=i386 || CPU=x86_64
6-
// XFAIL: linux
8+
// REQUIRES: objc_interop
79

810
import gizmo
911

test/IRGen/objc_block_storage.sil

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,6 @@
1-
// RUN: %target-swift-frontend -assume-parsing-unqualified-ownership-sil -gnone -sdk %S/Inputs %s -emit-ir | %FileCheck %s
1+
// RUN: %empty-directory(%t)
2+
// RUN: %build-irgen-test-overlays
3+
// RUN: %target-swift-frontend -assume-parsing-unqualified-ownership-sil -gnone -enable-objc-interop -sdk %S/Inputs -I %t %s -emit-ir | %FileCheck %s
24

35
// REQUIRES: CPU=x86_64
46
// REQUIRES: objc_interop
Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1 @@
1+
@_exported import autolinking_other2
Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,8 @@
1+
@_exported import autolinking_public
2+
import autolinking_other
3+
import autolinking_indirect
4+
import autolinking_private
5+
6+
public func bfunc(x: Int = afunc(), y: Int = afunc2()) {
7+
cfunc()
8+
}
Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1 @@
1+
public func afunc() -> Int { return 0 }
Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1 @@
1+
public func afunc2() -> Int { return 0 }
Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1 @@
1+
public func cfunc() {}
Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1 @@
1+
// Empty module
Lines changed: 36 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,36 @@
1+
// RUN: %empty-directory(%t)
2+
3+
// RUN: %target-swift-frontend -emit-module %S/Inputs/autolinking_public.swift -emit-module-path %t/autolinking_public.swiftmodule -module-link-name autolinking_public -swift-version 4
4+
// RUN: %target-swift-frontend -emit-module %S/Inputs/autolinking_other.swift -emit-module-path %t/autolinking_other.swiftmodule -module-link-name autolinking_other -swift-version 4
5+
// RUN: %target-swift-frontend -emit-module %S/Inputs/autolinking_private.swift -emit-module-path %t/autolinking_private.swiftmodule -module-link-name autolinking_private -I %t -swift-version 4
6+
// RUN: %target-swift-frontend -emit-module %S/Inputs/autolinking_other2.swift -emit-module-path %t/autolinking_other2.swiftmodule -module-link-name autolinking_other2 -swift-version 4
7+
// RUN: %target-swift-frontend -emit-module %S/Inputs/autolinking_indirect.swift -emit-module-path %t/autolinking_indirect.swiftmodule -module-link-name autolinking_indirect -I %t -swift-version 4
8+
9+
// RUN: %target-swift-frontend -emit-module %S/Inputs/autolinking_module_inferred.swift -emit-module-path %t/autolinking_module_inferred.swiftmodule -module-link-name autolinking_module_inferred -I %t -swift-version 4
10+
// RUN: %target-swift-frontend -emit-ir %s -I %t -swift-version 4 | %FileCheck %s
11+
12+
// Linux uses a different autolinking mechanism, based on
13+
// swift-autolink-extract. This file tests the Darwin mechanism.
14+
// UNSUPPORTED: OS=linux-gnu
15+
// UNSUPPORTED: OS=linux-gnueabihf
16+
// UNSUPPORTED: OS=freebsd
17+
// UNSUPPORTED: OS=linux-androideabi
18+
19+
import autolinking_module_inferred
20+
21+
bfunc()
22+
23+
// CHECK: !llvm.linker.options = !{[[MODULE:![0-9]+]], [[PUBLIC:![0-9]+]], [[SWIFTONONESUPPORT:![0-9]+]], [[SWIFTCORE:![0-9]+]], [[PRIVATE:![0-9]+]], [[OTHER:![0-9]+]], [[INDIRECT:![0-9]+]], [[OTHER2:![0-9]+]], [[OBJC:![0-9]+]]}
24+
25+
// CHECK-DAG: [[SWIFTCORE]] = !{!"-lswiftCore"}
26+
// CHECK-DAG: [[SWIFTONONESUPPORT]] = !{!"-lswiftSwiftOnoneSupport"}
27+
// CHECK-DAG: [[MODULE]] = !{!"-lautolinking_module_inferred"}
28+
// CHECK-DAG: [[PUBLIC]] = !{!"-lautolinking_public"}
29+
// CHECK-DAG: [[OTHER]] = !{!"-lautolinking_other"}
30+
// CHECK-DAG: [[OTHER2]] = !{!"-lautolinking_other2"}
31+
// CHECK-DAG: [[OBJC]] = !{!"-lobjc"}
32+
33+
// We don't actually care about these two. As long as we autolink the libraries
34+
// that get used, we're okay.
35+
// CHECK-DAG: [[PRIVATE]] = !{!"-lautolinking_private"}
36+
// CHECK-DAG: [[INDIRECT]] = !{!"-lautolinking_indirect"}

0 commit comments

Comments
 (0)