Skip to content

Commit 8c308d0

Browse files
authored
Merge pull request #42170 from rxwei/disable-string-processing-import-flag
Add frontend flag `-disable-implicit-string-processing-module-import`.
2 parents d4ea32c + 065ac52 commit 8c308d0

File tree

13 files changed

+64
-3
lines changed

13 files changed

+64
-3
lines changed

SwiftCompilerSources/Package.swift

Lines changed: 9 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -28,9 +28,16 @@ let package = Package(
2828
.target(
2929
name: "_RegexParser",
3030
dependencies: [],
31-
swiftSettings: [SwiftSetting.unsafeFlags([
31+
swiftSettings: [
32+
.unsafeFlags([
3233
"-I", "../include/swift",
33-
"-cross-module-optimization"
34+
"-cross-module-optimization",
35+
]),
36+
// Workaround until `_RegexParser` is imported as implementation-only
37+
// by `_StringProcessing`.
38+
.unsafeFlags([
39+
"-Xfrontend",
40+
"-disable-implicit-string-processing-module-import"
3441
])]),
3542
.target(
3643
name: "Optimizer",

include/swift/Basic/LangOptions.h

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -363,6 +363,9 @@ namespace swift {
363363
bool DisableImplicitConcurrencyModuleImport =
364364
!SWIFT_IMPLICIT_CONCURRENCY_IMPORT;
365365

366+
/// Disable the implicit import of the _StringProcessing module.
367+
bool DisableImplicitStringProcessingModuleImport = false;
368+
366369
/// Should we check the target OSs of serialized modules to see that they're
367370
/// new enough?
368371
bool EnableTargetOSChecking = true;

include/swift/Option/FrontendOptions.td

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -422,6 +422,10 @@ def disable_implicit_distributed_module_import : Flag<["-"],
422422
"disable-implicit-distributed-module-import">,
423423
HelpText<"Disable the implicit import of the Distributed module.">;
424424

425+
def disable_implicit_string_processing_module_import : Flag<["-"],
426+
"disable-implicit-string-processing-module-import">,
427+
HelpText<"Disable the implicit import of the _StringProcessing module.">;
428+
425429
def disable_arc_opts : Flag<["-"], "disable-arc-opts">,
426430
HelpText<"Don't run SIL ARC optimization passes.">;
427431
def disable_ossa_opts : Flag<["-"], "disable-ossa-opts">,

lib/Frontend/CompilerInvocation.cpp

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -485,6 +485,9 @@ static bool ParseLangArgs(LangOptions &Opts, ArgList &Args,
485485
Opts.DisableImplicitConcurrencyModuleImport |=
486486
Args.hasArg(OPT_disable_implicit_concurrency_module_import);
487487

488+
Opts.DisableImplicitStringProcessingModuleImport |=
489+
Args.hasArg(OPT_disable_implicit_string_processing_module_import);
490+
488491
if (Args.hasArg(OPT_enable_experimental_async_top_level))
489492
Diags.diagnose(SourceLoc(), diag::warn_flag_deprecated,
490493
"-enable-experimental-async-top-level");

lib/Frontend/Frontend.cpp

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -793,7 +793,8 @@ bool CompilerInvocation::shouldImportSwiftConcurrency() const {
793793
}
794794

795795
bool CompilerInvocation::shouldImportSwiftStringProcessing() const {
796-
return getLangOptions().EnableExperimentalStringProcessing;
796+
return getLangOptions().EnableExperimentalStringProcessing &&
797+
!getLangOptions().DisableImplicitStringProcessingModuleImport;
797798
}
798799

799800
/// Implicitly import the SwiftOnoneSupport module in non-optimized

stdlib/public/RegexParser/CMakeLists.txt

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -38,6 +38,9 @@ add_swift_target_library(swift_RegexParser ${SWIFT_STDLIB_LIBRARY_BUILD_TYPES} I
3838
-Dswift_RegexParser_EXPORTS
3939
SWIFT_COMPILE_FLAGS
4040
${SWIFT_STANDARD_LIBRARY_SWIFT_FLAGS}
41+
# Workaround until `_RegexParser` is imported as implementation-only
42+
# by `_StringProcessing`.
43+
-Xfrontend -disable-implicit-string-processing-module-import
4144
LINK_FLAGS "${SWIFT_RUNTIME_SWIFT_LINK_FLAGS}"
4245

4346
INSTALL_IN_COMPONENT stdlib
Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,7 @@
1+
// RUN: %target-typecheck-verify-swift -enable-experimental-string-processing -disable-implicit-string-processing-module-import
2+
// REQUIRES: swift_in_compiler
3+
4+
// expected-error @+1 {{missing 'Regex' declaration, probably because the '_StringProcessing' module was not imported properly}}
5+
let r0 = #/./#
6+
// expected-error @+1 {{cannot find type 'Regex' in scope}}
7+
let _: Regex<Substring> = r0

tools/SourceKit/tools/complete-test/complete-test.cpp

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -69,6 +69,7 @@ struct TestOptions {
6969
bool rawOutput = false;
7070
bool structureOutput = false;
7171
bool disableImplicitConcurrencyModuleImport = false;
72+
bool disableImplicitStringProcessingModuleImport = false;
7273
ArrayRef<const char *> compilerArgs;
7374
};
7475
} // end anonymous namespace
@@ -257,6 +258,8 @@ static bool parseOptions(ArrayRef<const char *> args, TestOptions &options,
257258
options.moduleCachePath = value.str();
258259
} else if (opt == "disable-implicit-concurrency-module-import") {
259260
options.disableImplicitConcurrencyModuleImport = true;
261+
} else if (opt == "disable-implicit-string-processing-module-import") {
262+
options.disableImplicitStringProcessingModuleImport = true;
260263
}
261264
}
262265

@@ -693,6 +696,12 @@ static bool codeCompleteRequest(sourcekitd_uid_t requestUID, const char *name,
693696
sourcekitd_request_array_set_string(args, SOURCEKITD_ARRAY_APPEND,
694697
"-disable-implicit-concurrency-module-import");
695698
}
699+
if (options.disableImplicitStringProcessingModuleImport) {
700+
sourcekitd_request_array_set_string(args, SOURCEKITD_ARRAY_APPEND,
701+
"-Xfrontend");
702+
sourcekitd_request_array_set_string(args, SOURCEKITD_ARRAY_APPEND,
703+
"-disable-implicit-string-processing-module-import");
704+
}
696705
}
697706
sourcekitd_request_dictionary_set_value(request, KeyCompilerArgs, args);
698707
sourcekitd_request_release(args);

tools/SourceKit/tools/sourcekitd-test/Options.td

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -109,6 +109,10 @@ def disable_implicit_concurrency_module_import : Flag<["-"],
109109
"disable-implicit-concurrency-module-import">,
110110
HelpText<"Disable implicit import of the _Concurrency module">;
111111

112+
def disable_implicit_string_processing_module_import : Flag<["-"],
113+
"disable-implicit-string-processing-module-import">,
114+
HelpText<"Disable implicit import of the _StringProcessing module">;
115+
112116
def end_pos : Separate<["-"], "end-pos">, HelpText<"line:col">;
113117
def end_pos_EQ : Joined<["-"], "end-pos=">, Alias<end_pos>;
114118

tools/SourceKit/tools/sourcekitd-test/TestOptions.cpp

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -444,6 +444,10 @@ bool TestOptions::parseArgs(llvm::ArrayRef<const char *> Args) {
444444
DisableImplicitConcurrencyModuleImport = true;
445445
break;
446446

447+
case OPT_disable_implicit_string_processing_module_import:
448+
DisableImplicitStringProcessingModuleImport = true;
449+
break;
450+
447451
case OPT_UNKNOWN:
448452
llvm::errs() << "error: unknown argument: "
449453
<< InputArg->getAsString(ParsedArgs) << '\n'

tools/SourceKit/tools/sourcekitd-test/TestOptions.h

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -126,6 +126,7 @@ struct TestOptions {
126126
bool timeRequest = false;
127127
bool measureInstructions = false;
128128
bool DisableImplicitConcurrencyModuleImport = false;
129+
bool DisableImplicitStringProcessingModuleImport = false;
129130
llvm::Optional<unsigned> CompletionCheckDependencyInterval;
130131
unsigned repeatRequest = 1;
131132
struct VFSFile {

tools/SourceKit/tools/sourcekitd-test/sourcekitd-test.cpp

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1145,6 +1145,13 @@ static int handleTestInvocation(TestOptions Opts, TestOptions &InitOpts) {
11451145
sourcekitd_request_array_set_string(Args, SOURCEKITD_ARRAY_APPEND,
11461146
"-disable-implicit-concurrency-module-import");
11471147
}
1148+
if (Opts.DisableImplicitStringProcessingModuleImport &&
1149+
!compilerArgsAreClang) {
1150+
sourcekitd_request_array_set_string(Args, SOURCEKITD_ARRAY_APPEND,
1151+
"-Xfrontend");
1152+
sourcekitd_request_array_set_string(Args, SOURCEKITD_ARRAY_APPEND,
1153+
"-disable-implicit-string-processing-module-import");
1154+
}
11481155

11491156
for (auto Arg : Opts.CompilerArgs)
11501157
sourcekitd_request_array_set_string(Args, SOURCEKITD_ARRAY_APPEND, Arg);

tools/swift-ide-test/swift-ide-test.cpp

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -795,6 +795,11 @@ DisableImplicitConcurrencyImport("disable-implicit-concurrency-module-import",
795795
llvm::cl::desc("Disable implicit import of _Concurrency module"),
796796
llvm::cl::init(false));
797797

798+
static llvm::cl::opt<bool>
799+
DisableImplicitStringProcessingImport("disable-implicit-string-processing-module-import",
800+
llvm::cl::desc("Disable implicit import of _StringProcessing module"),
801+
llvm::cl::init(false));
802+
798803
static llvm::cl::opt<bool> EnableExperimentalNamedOpaqueTypes(
799804
"enable-experimental-named-opaque-types",
800805
llvm::cl::desc("Enable experimental support for named opaque result types"),
@@ -4276,6 +4281,9 @@ int main(int argc, char *argv[]) {
42764281
if (options::DisableImplicitConcurrencyImport) {
42774282
InitInvok.getLangOptions().DisableImplicitConcurrencyModuleImport = true;
42784283
}
4284+
if (options::DisableImplicitStringProcessingImport) {
4285+
InitInvok.getLangOptions().DisableImplicitStringProcessingModuleImport = true;
4286+
}
42794287
if (options::EnableExperimentalNamedOpaqueTypes) {
42804288
InitInvok.getLangOptions().EnableExperimentalNamedOpaqueTypes = true;
42814289
}

0 commit comments

Comments
 (0)