Index: COFF/Config.h =================================================================== --- COFF/Config.h +++ COFF/Config.h @@ -105,6 +105,8 @@ std::map DLLOrder; SymbolBody *DelayLoadHelper = nullptr; + bool SaveTemps = false; + // Used for SafeSEH. Symbol *SEHTable = nullptr; Symbol *SEHCount = nullptr; Index: COFF/Driver.cpp =================================================================== --- COFF/Driver.cpp +++ COFF/Driver.cpp @@ -616,6 +616,10 @@ fatal("/opt:lldltopartitions: invalid partition count: " + N); continue; } + if (S == "lldsavetemps") { + Config->SaveTemps = true; + continue; + } if (S != "ref" && S != "lbr" && S != "nolbr") fatal("/opt: unknown option: " + S); } Index: COFF/LTO.cpp =================================================================== --- COFF/LTO.cpp +++ COFF/LTO.cpp @@ -61,6 +61,9 @@ Conf.DisableVerify = true; Conf.DiagHandler = diagnosticHandler; Conf.OptLevel = Config->LTOOptLevel; + if (Config->SaveTemps) + checkError(Conf.addSaveTemps(std::string(Config->OutputFile) + ".", + /*UseInputModulePath*/ true)); lto::ThinBackend Backend; if (Config->LTOJobs != -1u) Backend = lto::createInProcessThinBackend(Config->LTOJobs);