@@ -126,6 +126,24 @@ static bool shouldRunAsSubcommand(StringRef ExecName,
126
126
return true ;
127
127
}
128
128
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
+
129
147
static int run_driver (StringRef ExecName,
130
148
const ArrayRef<const char *> argv) {
131
149
// Handle integrated tools.
@@ -160,23 +178,16 @@ static int run_driver(StringRef ExecName,
160
178
DiagnosticEngine Diags (SM);
161
179
Diags.addConsumer (PDC);
162
180
163
- std::string newDriverName;
181
+ std::string newDriverName = " swift-driver-new " ;
164
182
if (auto driverNameOp = llvm::sys::Process::GetEnv (" SWIFT_USE_NEW_DRIVER" )) {
165
183
newDriverName = driverNameOp.getValue ();
166
184
}
167
- auto disallowForwarding = llvm::find_if (argv, [](const char * arg) {
168
- return StringRef (arg) == " -disallow-use-new-driver" ;
169
- }) != argv.end ();
170
185
// Forwarding calls to the swift driver if the C++ driver is invoked as `swift`
171
186
// 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)) {
174
188
SmallString<256 > NewDriverPath (llvm::sys::path::parent_path (Path));
175
189
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)) {
180
191
SmallVector<const char *, 256 > subCommandArgs;
181
192
// Rewrite the program argument.
182
193
subCommandArgs.push_back (NewDriverPath.c_str ());
0 commit comments