@@ -126,6 +126,24 @@ static bool shouldRunAsSubcommand(StringRef ExecName,
126126 return true ;
127127}
128128
129+ static bool shouldDisallowNewDriver (StringRef ExecName,
130+ const ArrayRef<const char *> argv) {
131+ // We are not invoking the driver, so don't forward.
132+ if (ExecName != " swift" && ExecName != " swiftc" ) {
133+ return true ;
134+ }
135+ // If user specified using the old driver, don't forward.
136+ if (llvm::find_if (argv, [](const char * arg) {
137+ return StringRef (arg) == " -disallow-use-new-driver" ;
138+ }) != argv.end ()) {
139+ return true ;
140+ }
141+ if (llvm::sys::Process::GetEnv (" SWIFT_USE_OLD_DRIVER" ).hasValue ()) {
142+ return true ;
143+ }
144+ return false ;
145+ }
146+
129147static int run_driver (StringRef ExecName,
130148 const ArrayRef<const char *> argv) {
131149 // Handle integrated tools.
@@ -160,23 +178,16 @@ static int run_driver(StringRef ExecName,
160178 DiagnosticEngine Diags (SM);
161179 Diags.addConsumer (PDC);
162180
163- std::string newDriverName;
181+ std::string newDriverName = " swift-driver-new " ;
164182 if (auto driverNameOp = llvm::sys::Process::GetEnv (" SWIFT_USE_NEW_DRIVER" )) {
165183 newDriverName = driverNameOp.getValue ();
166184 }
167- auto disallowForwarding = llvm::find_if (argv, [](const char * arg) {
168- return StringRef (arg) == " -disallow-use-new-driver" ;
169- }) != argv.end ();
170185 // Forwarding calls to the swift driver if the C++ driver is invoked as `swift`
171186 // or `swiftc`, and an environment variable SWIFT_USE_NEW_DRIVER is defined.
172- if (!newDriverName.empty () && !disallowForwarding &&
173- (ExecName == " swift" || ExecName == " swiftc" )) {
187+ if (!shouldDisallowNewDriver (ExecName, argv)) {
174188 SmallString<256 > NewDriverPath (llvm::sys::path::parent_path (Path));
175189 llvm::sys::path::append (NewDriverPath, newDriverName);
176- if (!llvm::sys::fs::exists (NewDriverPath)) {
177- Diags.diagnose (SourceLoc (), diag::remark_forwarding_driver_not_there,
178- NewDriverPath);
179- } else {
190+ if (llvm::sys::fs::exists (NewDriverPath)) {
180191 SmallVector<const char *, 256 > subCommandArgs;
181192 // Rewrite the program argument.
182193 subCommandArgs.push_back (NewDriverPath.c_str ());
0 commit comments