diff --git a/llvm/include/llvm/BinaryFormat/Dwarf.h b/llvm/include/llvm/BinaryFormat/Dwarf.h --- a/llvm/include/llvm/BinaryFormat/Dwarf.h +++ b/llvm/include/llvm/BinaryFormat/Dwarf.h @@ -654,6 +654,11 @@ static constexpr char Type[4] = "TAG"; static constexpr StringRef (*StringFn)(unsigned) = &TagString; }; + +template <> struct EnumTraits : public std::true_type { + static constexpr char Type[4] = "LNS"; + static constexpr StringRef (*StringFn)(unsigned) = &LNStandardString; +}; } // End of namespace dwarf /// Dwarf constants format_provider diff --git a/llvm/lib/BinaryFormat/Dwarf.cpp b/llvm/lib/BinaryFormat/Dwarf.cpp --- a/llvm/lib/BinaryFormat/Dwarf.cpp +++ b/llvm/lib/BinaryFormat/Dwarf.cpp @@ -757,3 +757,4 @@ constexpr char llvm::dwarf::EnumTraits
::Type[]; constexpr char llvm::dwarf::EnumTraits::Type[]; constexpr char llvm::dwarf::EnumTraits::Type[]; +constexpr char llvm::dwarf::EnumTraits::Type[]; diff --git a/llvm/lib/DebugInfo/DWARF/DWARFDebugLine.cpp b/llvm/lib/DebugInfo/DWARF/DWARFDebugLine.cpp --- a/llvm/lib/DebugInfo/DWARF/DWARFDebugLine.cpp +++ b/llvm/lib/DebugInfo/DWARF/DWARFDebugLine.cpp @@ -16,6 +16,7 @@ #include "llvm/DebugInfo/DWARF/DWARFRelocMap.h" #include "llvm/Support/Errc.h" #include "llvm/Support/Format.h" +#include "llvm/Support/FormatVariadic.h" #include "llvm/Support/WithColor.h" #include "llvm/Support/raw_ostream.h" #include @@ -114,8 +115,9 @@ << format(" opcode_base: %u\n", OpcodeBase); for (uint32_t I = 0; I != StandardOpcodeLengths.size(); ++I) - OS << format("standard_opcode_lengths[%s] = %u\n", - LNStandardString(I + 1).data(), StandardOpcodeLengths[I]); + OS << formatv("standard_opcode_lengths[{0}] = {1}\n", + static_cast(I + 1), + StandardOpcodeLengths[I]); if (!IncludeDirectories.empty()) { // DWARF v5 starts directory indexes at 0. diff --git a/llvm/test/tools/llvm-dwarfdump/X86/debug-line.s b/llvm/test/tools/llvm-dwarfdump/X86/debug-line.s --- a/llvm/test/tools/llvm-dwarfdump/X86/debug-line.s +++ b/llvm/test/tools/llvm-dwarfdump/X86/debug-line.s @@ -30,7 +30,7 @@ # CHECK-NEXT: standard_opcode_lengths[DW_LNS_set_prologue_end] = 0 # CHECK-NEXT: standard_opcode_lengths[DW_LNS_set_epilogue_begin] = 0 # CHECK-NEXT: standard_opcode_lengths[DW_LNS_set_isa] = 1 -# CHECK-NEXT: standard_opcode_lengths[(null)] = 0 +# CHECK-NEXT: standard_opcode_lengths[DW_LNS_unknown_d] = 0 # CHECK-NEXT: include_directories[ 0] = "dir1/dir2" # CHECK-NEXT: file_names[ 0]: # CHECK-NEXT: name: "file1.c"