[PATCH] D109345: MemoryBuffer: Migrate to Expected/llvm::Error from ErrorOr/std::error_code

David Blaikie via Phabricator via cfe-commits cfe-commits at lists.llvm.org
Tue Sep 7 00:49:28 PDT 2021


dblaikie created this revision.
dblaikie added reviewers: lhames, compnerd.
Herald added subscribers: ormris, dexonsmith, wenlei, cmtice, kerbowa, usaxena95, thopre, kadircet, rupprecht, arphaman, steven_wu, gbedwell, martong, hiraditya, arichardson, sbc100, nhaehnle, jvesely, emaste.
Herald added a reviewer: JDevlieghere.
Herald added a reviewer: andreadb.
Herald added a reviewer: alexander-shaposhnikov.
Herald added a reviewer: rupprecht.
Herald added a reviewer: jhenderson.
Herald added a reviewer: MaskRay.
Herald added a reviewer: gkm.
Herald added a project: lld-macho.
Herald added a reviewer: lld-macho.
dblaikie requested review of this revision.
Herald added subscribers: cfe-commits, llvm-commits, lldb-commits, aheejin.
Herald added projects: clang, LLDB, LLVM, clang-tools-extra.

Specifically to improve diagnostic/error messages - including the
filename in any error of an API that takes a file name (so not APIs that
take raw MemoryBuffers - don't uset the MemoryBuffer's identifier as the
name, because sometimes that's not adequate (such as for MemoryBuffer's
referring to files inside an archive) - and not for APIs taking a raw
file descriptor either).

This was spotted as a defficiency in llvm-jitlink which was complaining
about a missing file but not reporting which file.

Rather than patching that one case of a missing filename up in the
caller as most other callers do to workaround this, I figured I'd try
fixing this at a lower level - which involved plumbing Expected/Error
through those APIs to be able to carry the file name - and then fixing
up lots of callers and lots of test cases for slight differences in
syntax (mostly made diagnostic messages more consistent across tools
about quoting versus not quoting the filename, etc).

One or two cases got a bit worse - like llvm-symbolizer's yaml output,
now the diagnostic itself includes the filename, in addition to the file
yaml field. This could probably be improved/fixed by special-casing
FileError in the diagnostic printing to pull out/separate the file name
in the diagnostic.

Otherwise it's I think just a lot of cleanup.

Oh, it also included changing FileError's convertToErrorCode to look
down through it's nested ErrorInfo for error codes - this makes it
possible to use FileError when a caller is trying to check for a
specific file related error (such as 'file not found') which was being
done in a couple of places (& without this fix would've created a
strange tension where APIs wanting to support such callers would have to
use StringError or ECError instead of FileError, which seemed
counterintuitive/inelegant/difficult to deal with - in terms of then
trying to have consistent syntax/handling for file errors, and to
support the possibility of splitting out filenames as mentioned above
for the symbolizer output).

The Windows/Path.inc is entirely untested - will have to test it out on
buildbots, unless someone wants to give it a go before I submit.


Repository:
  rG LLVM Github Monorepo

https://reviews.llvm.org/D109345

