aboutsummaryrefslogtreecommitdiff
path: root/src/zig_clang_driver.cpp
diff options
context:
space:
mode:
authorAndrew Kelley <andrew@ziglang.org>2023-08-10 17:33:51 -0700
committerAndrew Kelley <andrew@ziglang.org>2023-09-19 09:37:30 -0700
commitd123c70d5f18110420cd208a8a8891e41ecc2a94 (patch)
tree529dc4c4acac804ec6a42985539274be4e4a6c5d /src/zig_clang_driver.cpp
parent68a338cc1037531b4ba548a4c181afeb957fab9a (diff)
downloadzig-d123c70d5f18110420cd208a8a8891e41ecc2a94.tar.gz
zig-d123c70d5f18110420cd208a8a8891e41ecc2a94.zip
clang patch: update main function
Diffstat (limited to 'src/zig_clang_driver.cpp')
-rw-r--r--src/zig_clang_driver.cpp25
1 files changed, 16 insertions, 9 deletions
diff --git a/src/zig_clang_driver.cpp b/src/zig_clang_driver.cpp
index 471d0181ff..604d38acf2 100644
--- a/src/zig_clang_driver.cpp
+++ b/src/zig_clang_driver.cpp
@@ -210,9 +210,6 @@ extern int cc1_main(ArrayRef<const char *> Argv, const char *Argv0,
void *MainAddr);
extern int cc1as_main(ArrayRef<const char *> Argv, const char *Argv0,
void *MainAddr);
-extern int cc1gen_reproducer_main(ArrayRef<const char *> Argv,
- const char *Argv0, void *MainAddr,
- const llvm::ToolContext &);
static void insertTargetAndModeArgs(const ParsedClangName &NameParts,
SmallVectorImpl<const char *> &ArgVector,
@@ -366,22 +363,27 @@ static int ExecuteCC1Tool(SmallVectorImpl<const char *> &ArgV,
return cc1_main(ArrayRef(ArgV).slice(1), ArgV[0], GetExecutablePathVP);
if (Tool == "-cc1as")
return cc1as_main(ArrayRef(ArgV).slice(2), ArgV[0], GetExecutablePathVP);
- if (Tool == "-cc1gen-reproducer")
- return cc1gen_reproducer_main(ArrayRef(ArgV).slice(2), ArgV[0],
- GetExecutablePathVP, ToolContext);
// Reject unknown tools.
llvm::errs() << "error: unknown integrated tool '" << Tool << "'. "
<< "Valid tools include '-cc1' and '-cc1as'.\n";
return 1;
}
-int clang_main(int Argc, char **Argv, const llvm::ToolContext &ToolContext) {
+static int clang_main(int Argc, char **Argv, const llvm::ToolContext &ToolContext) {
noteBottomOfStack();
- llvm::InitLLVM X(Argc, Argv);
+ // ZIG PATCH: On Windows, InitLLVM calls GetCommandLineW(),
+ // and overwrites the args. We don't want it to do that,
+ // and we also don't need the signal handlers it installs
+ // (we have our own already), so we just use llvm_shutdown_obj
+ // instead.
+ // llvm::InitLLVM X(Argc, Argv);
+ llvm::llvm_shutdown_obj X;
+
llvm::setBugReportMsg("PLEASE submit a bug report to " BUG_REPORT_URL
" and include the crash backtrace, preprocessed "
"source, and associated run script.\n");
- SmallVector<const char *, 256> Args(Argv, Argv + Argc);
+ size_t argv_offset = (strcmp(Argv[1], "-cc1") == 0 || strcmp(Argv[1], "-cc1as") == 0) ? 0 : 1;
+ SmallVector<const char *, 256> Args(Argv + argv_offset, Argv + Argc);
if (llvm::sys::Process::FixupStandardFileDescriptors())
return 1;
@@ -603,3 +605,8 @@ int clang_main(int Argc, char **Argv, const llvm::ToolContext &ToolContext) {
// failing command.
return Res;
}
+
+extern "C" int ZigClang_main(int, char **);
+int ZigClang_main(int argc, char **argv) {
+ return clang_main(argc, argv, {argv[0], nullptr, false});
+}