Auto merge of #135763 - nikic:llvm-20, r=cuviper · rust-lang/rust@ce36a96 (original) (raw)

Original file line number Diff line number Diff line change
@@ -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');