Files:
  clang-tools-extra/clang-apply-replacements/lib/Tooling/ApplyReplacements.cpp
  clang-tools-extra/clang-change-namespace/tool/ClangChangeNamespace.cpp
  clang-tools-extra/clang-include-fixer/FuzzySymbolIndex.cpp
  clang-tools-extra/clang-include-fixer/YamlSymbolIndex.cpp
  clang-tools-extra/clang-include-fixer/tool/ClangIncludeFixer.cpp
  clang-tools-extra/clang-query/tool/ClangQuery.cpp
  clang-tools-extra/clang-tidy/tool/ClangTidyMain.cpp
  clang-tools-extra/clangd/CompileCommands.cpp
  clang-tools-extra/clangd/QueryDriverDatabase.cpp
  clang-tools-extra/clangd/index/BackgroundIndexStorage.cpp
  clang-tools-extra/clangd/index/Serialization.cpp
  clang-tools-extra/modularize/ModularizeUtilities.cpp
  clang/include/clang/Basic/DiagnosticFrontendKinds.td
  clang/lib/ARCMigrate/FileRemapper.cpp
  clang/lib/ARCMigrate/ObjCMT.cpp
  clang/lib/Basic/FileManager.cpp
  clang/lib/CodeGen/BackendUtil.cpp
  clang/lib/CodeGen/CGCUDANV.cpp
  clang/lib/CodeGen/CGOpenMPRuntime.cpp
  clang/lib/CrossTU/CrossTranslationUnit.cpp
  clang/lib/Driver/Driver.cpp
  clang/lib/Driver/ToolChains/AMDGPU.cpp
  clang/lib/Frontend/CompilerInstance.cpp
  clang/lib/Serialization/GlobalModuleIndex.cpp
  clang/lib/Serialization/ModuleManager.cpp
  clang/lib/Tooling/CompilationDatabase.cpp
  clang/lib/Tooling/JSONCompilationDatabase.cpp
  clang/test/CodeGen/basic-block-sections.c
  clang/tools/apinotes-test/APINotesTest.cpp
  clang/tools/arcmt-test/arcmt-test.cpp
  clang/tools/clang-format/ClangFormat.cpp
  clang/tools/clang-nvlink-wrapper/ClangNvlinkWrapper.cpp
  clang/tools/clang-offload-bundler/ClangOffloadBundler.cpp
  clang/tools/clang-offload-wrapper/ClangOffloadWrapper.cpp
  clang/tools/clang-refactor/ClangRefactor.cpp
  clang/tools/clang-refactor/TestSupport.cpp
  clang/tools/clang-rename/ClangRename.cpp
  clang/tools/driver/cc1as_main.cpp
  clang/tools/driver/cc1gen_reproducer_main.cpp
  lld/COFF/Driver.cpp
  lld/COFF/PDB.cpp
  lld/ELF/InputFiles.cpp
  lld/ELF/LTO.cpp
  lld/MachO/InputFiles.cpp
  lld/lib/Driver/DarwinLdDriver.cpp
  lld/lib/ReaderWriter/MachO/MachOLinkingContext.cpp
  lld/lib/ReaderWriter/MachO/MachONormalizedFileBinaryReader.cpp
  lld/test/ELF/basic.s
  lld/test/ELF/color-diagnostics.test
  lld/test/ELF/driver.test
  lld/test/ELF/error-limit.test
  lld/test/ELF/invalid-linkerscript.test
  lld/test/ELF/linkerscript/group.s
  lld/test/ELF/reproduce-error.s
  lld/test/ELF/symbol-ordering-file.s
  lld/test/MachO/color-diagnostics.test
  lld/test/MachO/error-limit.test
  lld/test/MachO/invalid/no-filelist.s
  lld/test/MachO/reroot-path.s
  lld/unittests/MachOTests/MachONormalizedFileBinaryWriterTests.cpp
  lld/wasm/InputFiles.cpp
  lldb/include/lldb/Utility/ReproducerProvider.h
  lldb/source/API/SBReproducer.cpp
  lldb/source/Commands/CommandObjectReproducer.cpp
  lldb/source/Commands/CommandObjectTrace.cpp
  lldb/source/Host/common/FileSystem.cpp
  lldb/source/Host/linux/Support.cpp
  lldb/source/Plugins/ObjectFile/Minidump/MinidumpFileBuilder.cpp
  lldb/source/Plugins/ObjectFile/PDB/ObjectFilePDB.cpp
  lldb/source/Plugins/Process/Linux/IntelPTManager.cpp
  lldb/source/Plugins/Process/gdb-remote/GDBRemoteCommunicationReplayServer.cpp
  lldb/source/Utility/ProcessInfo.cpp
  lldb/source/Utility/Reproducer.cpp
  lldb/source/Utility/ReproducerInstrumentation.cpp
  lldb/source/Utility/ReproducerProvider.cpp
  lldb/source/Utility/StructuredData.cpp
  lldb/tools/lldb-test/lldb-test.cpp
  lldb/unittests/TestingSupport/TestUtilities.cpp
  llvm/examples/OrcV2Examples/LLJITWithThinLTOSummaries/LLJITWithThinLTOSummaries.cpp
  llvm/include/llvm/BinaryFormat/Magic.h
  llvm/include/llvm/Support/Error.h
  llvm/include/llvm/Support/MemoryBuffer.h
  llvm/lib/Analysis/ReplayInlineAdvisor.cpp
  llvm/lib/AsmParser/Parser.cpp
  llvm/lib/BinaryFormat/Magic.cpp
  llvm/lib/Bitcode/Reader/BitcodeReader.cpp
  llvm/lib/CodeGen/CommandFlags.cpp
  llvm/lib/CodeGen/MIRParser/MIRParser.cpp
  llvm/lib/DebugInfo/GSYM/GsymReader.cpp
  llvm/lib/DebugInfo/PDB/Native/NativeSession.cpp
  llvm/lib/DebugInfo/Symbolize/DIPrinter.cpp
  llvm/lib/DebugInfo/Symbolize/Symbolize.cpp
  llvm/lib/ExecutionEngine/Orc/ExecutionUtils.cpp
  llvm/lib/FuzzMutate/FuzzerCLI.cpp
  llvm/lib/IR/Core.cpp
  llvm/lib/IRReader/IRReader.cpp
  llvm/lib/InterfaceStub/ELFObjHandler.cpp
  llvm/lib/LTO/Caching.cpp
  llvm/lib/LTO/LTOBackend.cpp
  llvm/lib/LTO/LTOCodeGenerator.cpp
  llvm/lib/LTO/LTOModule.cpp
  llvm/lib/LTO/ThinLTOCodeGenerator.cpp
  llvm/lib/Object/Archive.cpp
  llvm/lib/Object/ArchiveWriter.cpp
  llvm/lib/Object/Binary.cpp
  llvm/lib/Object/Error.cpp
  llvm/lib/Object/ObjectFile.cpp
  llvm/lib/ProfileData/Coverage/CoverageMapping.cpp
  llvm/lib/ProfileData/GCOV.cpp
  llvm/lib/ProfileData/InstrProfReader.cpp
  llvm/lib/ProfileData/SampleProfReader.cpp
  llvm/lib/Remarks/BitstreamRemarkParser.cpp
  llvm/lib/Remarks/YAMLRemarkParser.cpp
  llvm/lib/Support/Error.cpp
  llvm/lib/Support/FileUtilities.cpp
  llvm/lib/Support/Host.cpp
  llvm/lib/Support/LockFileManager.cpp
  llvm/lib/Support/MemoryBuffer.cpp
  llvm/lib/Support/SourceMgr.cpp
  llvm/lib/Support/Unix/Path.inc
  llvm/lib/Support/VirtualFileSystem.cpp
  llvm/lib/Support/Windows/Path.inc
  llvm/lib/TableGen/Main.cpp
  llvm/lib/Target/BPF/BTFDebug.cpp
  llvm/lib/ToolDrivers/llvm-dlltool/DlltoolDriver.cpp
  llvm/lib/ToolDrivers/llvm-lib/LibDriver.cpp
  llvm/lib/Transforms/IPO/BlockExtractor.cpp
  llvm/lib/Transforms/IPO/Internalize.cpp
  llvm/lib/Transforms/IPO/LowerTypeTests.cpp
  llvm/lib/Transforms/IPO/WholeProgramDevirt.cpp
  llvm/lib/Transforms/Utils/SymbolRewriter.cpp
  llvm/test/DebugInfo/symbolize-missing-file.test
  llvm/test/MC/Hexagon/not_found.s
  llvm/test/Object/ar-create.test
  llvm/test/Object/ar-error.test
  llvm/test/Object/archive-extract.test
  llvm/test/Object/directory.ll
  llvm/test/Object/invalid.test
  llvm/test/ObjectYAML/wasm/header_invalid_version.yaml
  llvm/test/ObjectYAML/wasm/invalid_export.yaml
  llvm/test/ObjectYAML/wasm/invalid_global_weak.yaml
  llvm/test/tools/llvm-ar/error-opening-directory.test
  llvm/test/tools/llvm-ar/error-opening-permission.test
  llvm/test/tools/llvm-ar/missing-thin-archive-member.test
  llvm/test/tools/llvm-ar/move.test
  llvm/test/tools/llvm-ar/print.test
  llvm/test/tools/llvm-ar/quick-append.test
  llvm/test/tools/llvm-ar/replace.test
  llvm/test/tools/llvm-ar/response.test
  llvm/test/tools/llvm-ifs/fail-file-open.test
  llvm/test/tools/llvm-libtool-darwin/L-and-l.test
  llvm/test/tools/llvm-libtool-darwin/archive-flattening.test
  llvm/test/tools/llvm-libtool-darwin/filelist.test
  llvm/test/tools/llvm-libtool-darwin/invalid-input-output-args.test
  llvm/test/tools/llvm-mc/basic.test
  llvm/test/tools/llvm-mca/invalid_input_file_name.test
  llvm/test/tools/llvm-ml/basic.test
  llvm/test/tools/llvm-readobj/ELF/thin-archive-paths.test
  llvm/test/tools/llvm-sim/fail-cases.test
  llvm/test/tools/llvm-symbolizer/output-style-inlined.test
  llvm/test/tools/llvm-symbolizer/output-style-json-code.test
  llvm/test/tools/llvm-symbolizer/output-style-json-data.test
  llvm/test/tools/llvm-symbolizer/output-style-json-frame.ll
  llvm/test/tools/llvm-tapi-diff/tapi-diff-misspelled-tbd.test
  llvm/test/tools/obj2yaml/Archives/regular.yaml
  llvm/test/tools/obj2yaml/ELF/entsize.yaml
  llvm/test/tools/obj2yaml/ELF/section-group.yaml
  llvm/test/tools/obj2yaml/ELF/shlink.yaml
  llvm/test/tools/obj2yaml/ELF/sht-symtab-shndx.yaml
  llvm/test/tools/obj2yaml/ELF/verdef-section.yaml
  llvm/test/tools/obj2yaml/invalid_input_file.test
  llvm/tools/dsymutil/BinaryHolder.cpp
  llvm/tools/dsymutil/DebugMap.cpp
  llvm/tools/dsymutil/SymbolMap.cpp
  llvm/tools/lli/lli.cpp
  llvm/tools/llvm-ar/llvm-ar.cpp
  llvm/tools/llvm-bcanalyzer/llvm-bcanalyzer.cpp
  llvm/tools/llvm-cat/llvm-cat.cpp
  llvm/tools/llvm-cov/CodeCoverage.cpp
  llvm/tools/llvm-cov/gcov.cpp
  llvm/tools/llvm-cxxmap/llvm-cxxmap.cpp
  llvm/tools/llvm-dis/llvm-dis.cpp
  llvm/tools/llvm-dwarfdump/llvm-dwarfdump.cpp
  llvm/tools/llvm-exegesis/lib/BenchmarkResult.cpp
  llvm/tools/llvm-exegesis/lib/SnippetFile.cpp
  llvm/tools/llvm-gsymutil/llvm-gsymutil.cpp
  llvm/tools/llvm-ifs/llvm-ifs.cpp
  llvm/tools/llvm-jitlink/llvm-jitlink.cpp
  llvm/tools/llvm-libtool-darwin/llvm-libtool-darwin.cpp
  llvm/tools/llvm-link/llvm-link.cpp
  llvm/tools/llvm-lto/llvm-lto.cpp
  llvm/tools/llvm-mc/llvm-mc.cpp
  llvm/tools/llvm-mca/llvm-mca.cpp
  llvm/tools/llvm-ml/llvm-ml.cpp
  llvm/tools/llvm-modextract/llvm-modextract.cpp
  llvm/tools/llvm-mt/llvm-mt.cpp
  llvm/tools/llvm-nm/llvm-nm.cpp
  llvm/tools/llvm-objcopy/COFF/COFFObjcopy.cpp
  llvm/tools/llvm-objcopy/ConfigManager.cpp
  llvm/tools/llvm-objcopy/ELF/ELFObjcopy.cpp
  llvm/tools/llvm-objcopy/MachO/MachOObjcopy.cpp
  llvm/tools/llvm-objcopy/llvm-objcopy.cpp
  llvm/tools/llvm-objcopy/wasm/WasmObjcopy.cpp
  llvm/tools/llvm-objdump/MachODump.cpp
  llvm/tools/llvm-objdump/SourcePrinter.cpp
  llvm/tools/llvm-opt-report/OptReport.cpp
  llvm/tools/llvm-pdbutil/InputFile.cpp
  llvm/tools/llvm-pdbutil/llvm-pdbutil.cpp
  llvm/tools/llvm-profdata/llvm-profdata.cpp
  llvm/tools/llvm-rc/ResourceFileWriter.cpp
  llvm/tools/llvm-rc/llvm-rc.cpp
  llvm/tools/llvm-readobj/llvm-readobj.cpp
  llvm/tools/llvm-rtdyld/llvm-rtdyld.cpp
  llvm/tools/llvm-size/llvm-size.cpp
  llvm/tools/llvm-strings/llvm-strings.cpp
  llvm/tools/llvm-tapi-diff/llvm-tapi-diff.cpp
  llvm/tools/llvm-undname/llvm-undname.cpp
  llvm/tools/lto/lto.cpp
  llvm/tools/obj2yaml/obj2yaml.cpp
  llvm/tools/sancov/sancov.cpp
  llvm/tools/sanstats/sanstats.cpp
  llvm/tools/split-file/split-file.cpp
  llvm/tools/verify-uselistorder/verify-uselistorder.cpp
  llvm/tools/yaml2obj/yaml2obj.cpp
  llvm/unittests/Support/MemoryBufferTest.cpp
  llvm/unittests/Support/TarWriterTest.cpp
  llvm/unittests/Support/raw_ostream_test.cpp
  llvm/utils/FileCheck/FileCheck.cpp
  llvm/utils/yaml-bench/YAMLBench.cpp

-------------- next part --------------
A non-text attachment was scrubbed...
Name: D109345.371000.patch
Type: text/x-patch
Size: 242919 bytes
Desc: not available
URL: <http://lists.llvm.org/pipermail/cfe-commits/attachments/20210907/25a67834/attachment-0001.bin>


More information about the cfe-commits mailing list