diff --git a/lib/Driver/FrontendUtil.cpp b/lib/Driver/FrontendUtil.cpp index 3c0cac6163d4a..7d796ddfc722c 100644 --- a/lib/Driver/FrontendUtil.cpp +++ b/lib/Driver/FrontendUtil.cpp @@ -19,6 +19,8 @@ #include "swift/Driver/Job.h" #include "swift/Driver/ToolChain.h" #include "llvm/Option/ArgList.h" +#include "llvm/Support/CommandLine.h" +#include "llvm/Support/StringSaver.h" using namespace swift; using namespace swift::driver; @@ -46,6 +48,16 @@ bool swift::driver::getSingleFrontendInvocationFromDriverArguments( Args.push_back("-driver-filelist-threshold"); Args.push_back(neverThreshold.c_str()); + // Expand any file list args. + llvm::BumpPtrAllocator Allocator; + llvm::StringSaver Saver(Allocator); + llvm::cl::ExpandResponseFiles( + Saver, + llvm::Triple(llvm::sys::getProcessTriple()).isOSWindows() + ? llvm::cl::TokenizeWindowsCommandLine + : llvm::cl::TokenizeGNUCommandLine, + Args); + // Force the driver into batch mode by specifying "swiftc" as the name. Driver TheDriver("swiftc", "swiftc", Args, Diags); diff --git a/test/SourceKit/Misc/handle-filelist-driver-args.swift b/test/SourceKit/Misc/handle-filelist-driver-args.swift new file mode 100644 index 0000000000000..81617e8483b99 --- /dev/null +++ b/test/SourceKit/Misc/handle-filelist-driver-args.swift @@ -0,0 +1,8 @@ +let x = 10 +x.littleEndian + +// RUN: %empty-directory(%t) +// RUN: echo %s > %t/tmp.SwiftFileList +// RUN: %target-swiftc_driver -typecheck @%t/tmp.SwiftFileList +// RUN: %sourcekitd-test -req=complete -pos=2:3 %s -- @%t/tmp.SwiftFileList | %FileCheck %s -check-prefix=COMPLETE +// COMPLETE: littleEndian