r346837 - [Clang] - Add '-gsplit-dwarf[=split, =single]' version for '-gsplit-dwarf' option.
Author: grimar Date: Wed Nov 14 01:22:16 2018 New Revision: 346837 URL: http://llvm.org/viewvc/llvm-project?rev=346837&view=rev Log: [Clang] - Add '-gsplit-dwarf[=split,=single]' version for '-gsplit-dwarf' option. The DWARF5 specification says(Appendix F.1): "The sections that do not require relocation, however, can be written to the relocatable object (.o) file but ignored by the linker or they can be written to a separate DWARF object (.dwo) file that need not be accessed by the linker." The first part describes a single file split DWARF feature and there is no way to trigger this behavior atm. Fortunately, no many changes are required to keep *.dwo sections in a .o, the patch does that. Differential revision: https://reviews.llvm.org/D52296 Added: cfe/trunk/test/CodeGen/split-debug-single-file.c Modified: cfe/trunk/include/clang/Driver/CC1Options.td cfe/trunk/include/clang/Driver/Options.td cfe/trunk/include/clang/Frontend/CodeGenOptions.def cfe/trunk/include/clang/Frontend/CodeGenOptions.h cfe/trunk/lib/CodeGen/BackendUtil.cpp cfe/trunk/lib/CodeGen/CGDebugInfo.cpp cfe/trunk/lib/Driver/ToolChains/Clang.cpp cfe/trunk/lib/Driver/ToolChains/CommonArgs.cpp cfe/trunk/lib/Driver/ToolChains/CommonArgs.h cfe/trunk/lib/Driver/ToolChains/Gnu.cpp cfe/trunk/lib/Driver/ToolChains/MinGW.cpp cfe/trunk/lib/Frontend/CompilerInvocation.cpp cfe/trunk/test/Driver/split-debug.c cfe/trunk/test/Driver/split-debug.s Modified: cfe/trunk/include/clang/Driver/CC1Options.td URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/include/clang/Driver/CC1Options.td?rev=346837&r1=346836&r2=346837&view=diff == --- cfe/trunk/include/clang/Driver/CC1Options.td (original) +++ cfe/trunk/include/clang/Driver/CC1Options.td Wed Nov 14 01:22:16 2018 @@ -649,7 +649,9 @@ def fblocks_runtime_optional : Flag<["-" def fexternc_nounwind : Flag<["-"], "fexternc-nounwind">, HelpText<"Assume all functions with C linkage do not unwind">; def enable_split_dwarf : Flag<["-"], "enable-split-dwarf">, - HelpText<"Use split dwarf/Fission">; + HelpText<"Use DWARF fission in 'split' mode">; +def enable_split_dwarf_EQ : Joined<["-"], "enable-split-dwarf=">, + HelpText<"Set DWARF fission mode to either 'split' or 'single'">, Values<"split,single">; def fno_wchar : Flag<["-"], "fno-wchar">, HelpText<"Disable C++ builtin type wchar_t">; def fconstant_string_class : Separate<["-"], "fconstant-string-class">, Modified: cfe/trunk/include/clang/Driver/Options.td URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/include/clang/Driver/Options.td?rev=346837&r1=346836&r2=346837&view=diff == --- cfe/trunk/include/clang/Driver/Options.td (original) +++ cfe/trunk/include/clang/Driver/Options.td Wed Nov 14 01:22:16 2018 @@ -1840,6 +1840,9 @@ def gno_strict_dwarf : Flag<["-"], "gno- def gcolumn_info : Flag<["-"], "gcolumn-info">, Group, Flags<[CoreOption]>; def gno_column_info : Flag<["-"], "gno-column-info">, Group, Flags<[CoreOption]>; def gsplit_dwarf : Flag<["-"], "gsplit-dwarf">, Group; +def gsplit_dwarf_EQ : Joined<["-"], "gsplit-dwarf=">, Group, + HelpText<"Set DWARF fission mode to either 'split' or 'single'">, + Values<"split,single">; def ggnu_pubnames : Flag<["-"], "ggnu-pubnames">, Group, Flags<[CC1Option]>; def gno_gnu_pubnames : Flag<["-"], "gno-gnu-pubnames">, Group, Flags<[CC1Option]>; def gpubnames : Flag<["-"], "gpubnames">, Group, Flags<[CC1Option]>; Modified: cfe/trunk/include/clang/Frontend/CodeGenOptions.def URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/include/clang/Frontend/CodeGenOptions.def?rev=346837&r1=346836&r2=346837&view=diff == --- cfe/trunk/include/clang/Frontend/CodeGenOptions.def (original) +++ cfe/trunk/include/clang/Frontend/CodeGenOptions.def Wed Nov 14 01:22:16 2018 @@ -252,7 +252,9 @@ CODEGENOPT(DebugTypeExtRefs, 1, 0) ///< CODEGENOPT(DebugExplicitImport, 1, 0) ///< Whether or not debug info should ///< contain explicit imports for ///< anonymous namespaces -CODEGENOPT(EnableSplitDwarf, 1, 0) ///< Whether to enable split DWARF + +ENUM_CODEGENOPT(SplitDwarfMode, DwarfFissionKind, 2, NoFission) ///< DWARF fission mode to use. + CODEGENOPT(SplitDwarfInlining, 1, 1) ///< Whether to include inlining info in the ///< skeleton CU to allow for symbolication ///< of inline stack frames without .dwo files. Modified: cfe/trunk/include/clang/Frontend/CodeGenOptions.h URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/include/clang/Frontend/CodeGenOptions.h?rev=346837&r1=346836&r2=346837&view=diff
r347035 - [clang] - Simplify tools::SplitDebugName.
Author: grimar Date: Thu Nov 15 23:59:24 2018 New Revision: 347035 URL: http://llvm.org/viewvc/llvm-project?rev=347035&view=rev Log: [clang] - Simplify tools::SplitDebugName. This should be NFC change. SplitDebugName recently started to accept the `Output` that can be used to simplify the logic a bit, also it seems that code in SplitDebugName that uses OPT_fdebug_compilation_dir is simply dead. Differential revision: https://reviews.llvm.org/D54576 Modified: cfe/trunk/lib/Driver/ToolChains/Clang.cpp cfe/trunk/lib/Driver/ToolChains/CommonArgs.cpp cfe/trunk/lib/Driver/ToolChains/CommonArgs.h cfe/trunk/lib/Driver/ToolChains/Gnu.cpp cfe/trunk/lib/Driver/ToolChains/MinGW.cpp Modified: cfe/trunk/lib/Driver/ToolChains/Clang.cpp URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/lib/Driver/ToolChains/Clang.cpp?rev=347035&r1=347034&r2=347035&view=diff == --- cfe/trunk/lib/Driver/ToolChains/Clang.cpp (original) +++ cfe/trunk/lib/Driver/ToolChains/Clang.cpp Thu Nov 15 23:59:24 2018 @@ -3936,7 +3936,7 @@ void Clang::ConstructJob(Compilation &C, const char *SplitDWARFOut; if (SplitDWARF) { CmdArgs.push_back("-split-dwarf-file"); -SplitDWARFOut = SplitDebugName(Args, Input, Output); +SplitDWARFOut = SplitDebugName(Args, Output); CmdArgs.push_back(SplitDWARFOut); } @@ -5902,7 +5902,7 @@ void ClangAs::ConstructJob(Compilation & if ((getDebugFissionKind(D, Args, A) == DwarfFissionKind::Split) && (T.isOSLinux() || T.isOSFuchsia())) { CmdArgs.push_back("-split-dwarf-file"); -CmdArgs.push_back(SplitDebugName(Args, Input, Output)); +CmdArgs.push_back(SplitDebugName(Args, Output)); } assert(Input.isFilename() && "Invalid input."); Modified: cfe/trunk/lib/Driver/ToolChains/CommonArgs.cpp URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/lib/Driver/ToolChains/CommonArgs.cpp?rev=347035&r1=347034&r2=347035&view=diff == --- cfe/trunk/lib/Driver/ToolChains/CommonArgs.cpp (original) +++ cfe/trunk/lib/Driver/ToolChains/CommonArgs.cpp Thu Nov 15 23:59:24 2018 @@ -808,26 +808,15 @@ bool tools::areOptimizationsEnabled(cons return false; } -const char *tools::SplitDebugName(const ArgList &Args, const InputInfo &Input, +const char *tools::SplitDebugName(const ArgList &Args, const InputInfo &Output) { if (Arg *A = Args.getLastArg(options::OPT_gsplit_dwarf_EQ)) if (StringRef(A->getValue()) == "single") return Args.MakeArgString(Output.getFilename()); - Arg *FinalOutput = Args.getLastArg(options::OPT_o); - if (FinalOutput && Args.hasArg(options::OPT_c)) { -SmallString<128> T(FinalOutput->getValue()); -llvm::sys::path::replace_extension(T, "dwo"); -return Args.MakeArgString(T); - } else { -// Use the compilation dir. -SmallString<128> T( -Args.getLastArgValue(options::OPT_fdebug_compilation_dir)); -SmallString<128> F(llvm::sys::path::stem(Input.getBaseInput())); -llvm::sys::path::replace_extension(F, "dwo"); -T += F; -return Args.MakeArgString(F); - } + SmallString<128> T(Output.getFilename()); + llvm::sys::path::replace_extension(T, "dwo"); + return Args.MakeArgString(T); } void tools::SplitDebugInfo(const ToolChain &TC, Compilation &C, const Tool &T, Modified: cfe/trunk/lib/Driver/ToolChains/CommonArgs.h URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/lib/Driver/ToolChains/CommonArgs.h?rev=347035&r1=347034&r2=347035&view=diff == --- cfe/trunk/lib/Driver/ToolChains/CommonArgs.h (original) +++ cfe/trunk/lib/Driver/ToolChains/CommonArgs.h Thu Nov 15 23:59:24 2018 @@ -63,7 +63,7 @@ void AddHIPLinkerScript(const ToolChain const Tool &T); const char *SplitDebugName(const llvm::opt::ArgList &Args, - const InputInfo &Input, const InputInfo &Output); + const InputInfo &Output); void SplitDebugInfo(const ToolChain &TC, Compilation &C, const Tool &T, const JobAction &JA, const llvm::opt::ArgList &Args, Modified: cfe/trunk/lib/Driver/ToolChains/Gnu.cpp URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/lib/Driver/ToolChains/Gnu.cpp?rev=347035&r1=347034&r2=347035&view=diff == --- cfe/trunk/lib/Driver/ToolChains/Gnu.cpp (original) +++ cfe/trunk/lib/Driver/ToolChains/Gnu.cpp Thu Nov 15 23:59:24 2018 @@ -817,7 +817,7 @@ void tools::gnutools::Assembler::Constru if (Args.hasArg(options::OPT_gsplit_dwarf) && getToolChain().getTriple().isOSLinux()) SplitDebugInfo(getToolChain(), C, *this, JA, Args, Output, - SplitDebugName(Args, Inputs[0], Output)); + SplitDebugName(Args, Output)); } namespace { Modif
r348352 - [clang] - Simplify tools::SplitDebugName.
Author: grimar Date: Wed Dec 5 03:09:10 2018 New Revision: 348352 URL: http://llvm.org/viewvc/llvm-project?rev=348352&view=rev Log: [clang] - Simplify tools::SplitDebugName. This is an updated version of the D54576, which was reverted. Problem was that SplitDebugName calls the InputInfo::getFilename which asserts if InputInfo given is not of type Filename: const char *getFilename() const { assert(isFilename() && "Invalid accessor."); return Data.Filename; } At the same time at that point, it can be of type Nothing and we need to use getBaseInput(), like original code did. Differential revision: https://reviews.llvm.org/D55006 Modified: cfe/trunk/lib/Driver/ToolChains/Clang.cpp cfe/trunk/lib/Driver/ToolChains/CommonArgs.cpp cfe/trunk/lib/Driver/ToolChains/CommonArgs.h cfe/trunk/lib/Driver/ToolChains/Gnu.cpp cfe/trunk/lib/Driver/ToolChains/MinGW.cpp cfe/trunk/test/Tooling/clang-check-extra-arg.cpp Modified: cfe/trunk/lib/Driver/ToolChains/Clang.cpp URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/lib/Driver/ToolChains/Clang.cpp?rev=348352&r1=348351&r2=348352&view=diff == --- cfe/trunk/lib/Driver/ToolChains/Clang.cpp (original) +++ cfe/trunk/lib/Driver/ToolChains/Clang.cpp Wed Dec 5 03:09:10 2018 @@ -3949,7 +3949,7 @@ void Clang::ConstructJob(Compilation &C, const char *SplitDWARFOut; if (SplitDWARF) { CmdArgs.push_back("-split-dwarf-file"); -SplitDWARFOut = SplitDebugName(Args, Input, Output); +SplitDWARFOut = SplitDebugName(Args, Output); CmdArgs.push_back(SplitDWARFOut); } @@ -5916,7 +5916,7 @@ void ClangAs::ConstructJob(Compilation & if ((getDebugFissionKind(D, Args, A) == DwarfFissionKind::Split) && (T.isOSLinux() || T.isOSFuchsia())) { CmdArgs.push_back("-split-dwarf-file"); -CmdArgs.push_back(SplitDebugName(Args, Input, Output)); +CmdArgs.push_back(SplitDebugName(Args, Output)); } assert(Input.isFilename() && "Invalid input."); Modified: cfe/trunk/lib/Driver/ToolChains/CommonArgs.cpp URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/lib/Driver/ToolChains/CommonArgs.cpp?rev=348352&r1=348351&r2=348352&view=diff == --- cfe/trunk/lib/Driver/ToolChains/CommonArgs.cpp (original) +++ cfe/trunk/lib/Driver/ToolChains/CommonArgs.cpp Wed Dec 5 03:09:10 2018 @@ -808,26 +808,18 @@ bool tools::areOptimizationsEnabled(cons return false; } -const char *tools::SplitDebugName(const ArgList &Args, const InputInfo &Input, +const char *tools::SplitDebugName(const ArgList &Args, const InputInfo &Output) { + SmallString<128> F(Output.isFilename() + ? Output.getFilename() + : llvm::sys::path::stem(Output.getBaseInput())); + if (Arg *A = Args.getLastArg(options::OPT_gsplit_dwarf_EQ)) if (StringRef(A->getValue()) == "single") - return Args.MakeArgString(Output.getFilename()); + return Args.MakeArgString(F); - Arg *FinalOutput = Args.getLastArg(options::OPT_o); - if (FinalOutput && Args.hasArg(options::OPT_c)) { -SmallString<128> T(FinalOutput->getValue()); -llvm::sys::path::replace_extension(T, "dwo"); -return Args.MakeArgString(T); - } else { -// Use the compilation dir. -SmallString<128> T( -Args.getLastArgValue(options::OPT_fdebug_compilation_dir)); -SmallString<128> F(llvm::sys::path::stem(Input.getBaseInput())); -llvm::sys::path::replace_extension(F, "dwo"); -T += F; -return Args.MakeArgString(F); - } + llvm::sys::path::replace_extension(F, "dwo"); + return Args.MakeArgString(F); } void tools::SplitDebugInfo(const ToolChain &TC, Compilation &C, const Tool &T, Modified: cfe/trunk/lib/Driver/ToolChains/CommonArgs.h URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/lib/Driver/ToolChains/CommonArgs.h?rev=348352&r1=348351&r2=348352&view=diff == --- cfe/trunk/lib/Driver/ToolChains/CommonArgs.h (original) +++ cfe/trunk/lib/Driver/ToolChains/CommonArgs.h Wed Dec 5 03:09:10 2018 @@ -63,7 +63,7 @@ void AddHIPLinkerScript(const ToolChain const Tool &T); const char *SplitDebugName(const llvm::opt::ArgList &Args, - const InputInfo &Input, const InputInfo &Output); + const InputInfo &Output); void SplitDebugInfo(const ToolChain &TC, Compilation &C, const Tool &T, const JobAction &JA, const llvm::opt::ArgList &Args, Modified: cfe/trunk/lib/Driver/ToolChains/Gnu.cpp URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/lib/Driver/ToolChains/Gnu.cpp?rev=348352&r1=348351&r2=348352&view=diff == --- cfe/trunk/lib/Driver/ToolChains/Gnu.cpp (original) +++ cfe/trunk/lib/Driver/To
r357061 - Revert the r348352 "[clang] - Simplify tools::SplitDebugName."
Author: grimar Date: Wed Mar 27 04:00:03 2019 New Revision: 357061 URL: http://llvm.org/viewvc/llvm-project?rev=357061&view=rev Log: Revert the r348352 "[clang] - Simplify tools::SplitDebugName." This partially reverts the r348352 (https://reviews.llvm.org/D55006) because of https://bugs.llvm.org/show_bug.cgi?id=41161. I did not revert the test case file because it passes fine now. Modified: cfe/trunk/lib/Driver/ToolChains/Clang.cpp cfe/trunk/lib/Driver/ToolChains/CommonArgs.cpp cfe/trunk/lib/Driver/ToolChains/CommonArgs.h cfe/trunk/lib/Driver/ToolChains/Gnu.cpp cfe/trunk/lib/Driver/ToolChains/MinGW.cpp Modified: cfe/trunk/lib/Driver/ToolChains/Clang.cpp URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/lib/Driver/ToolChains/Clang.cpp?rev=357061&r1=357060&r2=357061&view=diff == --- cfe/trunk/lib/Driver/ToolChains/Clang.cpp (original) +++ cfe/trunk/lib/Driver/ToolChains/Clang.cpp Wed Mar 27 04:00:03 2019 @@ -4083,7 +4083,7 @@ void Clang::ConstructJob(Compilation &C, const char *SplitDWARFOut; if (SplitDWARF) { CmdArgs.push_back("-split-dwarf-file"); -SplitDWARFOut = SplitDebugName(Args, Output); +SplitDWARFOut = SplitDebugName(Args, Input, Output); CmdArgs.push_back(SplitDWARFOut); } @@ -6137,7 +6137,7 @@ void ClangAs::ConstructJob(Compilation & if ((getDebugFissionKind(D, Args, A) == DwarfFissionKind::Split) && (T.isOSLinux() || T.isOSFuchsia())) { CmdArgs.push_back("-split-dwarf-file"); -CmdArgs.push_back(SplitDebugName(Args, Output)); +CmdArgs.push_back(SplitDebugName(Args, Input, Output)); } assert(Input.isFilename() && "Invalid input."); Modified: cfe/trunk/lib/Driver/ToolChains/CommonArgs.cpp URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/lib/Driver/ToolChains/CommonArgs.cpp?rev=357061&r1=357060&r2=357061&view=diff == --- cfe/trunk/lib/Driver/ToolChains/CommonArgs.cpp (original) +++ cfe/trunk/lib/Driver/ToolChains/CommonArgs.cpp Wed Mar 27 04:00:03 2019 @@ -816,18 +816,26 @@ bool tools::areOptimizationsEnabled(cons return false; } -const char *tools::SplitDebugName(const ArgList &Args, +const char *tools::SplitDebugName(const ArgList &Args, const InputInfo &Input, const InputInfo &Output) { - SmallString<128> F(Output.isFilename() - ? Output.getFilename() - : llvm::sys::path::stem(Output.getBaseInput())); - if (Arg *A = Args.getLastArg(options::OPT_gsplit_dwarf_EQ)) if (StringRef(A->getValue()) == "single") - return Args.MakeArgString(F); + return Args.MakeArgString(Output.getFilename()); - llvm::sys::path::replace_extension(F, "dwo"); - return Args.MakeArgString(F); + Arg *FinalOutput = Args.getLastArg(options::OPT_o); + if (FinalOutput && Args.hasArg(options::OPT_c)) { +SmallString<128> T(FinalOutput->getValue()); +llvm::sys::path::replace_extension(T, "dwo"); +return Args.MakeArgString(T); + } else { +// Use the compilation dir. +SmallString<128> T( +Args.getLastArgValue(options::OPT_fdebug_compilation_dir)); +SmallString<128> F(llvm::sys::path::stem(Input.getBaseInput())); +llvm::sys::path::replace_extension(F, "dwo"); +T += F; +return Args.MakeArgString(F); + } } void tools::SplitDebugInfo(const ToolChain &TC, Compilation &C, const Tool &T, Modified: cfe/trunk/lib/Driver/ToolChains/CommonArgs.h URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/lib/Driver/ToolChains/CommonArgs.h?rev=357061&r1=357060&r2=357061&view=diff == --- cfe/trunk/lib/Driver/ToolChains/CommonArgs.h (original) +++ cfe/trunk/lib/Driver/ToolChains/CommonArgs.h Wed Mar 27 04:00:03 2019 @@ -62,7 +62,7 @@ void AddHIPLinkerScript(const ToolChain const Tool &T); const char *SplitDebugName(const llvm::opt::ArgList &Args, - const InputInfo &Output); + const InputInfo &Input, const InputInfo &Output); void SplitDebugInfo(const ToolChain &TC, Compilation &C, const Tool &T, const JobAction &JA, const llvm::opt::ArgList &Args, Modified: cfe/trunk/lib/Driver/ToolChains/Gnu.cpp URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/lib/Driver/ToolChains/Gnu.cpp?rev=357061&r1=357060&r2=357061&view=diff == --- cfe/trunk/lib/Driver/ToolChains/Gnu.cpp (original) +++ cfe/trunk/lib/Driver/ToolChains/Gnu.cpp Wed Mar 27 04:00:03 2019 @@ -826,7 +826,7 @@ void tools::gnutools::Assembler::Constru if (Args.hasArg(options::OPT_gsplit_dwarf) && getToolChain().getTriple().isOSLinux()) SplitDebugInfo(getToolChain(), C, *this, JA, Args, Output, - SplitDebugName(Args, Outpu
r368825 - [clang] - An update after LLVM change.
Author: grimar Date: Wed Aug 14 04:10:01 2019 New Revision: 368825 URL: http://llvm.org/viewvc/llvm-project?rev=368825&view=rev Log: [clang] - An update after LLVM change. SectionRef::getName() was changed to return Expected<> (D66089) Modified: cfe/trunk/lib/CodeGen/ObjectFilePCHContainerOperations.cpp cfe/trunk/tools/clang-offload-bundler/ClangOffloadBundler.cpp Modified: cfe/trunk/lib/CodeGen/ObjectFilePCHContainerOperations.cpp URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/lib/CodeGen/ObjectFilePCHContainerOperations.cpp?rev=368825&r1=368824&r2=368825&view=diff == --- cfe/trunk/lib/CodeGen/ObjectFilePCHContainerOperations.cpp (original) +++ cfe/trunk/lib/CodeGen/ObjectFilePCHContainerOperations.cpp Wed Aug 14 04:10:01 2019 @@ -335,7 +335,11 @@ ObjectFilePCHContainerReader::ExtractPCH // Find the clang AST section in the container. for (auto &Section : OF->sections()) { StringRef Name; - Section.getName(Name); + if (Expected NameOrErr = Section.getName()) +Name = *NameOrErr; + else +consumeError(NameOrErr.takeError()); + if ((!IsCOFF && Name == "__clangast") || (IsCOFF && Name == "clangast")) { if (Expected E = Section.getContents()) return *E; Modified: cfe/trunk/tools/clang-offload-bundler/ClangOffloadBundler.cpp URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/tools/clang-offload-bundler/ClangOffloadBundler.cpp?rev=368825&r1=368824&r2=368825&view=diff == --- cfe/trunk/tools/clang-offload-bundler/ClangOffloadBundler.cpp (original) +++ cfe/trunk/tools/clang-offload-bundler/ClangOffloadBundler.cpp Wed Aug 14 04:10:01 2019 @@ -390,7 +390,10 @@ class ObjectFileHandler final : public F static bool IsOffloadSection(SectionRef CurSection, StringRef &OffloadTriple) { StringRef SectionName; -CurSection.getName(SectionName); +if (Expected NameOrErr = CurSection.getName()) + SectionName = *NameOrErr; +else + consumeError(NameOrErr.takeError()); if (SectionName.empty()) return false; ___ cfe-commits mailing list cfe-commits@lists.llvm.org https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits
r292227 - [Clang] - Update code to match upcoming llvm::zlib API.
Author: grimar Date: Tue Jan 17 09:45:31 2017 New Revision: 292227 URL: http://llvm.org/viewvc/llvm-project?rev=292227&view=rev Log: [Clang] - Update code to match upcoming llvm::zlib API. D28684 changed llvm::zlib to return Error instead of Status. It was accepted and committed in r292214, but then reverted in r292217 because I missed that clang code also needs to be updated. Patch do that. D28684 recommitted again as r292226 Differential revision: https://reviews.llvm.org/D28807 Modified: cfe/trunk/lib/Serialization/ASTReader.cpp cfe/trunk/lib/Serialization/ASTWriter.cpp Modified: cfe/trunk/lib/Serialization/ASTReader.cpp URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/lib/Serialization/ASTReader.cpp?rev=292227&r1=292226&r2=292227&view=diff == --- cfe/trunk/lib/Serialization/ASTReader.cpp (original) +++ cfe/trunk/lib/Serialization/ASTReader.cpp Tue Jan 17 09:45:31 2017 @@ -72,6 +72,7 @@ #include "llvm/Bitcode/BitstreamReader.h" #include "llvm/Support/Compression.h" #include "llvm/Support/Compiler.h" +#include "llvm/Support/Error.h" #include "llvm/Support/ErrorHandling.h" #include "llvm/Support/FileSystem.h" #include "llvm/Support/MemoryBuffer.h" @@ -1278,10 +1279,15 @@ bool ASTReader::ReadSLocEntry(int ID) { unsigned RecCode = SLocEntryCursor.readRecord(Code, Record, &Blob); if (RecCode == SM_SLOC_BUFFER_BLOB_COMPRESSED) { + if (!llvm::zlib::isAvailable()) { +Error("zlib is not available"); +return nullptr; + } SmallString<0> Uncompressed; - if (llvm::zlib::uncompress(Blob, Uncompressed, Record[0]) != - llvm::zlib::StatusOK) { -Error("could not decompress embedded file contents"); + if (llvm::Error E = + llvm::zlib::uncompress(Blob, Uncompressed, Record[0])) { +Error("could not decompress embedded file contents: " + + llvm::toString(std::move(E))); return nullptr; } return llvm::MemoryBuffer::getMemBufferCopy(Uncompressed, Name); Modified: cfe/trunk/lib/Serialization/ASTWriter.cpp URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/lib/Serialization/ASTWriter.cpp?rev=292227&r1=292226&r2=292227&view=diff == --- cfe/trunk/lib/Serialization/ASTWriter.cpp (original) +++ cfe/trunk/lib/Serialization/ASTWriter.cpp Tue Jan 17 09:45:31 2017 @@ -73,6 +73,7 @@ #include "llvm/Support/Casting.h" #include "llvm/Support/Compression.h" #include "llvm/Support/EndianStream.h" +#include "llvm/Support/Error.h" #include "llvm/Support/ErrorHandling.h" #include "llvm/Support/MemoryBuffer.h" #include "llvm/Support/OnDiskHashTable.h" @@ -1986,6 +1987,30 @@ void ASTWriter::WriteHeaderSearch(const free(const_cast(SavedStrings[I])); } +static void emitBlob(llvm::BitstreamWriter &Stream, StringRef Blob, + unsigned SLocBufferBlobCompressedAbbrv, + unsigned SLocBufferBlobAbbrv) { + typedef ASTWriter::RecordData::value_type RecordDataType; + + // Compress the buffer if possible. We expect that almost all PCM + // consumers will not want its contents. + SmallString<0> CompressedBuffer; + if (llvm::zlib::isAvailable()) { +llvm::Error E = llvm::zlib::compress(Blob.drop_back(1), CompressedBuffer); +if (!E) { + RecordDataType Record[] = {SM_SLOC_BUFFER_BLOB_COMPRESSED, + Blob.size() - 1}; + Stream.EmitRecordWithBlob(SLocBufferBlobCompressedAbbrv, Record, +CompressedBuffer); + return; +} +llvm::consumeError(std::move(E)); + } + + RecordDataType Record[] = {SM_SLOC_BUFFER_BLOB}; + Stream.EmitRecordWithBlob(SLocBufferBlobAbbrv, Record, Blob); +} + /// \brief Writes the block containing the serialized form of the /// source manager. /// @@ -2094,20 +2119,8 @@ void ASTWriter::WriteSourceManagerBlock( const llvm::MemoryBuffer *Buffer = Content->getBuffer(PP.getDiagnostics(), PP.getSourceManager()); StringRef Blob(Buffer->getBufferStart(), Buffer->getBufferSize() + 1); - -// Compress the buffer if possible. We expect that almost all PCM -// consumers will not want its contents. -SmallString<0> CompressedBuffer; -if (llvm::zlib::compress(Blob.drop_back(1), CompressedBuffer) == -llvm::zlib::StatusOK) { - RecordData::value_type Record[] = {SM_SLOC_BUFFER_BLOB_COMPRESSED, - Blob.size() - 1}; - Stream.EmitRecordWithBlob(SLocBufferBlobCompressedAbbrv, Record, -CompressedBuffer); -} else { - RecordData::value_type Record[] = {SM_SLOC_BUFFER_BLOB}; - Stream.EmitRecordWithBlob(SLocBufferBlobAbbrv, Record, Blob); -} +emitBlob(Stream, Blob, SLocBufferBlobCompressedAbbrv, +
r309088 - Update after LLVM change r309087
Author: grimar Date: Wed Jul 26 02:10:17 2017 New Revision: 309088 URL: http://llvm.org/viewvc/llvm-project?rev=309088&view=rev Log: Update after LLVM change r309087 Modified: cfe/trunk/lib/Driver/Driver.cpp cfe/trunk/lib/FrontendTool/ExecuteCompilerInvocation.cpp cfe/trunk/tools/driver/cc1as_main.cpp Modified: cfe/trunk/lib/Driver/Driver.cpp URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/lib/Driver/Driver.cpp?rev=309088&r1=309087&r2=309088&view=diff == --- cfe/trunk/lib/Driver/Driver.cpp (original) +++ cfe/trunk/lib/Driver/Driver.cpp Wed Jul 26 02:10:17 2017 @@ -1124,7 +1124,8 @@ void Driver::PrintHelp(bool ShowHidden) ExcludedFlagsBitmask |= HelpHidden; getOpts().PrintHelp(llvm::outs(), Name.c_str(), DriverTitle.c_str(), - IncludedFlagsBitmask, ExcludedFlagsBitmask); + IncludedFlagsBitmask, ExcludedFlagsBitmask, + /*ShowAllAliases=*/false); } void Driver::PrintVersion(const Compilation &C, raw_ostream &OS) const { Modified: cfe/trunk/lib/FrontendTool/ExecuteCompilerInvocation.cpp URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/lib/FrontendTool/ExecuteCompilerInvocation.cpp?rev=309088&r1=309087&r2=309088&view=diff == --- cfe/trunk/lib/FrontendTool/ExecuteCompilerInvocation.cpp (original) +++ cfe/trunk/lib/FrontendTool/ExecuteCompilerInvocation.cpp Wed Jul 26 02:10:17 2017 @@ -179,7 +179,8 @@ bool clang::ExecuteCompilerInvocation(Co std::unique_ptr Opts = driver::createDriverOptTable(); Opts->PrintHelp(llvm::outs(), "clang -cc1", "LLVM 'Clang' Compiler: http://clang.llvm.org";, -/*Include=*/ driver::options::CC1Option, /*Exclude=*/ 0); +/*Include=*/driver::options::CC1Option, +/*Exclude=*/0, /*ShowAllAliases=*/false); return true; } Modified: cfe/trunk/tools/driver/cc1as_main.cpp URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/tools/driver/cc1as_main.cpp?rev=309088&r1=309087&r2=309088&view=diff == --- cfe/trunk/tools/driver/cc1as_main.cpp (original) +++ cfe/trunk/tools/driver/cc1as_main.cpp Wed Jul 26 02:10:17 2017 @@ -504,7 +504,8 @@ int cc1as_main(ArrayRef Ar if (Asm.ShowHelp) { std::unique_ptr Opts(driver::createDriverOptTable()); Opts->PrintHelp(llvm::outs(), "clang -cc1as", "Clang Integrated Assembler", -/*Include=*/driver::options::CC1AsOption, /*Exclude=*/0); +/*Include=*/driver::options::CC1AsOption, /*Exclude=*/0, +/*ShowAllAliases=*/false); return 0; } ___ cfe-commits mailing list cfe-commits@lists.llvm.org http://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits
[PATCH] D13203: [Clang] - Massaging code to fix MSVS 2015 win32-release configuration
grimar created this revision. grimar added reviewers: rsmith, echristo. grimar added subscribers: cfe-commits, grimar. Microsoft Visual Studio Community 2015 Version 14.0.23107.0 D14REL When building in release mode, MSVS failed with: 57>c:\access_softek\llvm\tools\clang\lib\ast\astcontext.cpp(334): fatal error C1001: An internal error has occurred in the compiler. 57> (compiler file 'f:\dd\vctools\compiler\utc\src\p2\main.c', line 246) 57> To work around this problem, try simplifying or changing the program near the locations listed above. I little code simplification helped to workaround this. http://reviews.llvm.org/D13203 Files: ASTContext.cpp Index: ASTContext.cpp === --- ASTContext.cpp +++ ASTContext.cpp @@ -364,14 +364,14 @@ } else { RC = getRawCommentForDeclNoCache(I); OriginalDeclForRC = I; - RawCommentAndCacheFlags Raw; + RedeclComments[I] = RawCommentAndCacheFlags(); + RawCommentAndCacheFlags &Raw = RedeclComments[I]; if (RC) { Raw.setRaw(RC); Raw.setKind(RawCommentAndCacheFlags::FromDecl); } else Raw.setKind(RawCommentAndCacheFlags::NoCommentInDecl); Raw.setOriginalDecl(I); - RedeclComments[I] = Raw; if (RC) break; } Index: ASTContext.cpp === --- ASTContext.cpp +++ ASTContext.cpp @@ -364,14 +364,14 @@ } else { RC = getRawCommentForDeclNoCache(I); OriginalDeclForRC = I; - RawCommentAndCacheFlags Raw; + RedeclComments[I] = RawCommentAndCacheFlags(); + RawCommentAndCacheFlags &Raw = RedeclComments[I]; if (RC) { Raw.setRaw(RC); Raw.setKind(RawCommentAndCacheFlags::FromDecl); } else Raw.setKind(RawCommentAndCacheFlags::NoCommentInDecl); Raw.setOriginalDecl(I); - RedeclComments[I] = Raw; if (RC) break; } ___ cfe-commits mailing list cfe-commits@lists.llvm.org http://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits
Re: [PATCH] D13203: [Clang] - Massaging code to fix MSVS 2015 win32-release configuration
grimar updated this revision to Diff 36271. grimar added a comment. Added comment per review request. http://reviews.llvm.org/D13203 Files: ASTContext.cpp Index: ASTContext.cpp === --- ASTContext.cpp +++ ASTContext.cpp @@ -364,14 +364,19 @@ } else { RC = getRawCommentForDeclNoCache(I); OriginalDeclForRC = I; - RawCommentAndCacheFlags Raw; + // TODO: these next two lines helps to workaround msvs 2015 + // internal compiler error. This is a replacement + // of delayed assignment RedeclComments[I] = Raw + // which caused that issue. + RedeclComments[I] = RawCommentAndCacheFlags(); + RawCommentAndCacheFlags &Raw = RedeclComments[I]; + // if (RC) { Raw.setRaw(RC); Raw.setKind(RawCommentAndCacheFlags::FromDecl); } else Raw.setKind(RawCommentAndCacheFlags::NoCommentInDecl); Raw.setOriginalDecl(I); - RedeclComments[I] = Raw; if (RC) break; } Index: ASTContext.cpp === --- ASTContext.cpp +++ ASTContext.cpp @@ -364,14 +364,19 @@ } else { RC = getRawCommentForDeclNoCache(I); OriginalDeclForRC = I; - RawCommentAndCacheFlags Raw; + // TODO: these next two lines helps to workaround msvs 2015 + // internal compiler error. This is a replacement + // of delayed assignment RedeclComments[I] = Raw + // which caused that issue. + RedeclComments[I] = RawCommentAndCacheFlags(); + RawCommentAndCacheFlags &Raw = RedeclComments[I]; + // if (RC) { Raw.setRaw(RC); Raw.setKind(RawCommentAndCacheFlags::FromDecl); } else Raw.setKind(RawCommentAndCacheFlags::NoCommentInDecl); Raw.setOriginalDecl(I); - RedeclComments[I] = Raw; if (RC) break; } ___ cfe-commits mailing list cfe-commits@lists.llvm.org http://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits
Re: [PATCH] D13203: [Clang] - Massaging code to fix MSVS 2015 win32-release configuration
grimar abandoned this revision. grimar added a comment. r251415 fixes this in another way. http://reviews.llvm.org/D13203 ___ cfe-commits mailing list cfe-commits@lists.llvm.org http://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits
r270985 - Update for following LLVM commit.
Author: grimar Date: Fri May 27 07:15:25 2016 New Revision: 270985 URL: http://llvm.org/viewvc/llvm-project?rev=270985&view=rev Log: Update for following LLVM commit. It will be: Recommit 270977 - [llvm-mc] - Teach llvm-mc to generate zlib styled compression sections. Modified: cfe/trunk/tools/driver/cc1as_main.cpp Modified: cfe/trunk/tools/driver/cc1as_main.cpp URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/tools/driver/cc1as_main.cpp?rev=270985&r1=270984&r2=270985&view=diff == --- cfe/trunk/tools/driver/cc1as_main.cpp (original) +++ cfe/trunk/tools/driver/cc1as_main.cpp Fri May 27 07:15:25 2016 @@ -313,7 +313,7 @@ static bool ExecuteAssembler(AssemblerIn // Ensure MCAsmInfo initialization occurs before any use, otherwise sections // may be created with a combination of default and explicit settings. if (Opts.CompressDebugSections) -MAI->setCompressDebugSections(true); +MAI->setCompressDebugSections(DebugCompressionType::DCT_ZlibGnu); bool IsBinary = Opts.OutputType == AssemblerInvocation::FT_Obj; std::unique_ptr FDOS = getOutputStream(Opts, Diags, IsBinary); ___ cfe-commits mailing list cfe-commits@lists.llvm.org http://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits