diff options
| author | Andrew Kelley <andrew@ziglang.org> | 2023-08-10 17:33:51 -0700 |
|---|---|---|
| committer | Andrew Kelley <andrew@ziglang.org> | 2023-09-19 09:37:30 -0700 |
| commit | d123c70d5f18110420cd208a8a8891e41ecc2a94 (patch) | |
| tree | 529dc4c4acac804ec6a42985539274be4e4a6c5d /src/zig_clang_driver.cpp | |
| parent | 68a338cc1037531b4ba548a4c181afeb957fab9a (diff) | |
| download | zig-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.cpp | 25 |
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}); +} |
