[PATCH] D132900: [DWARF] Fix infinite recursion in Type Printer.
Alexander Yermolovich via Phabricator via llvm-commits
llvm-commits at lists.llvm.org
Thu Sep 22 15:43:28 PDT 2022
ayermolo added a comment.
Circled back with fresh eyes. So this example passes with trunk. So looks like current allow list (below), regresses it.
Stack dump:
0. Program arguments: /home/ayermolo/local/llvm-build-debug/bin/llvm-dwarfdump --show-form --verbose --debug-info --choose-strategy=1 --enable-verbose-mode=false repro.o
#0 0x000055cc332c360a llvm::sys::PrintStackTrace(llvm::raw_ostream&, int) /home/ayermolo/local/server-llvm/llvm-project/llvm/lib/Support/Unix/Signals.inc:569:11
#1 0x000055cc332c37bb PrintStackTraceSignalHandler(void*) /home/ayermolo/local/server-llvm/llvm-project/llvm/lib/Support/Unix/Signals.inc:636:1
#2 0x000055cc332c1e36 llvm::sys::RunSignalHandlers() /home/ayermolo/local/server-llvm/llvm-project/llvm/lib/Support/Signals.cpp:103:5
#3 0x000055cc332c3ea5 SignalHandler(int) /home/ayermolo/local/server-llvm/llvm-project/llvm/lib/Support/Unix/Signals.inc:407:1
#4 0x00007f54e2edbce0 __restore_rt (/lib64/libpthread.so.0+0x12ce0)
#5 0x000055cc32d645a4 llvm::StringRef::size() const /home/ayermolo/local/server-llvm/llvm-project/llvm/include/llvm/ADT/StringRef.h:137:0
#6 0x000055cc32dbafe5 llvm::DataExtractor::size() const /home/ayermolo/local/server-llvm/llvm-project/llvm/include/llvm/Support/DataExtractor.h:688:25
#7 0x000055cc32db7ee9 llvm::DataExtractor::isValidOffset(unsigned long) const /home/ayermolo/local/server-llvm/llvm-project/llvm/include/llvm/Support/DataExtractor.h:665:61
#8 0x000055cc32db8348 llvm::DataExtractor::isValidOffsetForDataOfSize(unsigned long, unsigned long) const /home/ayermolo/local/server-llvm/llvm-project/llvm/include/llvm/Support/DataExtractor.h:673:41
#9 0x000055cc331d9500 llvm::DataExtractor::prepareRead(unsigned long, unsigned long, llvm::Error*) const /home/ayermolo/local/server-llvm/llvm-project/llvm/lib/Support/DataExtractor.cpp:19:7
#10 0x000055cc331da839 unsigned int llvm::DataExtractor::getU<unsigned int>(unsigned long*, llvm::Error*) const /home/ayermolo/local/server-llvm/llvm-project/llvm/lib/Support/DataExtractor.cpp:47:7
#11 0x000055cc331d97c5 llvm::DataExtractor::getU32(unsigned long*, llvm::Error*) const /home/ayermolo/local/server-llvm/llvm-project/llvm/lib/Support/DataExtractor.cpp:108:3
#12 0x000055cc331d9912 llvm::DataExtractor::getUnsigned(unsigned long*, unsigned int, llvm::Error*) const /home/ayermolo/local/server-llvm/llvm-project/llvm/lib/Support/DataExtractor.cpp:133:12
#13 0x000055cc32dfac8b llvm::DWARFDataExtractor::getRelocatedValue(unsigned int, unsigned long*, unsigned long*, llvm::Error*) const /home/ayermolo/local/server-llvm/llvm-project/llvm/lib/DebugInfo/DWARF/DWARFDataExtractor.cpp:58:12
#14 0x000055cc32e52caa llvm::DWARFFormValue::extractValue(llvm::DWARFDataExtractor const&, unsigned long*, llvm::dwarf::FormParams, llvm::DWARFContext const*, llvm::DWARFUnit const*) /home/ayermolo/local/server-llvm/llvm-project/llvm/lib/DebugInfo/DWARF/DWARFFormValue.cpp:311:25
#15 0x000055cc32e005f9 llvm::DWARFFormValue::extractValue(llvm::DWARFDataExtractor const&, unsigned long*, llvm::dwarf::FormParams, llvm::DWARFUnit const*) /home/ayermolo/local/server-llvm/llvm-project/llvm/include/llvm/DebugInfo/DWARF/DWARFFormValue.h:104:5
#16 0x000055cc32dffd93 llvm::DWARFAbbreviationDeclaration::getAttributeValueFromOffset(unsigned int, unsigned long, llvm::DWARFUnit const&) const /home/ayermolo/local/server-llvm/llvm-project/llvm/lib/DebugInfo/DWARF/DWARFAbbreviationDeclaration.cpp:181:7
#17 0x000055cc32dffe7c llvm::DWARFAbbreviationDeclaration::getAttributeValue(unsigned long, llvm::dwarf::Attribute, llvm::DWARFUnit const&) const /home/ayermolo/local/server-llvm/llvm-project/llvm/lib/DebugInfo/DWARF/DWARFAbbreviationDeclaration.cpp:0:10
#18 0x000055cc32e3dd9a llvm::DWARFDie::find(llvm::dwarf::Attribute) const /home/ayermolo/local/server-llvm/llvm-project/llvm/lib/DebugInfo/DWARF/DWARFDie.cpp:257:5
#19 0x000055cc32e3e1e8 llvm::DWARFDie::getAttributeValueAsReferencedDie(llvm::dwarf::Attribute) const /home/ayermolo/local/server-llvm/llvm-project/llvm/lib/DebugInfo/DWARF/DWARFDie.cpp:310:32
#20 0x000055cc32e462b4 llvm::resolveReferencedType(llvm::DWARFDie, llvm::dwarf::Attribute) /home/ayermolo/local/server-llvm/llvm-project/llvm/lib/DebugInfo/DWARF/DWARFTypePrinter.cpp:94:12
#21 0x000055cc32e47051 llvm::DWARFTypePrinter::appendUnqualifiedNameBefore(llvm::DWARFDie, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char>>*)::$_0::operator()() const /home/ayermolo/local/server-llvm/llvm-project/llvm/lib/DebugInfo/DWARF/DWARFTypePrinter.cpp:135:40
#22 0x000055cc32e466ef llvm::DWARFTypePrinter::appendUnqualifiedNameBefore(llvm::DWARFDie, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char>>*) /home/ayermolo/local/server-llvm/llvm-project/llvm/lib/DebugInfo/DWARF/DWARFTypePrinter.cpp:139:36
#23 0x000055cc32e498e7 llvm::DWARFTypePrinter::appendUnqualifiedName(llvm::DWARFDie, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char>>*) /home/ayermolo/local/server-llvm/llvm-project/llvm/lib/DebugInfo/DWARF/DWARFTypePrinter.cpp:572:22
#24 0x000055cc32e472d3 llvm::DWARFTypePrinter::appendQualifiedName(llvm::DWARFDie) /home/ayermolo/local/server-llvm/llvm-project/llvm/lib/DebugInfo/DWARF/DWARFTypePrinter.cpp:351:1
#25 0x000055cc32e4905b llvm::DWARFTypePrinter::appendSubroutineNameAfter(llvm::DWARFDie, llvm::DWARFDie, bool, bool, bool) /home/ayermolo/local/server-llvm/llvm-project/llvm/lib/DebugInfo/DWARF/DWARFTypePrinter.cpp:584:5
#26 0x000055cc32e4898d llvm::DWARFTypePrinter::appendUnqualifiedNameAfter(llvm::DWARFDie, llvm::DWARFDie, bool) /home/ayermolo/local/server-llvm/llvm-project/llvm/lib/DebugInfo/DWARF/DWARFTypePrinter.cpp:253:5
#27 0x000055cc32e4992b llvm::DWARFTypePrinter::appendUnqualifiedName(llvm::DWARFDie, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char>>*) /home/ayermolo/local/server-llvm/llvm-project/llvm/lib/DebugInfo/DWARF/DWARFTypePrinter.cpp:574:3
#28 0x000055cc32e4986e llvm::DWARFTypePrinter::appendScopes(llvm::DWARFDie) /home/ayermolo/local/server-llvm/llvm-project/llvm/lib/DebugInfo/DWARF/DWARFTypePrinter.cpp:707:5
#29 0x000055cc32e46506 llvm::DWARFTypePrinter::appendQualifiedNameBefore(llvm::DWARFDie) /home/ayermolo/local/server-llvm/llvm-project/llvm/lib/DebugInfo/DWARF/DWARFTypePrinter.cpp:0:7
#30 0x000055cc32e463f2 llvm::DWARFTypePrinter::appendPointerLikeTypeBefore(llvm::DWARFDie, llvm::DWARFDie, llvm::StringRef) /home/ayermolo/local/server-llvm/llvm-project/llvm/lib/DebugInfo/DWARF/DWARFTypePrinter.cpp:115:3
#31 0x000055cc32e4673d llvm::DWARFTypePrinter::appendUnqualifiedNameBefore(llvm::DWARFDie, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char>>*) /home/ayermolo/local/server-llvm/llvm-project/llvm/lib/DebugInfo/DWARF/DWARFTypePrinter.cpp:140:5
#32 0x000055cc32e498e7 llvm::DWARFTypePrinter::appendUnqualifiedName(llvm::DWARFDie, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char>>*) /home/ayermolo/local/server-llvm/llvm-project/llvm/lib/DebugInfo/DWARF/DWARFTypePrinter.cpp:572:22
#33 0x000055cc32e472d3 llvm::DWARFTypePrinter::appendQualifiedName(llvm::DWARFDie) /home/ayermolo/local/server-llvm/llvm-project/llvm/lib/DebugInfo/DWARF/DWARFTypePrinter.cpp:351:1
#34 0x000055cc32e4905b llvm::DWARFTypePrinter::appendSubroutineNameAfter(llvm::DWARFDie, llvm::DWARFDie, bool, bool, bool) /home/ayermolo/local/server-llvm/llvm-project/llvm/lib/DebugInfo/DWARF/DWARFTypePrinter.cpp:584:5
#35 0x000055cc32e4898d llvm::DWARFTypePrinter::appendUnqualifiedNameAfter(llvm::DWARFDie, llvm::DWARFDie, bool) /home/ayermolo/local/server-llvm/llvm-project/llvm/lib/DebugInfo/DWARF/DWARFTypePrinter.cpp:253:5
#36 0x000055cc32e4992b llvm::DWARFTypePrinter::appendUnqualifiedName(llvm::DWARFDie, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char>>*) /home/ayermolo/local/server-llvm/llvm-project/llvm/lib/DebugInfo/DWARF/DWARFTypePrinter.cpp:574:3
#37 0x000055cc32e4986e llvm::DWARFTypePrinter::appendScopes(llvm::DWARFDie) /home/ayermolo/local/server-llvm/llvm-project/llvm/lib/DebugInfo/DWARF/DWARFTypePrinter.cpp:707:5
#38 0x000055cc32e46506 llvm::DWARFTypePrinter::appendQualifiedNameBefore(llvm::DWARFDie) /home/ayermolo/local/server-llvm/llvm-project/llvm/lib/DebugInfo/DWARF/DWARFTypePrinter.cpp:0:7
#39 0x000055cc32e463f2 llvm::DWARFTypePrinter::appendPointerLikeTypeBefore(llvm::DWARFDie, llvm::DWARFDie, llvm::StringRef) /home/ayermolo/local/server-llvm/llvm-project/llvm/lib/DebugInfo/DWARF/DWARFTypePrinter.cpp:115:3
#40 0x000055cc32e4673d llvm::DWARFTypePrinter::appendUnqualifiedNameBefore(llvm::DWARFDie, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char>>*) /home/ayermolo/local/server-llvm/llvm-project/llvm/lib/DebugInfo/DWARF/DWARFTypePrinter.cpp:140:5
#41 0x000055cc32e498e7 llvm::DWARFTypePrinter::appendUnqualifiedName(llvm::DWARFDie, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char>>*) /home/ayermolo/local/server-llvm/llvm-project/llvm/lib/DebugInfo/DWARF/DWARFTypePrinter.cpp:572:22
#42 0x000055cc32e472d3 llvm::DWARFTypePrinter::appendQualifiedName(llvm::DWARFDie) /home/ayermolo/local/server-llvm/llvm-project/llvm/lib/DebugInfo/DWARF/DWARFTypePrinter.cpp:351:1
#43 0x000055cc32e4905b llvm::DWARFTypePrinter::appendSubroutineNameAfter(llvm::DWARFDie, llvm::DWARFDie, bool, bool, bool) /home/ayermolo/local/server-llvm/llvm-project/llvm/lib/DebugInfo/DWARF/DWARFTypePrinter.cpp:584:5
#44 0x000055cc32e4898d llvm::DWARFTypePrinter::appendUnqualifiedNameAfter(llvm::DWARFDie, llvm::DWARFDie, bool) /home/ayermolo/local/server-llvm/llvm-project/llvm/lib/DebugInfo/DWARF/DWARFTypePrinter.cpp:253:5
#45 0x000055cc32e4992b llvm::DWARFTypePrinter::appendUnqualifiedName(llvm::DWARFDie, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char>>*) /home/ayermolo/local/server-llvm/llvm-project/llvm/lib/DebugInfo/DWARF/DWARFTypePrinter.cpp:574:3
Print out with TAGS:
0x000000a1: DW_TAG_formal_parameter [4] (0x00000098)
DW_AT_type [DW_FORM_ref4] (cu + 0x00a6 => {0x000000a6} "
appendQualifiedName: a6 : DW_TAG_pointer_type
appendUnqualifiedName: a6 : DW_TAG_pointer_type
appendUnqualifiedNameBefore: a6 : DW_TAG_pointer_type
appendPointerLikeTypeBefore: a6 : DW_TAG_pointer_type
appendQualifiedNameBefore: ac : DW_TAG_const_type
appendScopes: 98 : DW_TAG_subroutine_type
appendScopes: 5e : DW_TAG_subprogram
appendUnqualifiedName: 98 : DW_TAG_subroutine_type
appendUnqualifiedNameBefore: 98 : DW_TAG_subroutine_type
void appendUnqualifiedNameAfter: 98 : DW_TAG_subroutine_type
appendSubroutineNameAfter: 98 : DW_TAG_subroutine_type
(
appendQualifiedName: a6 : DW_TAG_pointer_type
appendUnqualifiedName: a6 : DW_TAG_pointer_type
appendUnqualifiedNameBefore: a6 : DW_TAG_pointer_type
appendPointerLikeTypeBefore: a6 : DW_TAG_pointer_type
appendQualifiedNameBefore: ac : DW_TAG_const_type
appendScopes: 98 : DW_TAG_subroutine_type
appendScopes: 5e : DW_TAG_subprogram
appendUnqualifiedName: 98 : DW_TAG_subroutine_type
appendUnqualifiedNameBefore: 98 : DW_TAG_subroutine_type
void appendUnqualifiedNameAfter: 98 : DW_TAG_subroutine_type
appendSubroutineNameAfter: 98 : DW_TAG_subroutine_type
(
appendQualifiedName: a6 : DW_TAG_pointer_type
appendUnqualifiedName: a6 : DW_TAG_pointer_type
appendUnqualifiedNameBefore: a6 : DW_TAG_pointer_type
appendPointerLikeTypeBefore: a6 : DW_TAG_pointer_type
appendQualifiedNameBefore: ac : DW_TAG_const_type
appendScopes: 98 : DW_TAG_subroutine_type
appendScopes: 5e : DW_TAG_subprogram
appendUnqualifiedName: 98 : DW_TAG_subroutine_type
appendUnqualifiedNameBefore: 98 : DW_TAG_subroutine_type
void appendUnqualifiedNameAfter: 98 : DW_TAG_subroutine_type
appendSubroutineNameAfter: 98 : DW_TAG_subroutine_type
switch (D.getTag()) {
case dwarf::DW_TAG_structure_type:
case dwarf::DW_TAG_class_type:
case dwarf::DW_TAG_union_type:
case dwarf::DW_TAG_namespace:
case DW_TAG_enumeration_type:
appendScopes(D.getParent());
break;
default:
break;
}
Repository:
rG LLVM Github Monorepo
CHANGES SINCE LAST ACTION
https://reviews.llvm.org/D132900/new/
https://reviews.llvm.org/D132900
More information about the llvm-commits
mailing list