|
22 | 22 | #include "llvm/Passes/StandardInstrumentations.h"
|
23 | 23 | #include "llvm/Support/CBindingWrapping.h"
|
24 | 24 | #include "llvm/Support/FileSystem.h"
|
| 25 | +#include "llvm/Support/Program.h" |
25 | 26 | #include "llvm/Support/TimeProfiler.h"
|
26 | 27 | #include "llvm/Support/VirtualFileSystem.h"
|
27 | 28 | #include "llvm/Target/TargetMachine.h"
|
@@ -472,16 +473,19 @@ extern "C" LLVMTargetMachineRef LLVMRustCreateTargetMachine(
|
472 | 473 | assert(ArgsCstrBuff[ArgsCstrBuffLen - 1] == '\0');
|
473 | 474 | auto Arg0 = std::string(ArgsCstrBuff);
|
474 | 475 | buffer_offset = Arg0.size() + 1;
|
475 |
| - auto ArgsCppStr = std::string(ArgsCstrBuff + buffer_offset, |
476 |
| - ArgsCstrBuffLen - buffer_offset); |
477 |
| - auto i = 0; |
478 |
| - while (i != std::string::npos) { |
479 |
| - i = ArgsCppStr.find('\0', i + 1); |
480 |
| - if (i != std::string::npos) |
481 |
| - ArgsCppStr.replace(i, 1, " "); |
| 476 | + |
| 477 | + std::string CommandlineArgs; |
| 478 | + raw_string_ostream OS(CommandlineArgs); |
| 479 | + ListSeparator LS(" "); |
| 480 | + for (StringRef Arg : split(StringRef(ArgsCstrBuff + buffer_offset, |
| 481 | + ArgsCstrBuffLen - buffer_offset), |
| 482 | + '\0')) { |
| 483 | + OS << LS; |
| 484 | + sys::printArg(OS, Arg, /*Quote=*/true); |
482 | 485 | }
|
| 486 | + OS.flush(); |
483 | 487 | Options.MCOptions.Argv0 = Arg0;
|
484 |
| - Options.MCOptions.CommandlineArgs = ArgsCppStr; |
| 488 | + Options.MCOptions.CommandlineArgs = CommandlineArgs; |
485 | 489 | #else
|
486 | 490 | int buffer_offset = 0;
|
487 | 491 | assert(ArgsCstrBuff[ArgsCstrBuffLen - 1] == '\0');
|
|
0 commit comments