@@ -22,6 +22,7 @@ |
|
|
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:🧵:npos) { |
479 |
|
- i = ArgsCppStr.find('\0', i + 1); |
480 |
|
-if (i != std:🧵: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'); |