Skip to content

Commit e1b0cc9

Browse files
committed
[Bridging PCH] Add -enable-bridging-pch option, set default to disabled.
1 parent 52db044 commit e1b0cc9

File tree

6 files changed

+19
-13
lines changed

6 files changed

+19
-13
lines changed

include/swift/Option/Options.td

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -237,6 +237,10 @@ def disable_swift_bridge_attr : Flag<["-"], "disable-swift-bridge-attr">,
237237
Flags<[FrontendOption, HelpHidden]>,
238238
HelpText<"Disable using the swift bridge attribute">;
239239

240+
def enable_bridging_pch : Flag<["-"], "enable-bridging-pch">,
241+
Flags<[HelpHidden]>,
242+
HelpText<"Enable automatic generation of bridging PCH files">;
243+
240244
def disable_bridging_pch : Flag<["-"], "disable-bridging-pch">,
241245
Flags<[HelpHidden]>,
242246
HelpText<"Disable automatic generation of bridging PCH files">;

lib/Driver/Driver.cpp

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1277,7 +1277,9 @@ void Driver::buildActions(const ToolChain &TC,
12771277
// the header into a temporary PCH, and replace the import argument with the
12781278
// PCH in the subsequent frontend jobs.
12791279
JobAction *PCH = nullptr;
1280-
if (!Args.hasArg(options::OPT_disable_bridging_pch)) {
1280+
if (Args.hasFlag(options::OPT_enable_bridging_pch,
1281+
options::OPT_disable_bridging_pch,
1282+
false)) {
12811283
if (Arg *A = Args.getLastArg(options::OPT_import_objc_header)) {
12821284
StringRef Value = A->getValue();
12831285
auto Ty = TC.lookupTypeForExtension(llvm::sys::path::extension(Value));

test/ClangImporter/pch-bridging-header-unittest-ok.swift

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -5,10 +5,10 @@
55
// CHECK: IMPORTED_HEADER{{.*}}Inputs/app-bridging-header-to-pch.h
66

77
// Should get no warnings when we PCH-in the chained unit-test bridging header (thereby suppressing implicit import)
8-
// RUN: %target-swiftc_driver -D UNIT_TESTS -typecheck -Xfrontend -verify -import-objc-header %S/Inputs/chained-unit-test-bridging-header-to-pch.h -I %S/Inputs -I %t %s
8+
// RUN: %target-swiftc_driver -D UNIT_TESTS -typecheck -Xfrontend -verify -enable-bridging-pch -import-objc-header %S/Inputs/chained-unit-test-bridging-header-to-pch.h -I %S/Inputs -I %t %s
99

1010
// Should get no warnings when we PCH-in the app bridging header (thereby suppressing implicit import)
11-
// RUN: %target-swiftc_driver -typecheck -Xfrontend -verify -import-objc-header %S/Inputs/app-bridging-header-to-pch.h -I %t %s
11+
// RUN: %target-swiftc_driver -typecheck -Xfrontend -verify -enable-bridging-pch -import-objc-header %S/Inputs/app-bridging-header-to-pch.h -I %t %s
1212

1313
import App
1414

test/ClangImporter/pch-bridging-header-unittest-warn.swift

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,7 @@
55
// CHECK: IMPORTED_HEADER{{.*}}Inputs/app-bridging-header-to-pch.h
66

77
// Should get a warning when we PCH-in the unit test header and then implicitly import the app header.
8-
// RUN: %target-swiftc_driver -D UNIT_TESTS -typecheck -Xfrontend -verify -import-objc-header %S/Inputs/unit-test-bridging-header-to-pch.h -I %t %s
8+
// RUN: %target-swiftc_driver -D UNIT_TESTS -typecheck -Xfrontend -verify -enable-bridging-pch -import-objc-header %S/Inputs/unit-test-bridging-header-to-pch.h -I %t %s
99

1010
// Should get a warning when skip the unit test header entirely and implicitly import the app header.
1111
// RUN: %target-swiftc_driver -typecheck -Xfrontend -verify -I %t %s

test/ClangImporter/pch-bridging-header.swift

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -5,19 +5,19 @@
55
// RUN: %target-swift-frontend -emit-pch -o %t/sdk-bridging-header.pch %S/Inputs/sdk-bridging-header.h
66
// RUN: %target-swift-frontend -parse -verify %s -import-objc-header %t/sdk-bridging-header.pch
77

8-
// Now test the driver-automated version is inert when disabled
9-
// RUN: env TMPDIR=%t/tmp/ %target-swiftc_driver -disable-bridging-pch -parse -save-temps %s -import-objc-header %S/Inputs/sdk-bridging-header.h
8+
// Now test the driver-automated version is inert when (default) disabled
9+
// RUN: env TMPDIR=%t/tmp/ %target-swiftc_driver -parse -save-temps %s -import-objc-header %S/Inputs/sdk-bridging-header.h
1010
// RUN: not ls %t/tmp/*.pch >/dev/null 2>&1
1111

12-
// Test the driver-automated version works when not-disabled
13-
// RUN: env TMPDIR=%t/tmp/ %target-swiftc_driver -parse -save-temps %s -import-objc-header %S/Inputs/sdk-bridging-header.h
12+
// Test the driver-automated version works when enabled
13+
// RUN: env TMPDIR=%t/tmp/ %target-swiftc_driver -parse -save-temps %s -enable-bridging-pch -import-objc-header %S/Inputs/sdk-bridging-header.h
1414
// RUN: ls %t/tmp/*.pch >/dev/null 2>&1
1515
// RUN: llvm-objdump -raw-clang-ast %t/tmp/*.pch | llvm-bcanalyzer -dump | %FileCheck %s
1616
// CHECK: ORIGINAL_FILE{{.*}}Inputs/sdk-bridging-header.h
1717

1818
// Test the driver-automated version deletes its PCH file when done
1919
// RUN: rm %t/tmp/*.pch
20-
// RUN: env TMPDIR=%t/tmp/ %target-swiftc_driver -parse %s -import-objc-header %S/Inputs/sdk-bridging-header.h
20+
// RUN: env TMPDIR=%t/tmp/ %target-swiftc_driver -parse %s -enable-bridging-pch -import-objc-header %S/Inputs/sdk-bridging-header.h
2121
// RUN: not ls %t/tmp/*.pch >/dev/null 2>&1
2222

2323
import Foundation

test/Driver/bridging-pch.swift

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,17 +1,17 @@
1-
// RUN: %swiftc_driver -typecheck -driver-print-actions -import-objc-header %S/Inputs/bridging-header.h %s 2>&1 | %FileCheck %s -check-prefix=YESPCHACT
1+
// RUN: %swiftc_driver -typecheck -enable-bridging-pch -driver-print-actions -import-objc-header %S/Inputs/bridging-header.h %s 2>&1 | %FileCheck %s -check-prefix=YESPCHACT
22
// YESPCHACT: 0: input, "{{.*}}Inputs/bridging-header.h", objc-header
33
// YESPCHACT: 1: generate-pch, {0}, pch
44
// YESPCHACT: 2: input, "{{.*}}bridging-pch.swift", swift
55
// YESPCHACT: 3: compile, {2, 1}, none
66

7-
// RUN: %swiftc_driver -typecheck -disable-bridging-pch -driver-print-actions -import-objc-header %S/Inputs/bridging-header.h %s 2>&1 | %FileCheck %s -check-prefix=NOPCHACT
7+
// RUN: %swiftc_driver -typecheck -driver-print-actions -import-objc-header %S/Inputs/bridging-header.h %s 2>&1 | %FileCheck %s -check-prefix=NOPCHACT
88
// NOPCHACT: 0: input, "{{.*}}bridging-pch.swift", swift
99
// NOPCHACT: 1: compile, {0}, none
1010

11-
// RUN: %swiftc_driver -typecheck -driver-print-jobs -import-objc-header %S/Inputs/bridging-header.h %s 2>&1 | %FileCheck %s -check-prefix=YESPCHJOB
11+
// RUN: %swiftc_driver -typecheck -enable-bridging-pch -driver-print-jobs -import-objc-header %S/Inputs/bridging-header.h %s 2>&1 | %FileCheck %s -check-prefix=YESPCHJOB
1212
// YESPCHJOB: {{.*}}swift -frontend {{.*}} -emit-pch -o {{.*}}bridging-header-{{.*}}.pch
1313
// YESPCHJOB: {{.*}}swift -frontend {{.*}} -import-objc-header {{.*}}bridging-header-{{.*}}.pch
1414

15-
// RUN: %swiftc_driver -typecheck -disable-bridging-pch -driver-print-jobs -import-objc-header %S/Inputs/bridging-header.h %s 2>&1 | %FileCheck %s -check-prefix=NOPCHJOB
15+
// RUN: %swiftc_driver -typecheck -driver-print-jobs -import-objc-header %S/Inputs/bridging-header.h %s 2>&1 | %FileCheck %s -check-prefix=NOPCHJOB
1616
// NOPCHJOB: {{.*}}swift -frontend {{.*}} -import-objc-header {{.*}}Inputs/bridging-header.h
1717

0 commit comments

Comments
 (0)