https://github.com/charles-zablit updated https://github.com/llvm/llvm-project/pull/150999
>From 9b3551c6dbf8629c49f2bf3ed3f34e7b4e52e65f Mon Sep 17 00:00:00 2001 From: Charles Zablit <c_zab...@apple.com> Date: Mon, 28 Jul 2025 18:58:44 +0200 Subject: [PATCH 1/4] [lldb] add TemplateRange and NameQualifiersRange to DemangledNameInfo --- lldb/docs/use/formatting.rst | 3 + lldb/include/lldb/Core/DemangledNameInfo.h | 25 ++ lldb/include/lldb/Core/FormatEntity.h | 1 + lldb/source/Core/FormatEntity.cpp | 3 + lldb/unittests/Core/MangledTest.cpp | 259 ++++++++++++++------- 5 files changed, 213 insertions(+), 78 deletions(-) diff --git a/lldb/docs/use/formatting.rst b/lldb/docs/use/formatting.rst index 39ccfed30a2ca..0b60f1e193acb 100644 --- a/lldb/docs/use/formatting.rst +++ b/lldb/docs/use/formatting.rst @@ -89,6 +89,8 @@ A complete list of currently supported format string variables is listed below: +---------------------------------------------------+---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ | ``function.name-without-args`` | The name of the current function without arguments and values (used to include a function name in-line in the ``disassembly-format``) | +---------------------------------------------------+---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ +| ``function.name-qualifiers`` | Any qualifiers added after the name of a function and before its arguments or template arguments. | ++---------------------------------------------------+---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ | ``function.basename`` | The basename of the current function depending on the frame's language. E.g., for C++ the basename for ``void ns::foo<float>::bar<int>(int) const`` is ``bar``. | +---------------------------------------------------+---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ | ``function.prefix`` | Any prefix added to the demangled function name of the current function. This depends on the frame's language. E.g., for C++ the prefix will always be empty. | @@ -332,6 +334,7 @@ The function names displayed in backtraces/``frame info``/``thread info`` are th - ``${function.prefix}`` - ``${function.scope}`` - ``${function.basename}`` +- ``${function.name-qualifiers}`` - ``${function.template-arguments}`` - ``${function.formatted-arguments}`` - ``${function.qualifiers}`` diff --git a/lldb/include/lldb/Core/DemangledNameInfo.h b/lldb/include/lldb/Core/DemangledNameInfo.h index 9f567232dc50f..bdfcb488c2e01 100644 --- a/lldb/include/lldb/Core/DemangledNameInfo.h +++ b/lldb/include/lldb/Core/DemangledNameInfo.h @@ -30,6 +30,16 @@ struct DemangledNameInfo { /// \endcode std::pair<size_t, size_t> BasenameRange; + /// A [start, end) pair for the function template arguments. + /// The basename is the name without scope qualifiers + /// and without template parameters. E.g., + /// \code{.cpp} + /// void foo::bar<int>::someFunc<float>(int) const && + /// ^ ^ + /// start end + /// \endcode + std::pair<size_t, size_t> TemplateRange; + /// A [start, end) pair for the function scope qualifiers. /// E.g., for /// \code{.cpp} @@ -59,6 +69,11 @@ struct DemangledNameInfo { /// \endcode std::pair<size_t, size_t> QualifiersRange; + /// Indicates the [start, end) of the function's name qualifiers. This is a + /// catch-all range for anything in between the basename and the arguments, + /// that is not tracked by the rest of the pairs. + std::pair<size_t, size_t> NameQualifiersRange; + /// Indicates the [start, end) of the function's prefix. This is a /// catch-all range for anything that is not tracked by the rest of /// the pairs. @@ -75,6 +90,11 @@ struct DemangledNameInfo { return BasenameRange.second > BasenameRange.first; } + /// Returns \c true if this object holds a valid template range. + bool hasTemplate() const { + return TemplateRange.second >= TemplateRange.first; + } + /// Returns \c true if this object holds a valid scope range. bool hasScope() const { return ScopeRange.second >= ScopeRange.first; } @@ -88,6 +108,11 @@ struct DemangledNameInfo { return QualifiersRange.second >= QualifiersRange.first; } + /// Returns \c true if this object holds a valid name qualifiers range. + bool hasNameQualifiers() const { + return NameQualifiersRange.second >= NameQualifiersRange.first; + } + /// Returns \c true if this object holds a valid prefix range. bool hasPrefix() const { return PrefixRange.second >= PrefixRange.first; } diff --git a/lldb/include/lldb/Core/FormatEntity.h b/lldb/include/lldb/Core/FormatEntity.h index 17fee068230b2..d602edffb4c88 100644 --- a/lldb/include/lldb/Core/FormatEntity.h +++ b/lldb/include/lldb/Core/FormatEntity.h @@ -91,6 +91,7 @@ struct Entry { FunctionPrefix, FunctionScope, FunctionBasename, + FunctionNameQualifiers, FunctionTemplateArguments, FunctionFormattedArguments, FunctionReturnLeft, diff --git a/lldb/source/Core/FormatEntity.cpp b/lldb/source/Core/FormatEntity.cpp index 370b51e726ec2..5d3c8b421d5d1 100644 --- a/lldb/source/Core/FormatEntity.cpp +++ b/lldb/source/Core/FormatEntity.cpp @@ -128,6 +128,7 @@ constexpr Definition g_function_child_entries[] = { Definition("prefix", EntryType::FunctionPrefix), Definition("scope", EntryType::FunctionScope), Definition("basename", EntryType::FunctionBasename), + Definition("name-qualifiers", EntryType::FunctionNameQualifiers), Definition("template-arguments", EntryType::FunctionTemplateArguments), Definition("formatted-arguments", EntryType::FunctionFormattedArguments), Definition("return-left", EntryType::FunctionReturnLeft), @@ -390,6 +391,7 @@ const char *FormatEntity::Entry::TypeToCString(Type t) { ENUM_TO_CSTR(FunctionPrefix); ENUM_TO_CSTR(FunctionScope); ENUM_TO_CSTR(FunctionBasename); + ENUM_TO_CSTR(FunctionNameQualifiers); ENUM_TO_CSTR(FunctionTemplateArguments); ENUM_TO_CSTR(FunctionFormattedArguments); ENUM_TO_CSTR(FunctionReturnLeft); @@ -1842,6 +1844,7 @@ bool FormatEntity::Format(const Entry &entry, Stream &s, case Entry::Type::FunctionPrefix: case Entry::Type::FunctionScope: case Entry::Type::FunctionBasename: + case Entry::Type::FunctionNameQualifiers: case Entry::Type::FunctionTemplateArguments: case Entry::Type::FunctionFormattedArguments: case Entry::Type::FunctionReturnRight: diff --git a/lldb/unittests/Core/MangledTest.cpp b/lldb/unittests/Core/MangledTest.cpp index 4bda657047541..7d273a46f1174 100644 --- a/lldb/unittests/Core/MangledTest.cpp +++ b/lldb/unittests/Core/MangledTest.cpp @@ -435,142 +435,202 @@ struct DemanglingPartsTestCase { DemanglingPartsTestCase g_demangling_parts_test_cases[] = { // clang-format off { "_ZNVKO3BarIN2ns3QuxIiEEE1CIPFi3FooIS_IiES6_EEE6methodIS6_EENS5_IT_SC_E5InnerIiEESD_SD_", - { /*.BasenameRange=*/{92, 98}, /*.ScopeRange=*/{36, 92}, /*.ArgumentsRange=*/{ 108, 158 }, - /*.QualifiersRange=*/{158, 176}, /*.PrefixRange=*/{0, 0}, /*.SuffixRange=*/{0, 0} }, + { + /*.BasenameRange=*/{92, 98}, /*.TemplateRange=*/{0, 0}, /*.ScopeRange=*/{36, 92}, + /*.ArgumentsRange=*/{108, 158}, /*.QualifiersRange=*/{158, 176}, /*.NameQualifiersRange=*/{0, 0}, + /*.PrefixRange=*/{0, 0}, /*.SuffixRange=*/{0, 0} + }, /*.basename=*/"method", /*.scope=*/"Bar<ns::Qux<int>>::C<int (*)(Foo<Bar<int>, Bar<int>>)>::", /*.qualifiers=*/" const volatile &&" }, { "_Z7getFuncIfEPFiiiET_", - { /*.BasenameRange=*/{6, 13}, /*.ScopeRange=*/{6, 6}, /*.ArgumentsRange=*/{ 20, 27 }, - /*.QualifiersRange=*/{38, 38}, /*.PrefixRange=*/{0, 0}, /*.SuffixRange=*/{0, 0} }, + { + /*.BasenameRange=*/{6, 13}, /*.TemplateRange=*/{0, 0}, /*.ScopeRange=*/{6, 6}, + /*.ArgumentsRange=*/{20, 27}, /*.QualifiersRange=*/{38, 38}, /*.NameQualifiersRange=*/{0, 0}, + /*.PrefixRange=*/{0, 0}, /*.SuffixRange=*/{0, 0} + }, /*.basename=*/"getFunc", /*.scope=*/"", /*.qualifiers=*/"" }, { "_ZN1f1b1c1gEv", - { /*.BasenameRange=*/{9, 10}, /*.ScopeRange=*/{0, 9}, /*.ArgumentsRange=*/{ 10, 12 }, - /*.QualifiersRange=*/{12, 12}, /*.PrefixRange=*/{0, 0}, /*.SuffixRange=*/{0, 0} }, + { + /*.BasenameRange=*/{9, 10}, /*.TemplateRange=*/{0, 0}, /*.ScopeRange=*/{0, 9}, + /*.ArgumentsRange=*/{10, 12}, /*.QualifiersRange=*/{12, 12}, /*.NameQualifiersRange=*/{0, 0}, + /*.PrefixRange=*/{0, 0}, /*.SuffixRange=*/{0, 0} + }, /*.basename=*/"g", /*.scope=*/"f::b::c::", /*.qualifiers=*/"" }, { "_ZN5test73fD1IiEEDTcmtlNS_1DEL_ZNS_1bEEEcvT__EES2_", - { /*.BasenameRange=*/{45, 48}, /*.ScopeRange=*/{38, 45}, /*.ArgumentsRange=*/{ 53, 58 }, - /*.QualifiersRange=*/{58, 58}, /*.PrefixRange=*/{0, 0}, /*.SuffixRange=*/{0, 0} }, + { + /*.BasenameRange=*/{45, 48}, /*.TemplateRange=*/{0, 0}, /*.ScopeRange=*/{38, 45}, + /*.ArgumentsRange=*/{53, 58}, /*.QualifiersRange=*/{58, 58}, /*.NameQualifiersRange=*/{0, 0}, + /*.PrefixRange=*/{0, 0}, /*.SuffixRange=*/{0, 0} + }, /*.basename=*/"fD1", /*.scope=*/"test7::", /*.qualifiers=*/"" }, { "_ZN5test73fD1IiEEDTcmtlNS_1DEL_ZNS_1bINDT1cE1dEEEEEcvT__EES2_", - { /*.BasenameRange=*/{61, 64}, /*.ScopeRange=*/{54, 61}, /*.ArgumentsRange=*/{ 69, 79 }, - /*.QualifiersRange=*/{79, 79}, /*.PrefixRange=*/{0, 0}, /*.SuffixRange=*/{0, 0} }, + { + /*.BasenameRange=*/{61, 64}, /*.TemplateRange=*/{0, 0},/*.ScopeRange=*/{54, 61}, + /*.ArgumentsRange=*/{69, 79}, /*.QualifiersRange=*/{79, 79}, /*.NameQualifiersRange=*/{0, 0}, + /*.PrefixRange=*/{0, 0}, /*.SuffixRange=*/{0, 0} + }, /*.basename=*/"fD1", /*.scope=*/"test7::", /*.qualifiers=*/"" }, { "_ZN5test7INDT1cE1dINDT1cE1dEEEE3fD1INDT1cE1dINDT1cE1dEEEEEDTcmtlNS_1DEL_ZNS_1bINDT1cE1dEEEEEcvT__EES2_", - { /*.BasenameRange=*/{120, 123}, /*.ScopeRange=*/{81, 120}, /*.ArgumentsRange=*/{ 155, 168 }, - /*.QualifiersRange=*/{168, 168}, /*.PrefixRange=*/{0, 0}, /*.SuffixRange=*/{0, 0} }, + { + /*.BasenameRange=*/{120, 123}, /*.TemplateRange=*/{0, 0}, /*.ScopeRange=*/{81, 120}, + /*.ArgumentsRange=*/{155, 168}, /*.QualifiersRange=*/{168, 168}, /*.NameQualifiersRange=*/{0, 0}, + /*.PrefixRange=*/{0, 0}, /*.SuffixRange=*/{0, 0} + }, /*.basename=*/"fD1", /*.scope=*/"test7<decltype(c)::d<decltype(c)::d>>::", /*.qualifiers=*/"" }, { "_ZN8nlohmann16json_abi_v3_11_310basic_jsonINSt3__13mapENS2_6vectorENS2_12basic_stringIcNS2_11char_traitsIcEENS2_9allocatorIcEEEEbxydS8_NS0_14adl_serializerENS4_IhNS8_IhEEEEvE5parseIRA29_KcEESE_OT_NS2_8functionIFbiNS0_6detail13parse_event_tERSE_EEEbb", - { /*.BasenameRange=*/{687, 692}, /*.ScopeRange=*/{343, 687}, /*.ArgumentsRange=*/{ 713, 1174 }, - /*.QualifiersRange=*/{1174, 1174}, /*.PrefixRange=*/{0, 0}, /*.SuffixRange=*/{0, 0} }, + { + /*.BasenameRange=*/{687, 692}, /*.TemplateRange=*/{0, 0}, /*.ScopeRange=*/{343, 687}, + /*.ArgumentsRange=*/{713, 1174}, /*.QualifiersRange=*/{1174, 1174}, /*.NameQualifiersRange=*/{0, 0}, + /*.PrefixRange=*/{0, 0}, /*.SuffixRange=*/{0, 0} + }, /*.basename=*/"parse", /*.scope=*/"nlohmann::json_abi_v3_11_3::basic_json<std::__1::map, std::__1::vector, std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char>>, bool, long long, unsigned long long, double, std::__1::allocator, nlohmann::json_abi_v3_11_3::adl_serializer, std::__1::vector<unsigned char, std::__1::allocator<unsigned char>>, void>::", /*.qualifiers=*/"" }, { "_ZN8nlohmann16json_abi_v3_11_310basic_jsonINSt3__13mapENS2_6vectorENS2_12basic_stringIcNS2_11char_traitsIcEENS2_9allocatorIcEEEEbxydS8_NS0_14adl_serializerENS4_IhNS8_IhEEEEvEC1EDn", - { /*.BasenameRange=*/{344, 354}, /*.ScopeRange=*/{0, 344}, /*.ArgumentsRange=*/{ 354, 370 }, - /*.QualifiersRange=*/{370, 370}, /*.PrefixRange=*/{0, 0}, /*.SuffixRange=*/{0, 0} }, + { + /*.BasenameRange=*/{344, 354}, /*.TemplateRange=*/{0, 0}, /*.ScopeRange=*/{0, 344}, + /*.ArgumentsRange=*/{354, 370}, /*.QualifiersRange=*/{370, 370}, /*.NameQualifiersRange=*/{0, 0}, + /*.PrefixRange=*/{0, 0}, /*.SuffixRange=*/{0, 0} + }, /*.basename=*/"basic_json", /*.scope=*/"nlohmann::json_abi_v3_11_3::basic_json<std::__1::map, std::__1::vector, std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char>>, bool, long long, unsigned long long, double, std::__1::allocator, nlohmann::json_abi_v3_11_3::adl_serializer, std::__1::vector<unsigned char, std::__1::allocator<unsigned char>>, void>::", /*.qualifiers=*/"" }, { "_Z3fppIiEPFPFvvEiEf", - { /*.BasenameRange=*/{10, 13}, /*.ScopeRange=*/{10, 10}, /*.ArgumentsRange=*/{ 18, 25 }, - /*.QualifiersRange=*/{34,34}, /*.PrefixRange=*/{0, 0}, /*.SuffixRange=*/{0, 0} }, + { + /*.BasenameRange=*/{10, 13}, /*.TemplateRange=*/{0, 0}, /*.ScopeRange=*/{10, 10}, + /*.ArgumentsRange=*/{18, 25}, /*.QualifiersRange=*/{34,34}, /*.NameQualifiersRange=*/{0, 0}, + /*.PrefixRange=*/{0, 0}, /*.SuffixRange=*/{0, 0} + }, /*.basename=*/"fpp", /*.scope=*/"", /*.qualifiers=*/"" }, { "_Z3fppIiEPFPFvvEN2ns3FooIiEEEf", - { /*.BasenameRange=*/{10, 13}, /*.ScopeRange=*/{10, 10}, /*.ArgumentsRange=*/{ 18, 25 }, - /*.QualifiersRange=*/{43, 43}, /*.PrefixRange=*/{0, 0}, /*.SuffixRange=*/{0, 0} }, + { + /*.BasenameRange=*/{10, 13}, /*.TemplateRange=*/{0, 0}, /*.ScopeRange=*/{10, 10}, + /*.ArgumentsRange=*/{18, 25}, /*.QualifiersRange=*/{43, 43}, /*.NameQualifiersRange=*/{0, 0}, + /*.PrefixRange=*/{0, 0}, /*.SuffixRange=*/{0, 0} + }, /*.basename=*/"fpp", /*.scope=*/"", /*.qualifiers=*/"" }, { "_Z3fppIiEPFPFvPFN2ns3FooIiEENS2_3BarIfE3QuxEEEPFS2_S2_EEf", - { /*.BasenameRange=*/{10, 13}, /*.ScopeRange=*/{10, 10}, /*.ArgumentsRange=*/{ 18, 25 }, - /*.QualifiersRange=*/{108, 108}, /*.PrefixRange=*/{0, 0}, /*.SuffixRange=*/{0, 0} }, + { + /*.BasenameRange=*/{10, 13}, /*.TemplateRange=*/{0, 0}, /*.ScopeRange=*/{10, 10}, + /*.ArgumentsRange=*/{18, 25}, /*.QualifiersRange=*/{108, 108}, /*.NameQualifiersRange=*/{0, 0}, + /*.PrefixRange=*/{0, 0}, /*.SuffixRange=*/{0, 0} + }, /*.basename=*/"fpp", /*.scope=*/"", /*.qualifiers=*/"" }, { "_ZN2ns8HasFuncsINS_3FooINS1_IiE3BarIfE3QuxEEEE3fppIiEEPFPFvvEiEf", - { /*.BasenameRange=*/{64, 67}, /*.ScopeRange=*/{10, 64}, /*.ArgumentsRange=*/{ 72, 79 }, - /*.QualifiersRange=*/{88, 88}, /*.PrefixRange=*/{0, 0}, /*.SuffixRange=*/{0, 0} }, + { + /*.BasenameRange=*/{64, 67}, /*.TemplateRange=*/{0, 0}, /*.ScopeRange=*/{10, 64}, + /*.ArgumentsRange=*/{72, 79}, /*.QualifiersRange=*/{88, 88}, /*.NameQualifiersRange=*/{0, 0}, + /*.PrefixRange=*/{0, 0}, /*.SuffixRange=*/{0, 0} + }, /*.basename=*/"fpp", /*.scope=*/"ns::HasFuncs<ns::Foo<ns::Foo<int>::Bar<float>::Qux>>::", /*.qualifiers=*/"" }, { "_ZN2ns8HasFuncsINS_3FooINS1_IiE3BarIfE3QuxEEEE3fppIiEEPFPFvvES2_Ef", - { /*.BasenameRange=*/{64, 67}, /*.ScopeRange=*/{10, 64}, /*.ArgumentsRange=*/{ 72, 79 }, - /*.QualifiersRange=*/{97, 97}, /*.PrefixRange=*/{0, 0}, /*.SuffixRange=*/{0, 0} }, + { + /*.BasenameRange=*/{64, 67}, /*.TemplateRange=*/{0, 0}, /*.ScopeRange=*/{10, 64}, + /*.ArgumentsRange=*/{72, 79}, /*.QualifiersRange=*/{97, 97}, /*.NameQualifiersRange=*/{0, 0}, + /*.PrefixRange=*/{0, 0}, /*.SuffixRange=*/{0, 0} + }, /*.basename=*/"fpp", /*.scope=*/"ns::HasFuncs<ns::Foo<ns::Foo<int>::Bar<float>::Qux>>::", /*.qualifiers=*/"", }, { "_ZN2ns8HasFuncsINS_3FooINS1_IiE3BarIfE3QuxEEEE3fppIiEEPFPFvPFS2_S5_EEPFS2_S2_EEf", - { /*.BasenameRange=*/{64, 67}, /*.ScopeRange=*/{10, 64}, /*.ArgumentsRange=*/{ 72, 79 }, - /*.QualifiersRange=*/{162, 162}, /*.PrefixRange=*/{0, 0}, /*.SuffixRange=*/{0, 0} }, + { + /*.BasenameRange=*/{64, 67}, /*.TemplateRange=*/{0, 0}, /*.ScopeRange=*/{10, 64}, + /*.ArgumentsRange=*/{72, 79}, /*.QualifiersRange=*/{162, 162}, /*.NameQualifiersRange=*/{0, 0}, + /*.PrefixRange=*/{0, 0}, /*.SuffixRange=*/{0, 0} + }, /*.basename=*/"fpp", /*.scope=*/"ns::HasFuncs<ns::Foo<ns::Foo<int>::Bar<float>::Qux>>::", /*.qualifiers=*/"", }, { "_ZNKO2ns3ns23Bar3fooIiEEPFPFNS0_3FooIiEEiENS3_IfEEEi", - { /*.BasenameRange=*/{37, 40}, /*.ScopeRange=*/{23, 37}, /*.ArgumentsRange=*/{ 45, 50 }, - /*.QualifiersRange=*/{78, 87}, /*.PrefixRange=*/{0, 0}, /*.SuffixRange=*/{0, 0} }, + { + /*.BasenameRange=*/{37, 40}, /*.TemplateRange=*/{0, 0}, /*.ScopeRange=*/{23, 37}, + /*.ArgumentsRange=*/{45, 50}, /*.QualifiersRange=*/{78, 87}, /*.NameQualifiersRange=*/{0, 0}, + /*.PrefixRange=*/{0, 0}, /*.SuffixRange=*/{0, 0} + }, /*.basename=*/"foo", /*.scope=*/"ns::ns2::Bar::", /*.qualifiers=*/" const &&", }, { "_ZTV11ImageLoader", - { /*.BasenameRange=*/{0, 0}, /*.ScopeRange=*/{0, 0}, /*.ArgumentsRange=*/{ 0, 0 }, - /*.QualifiersRange=*/{0, 0}, /*.PrefixRange=*/{0, 0}, /*.SuffixRange=*/{0, 0} }, + { + /*.BasenameRange=*/{0, 0}, /*.TemplateRange=*/{0, 0}, /*.ScopeRange=*/{0, 0}, + /*.ArgumentsRange=*/{0, 0}, /*.QualifiersRange=*/{0, 0}, /*.NameQualifiersRange=*/{0, 0}, + /*.PrefixRange=*/{0, 0}, /*.SuffixRange=*/{0, 0} + }, /*.basename=*/"", /*.scope=*/"", /*.qualifiers=*/"", /*.valid_basename=*/false }, { "___ZNK5dyld313MachOAnalyzer18forEachInitializerER11DiagnosticsRKNS0_15VMAddrConverterEU13block_pointerFvjEPKv_block_invoke.204", - { /*.BasenameRange=*/{55, 73}, /*.ScopeRange=*/{33, 55}, /*.ArgumentsRange=*/{ 73, 181 }, - /*.QualifiersRange=*/{181, 187}, /*.PrefixRange=*/{0, 0}, /*.SuffixRange=*/{0, 0} }, + { + /*.BasenameRange=*/{55, 73}, /*.TemplateRange=*/{0, 0}, /*.ScopeRange=*/{33, 55}, + /*.ArgumentsRange=*/{73, 181}, /*.QualifiersRange=*/{181, 187}, /*.NameQualifiersRange=*/{0, 0}, + /*.PrefixRange=*/{0, 0}, /*.SuffixRange=*/{0, 0} + }, /*.basename=*/"forEachInitializer", /*.scope=*/"dyld3::MachOAnalyzer::", /*.qualifiers=*/" const", }, { "_ZZN5dyld45startEPNS_10KernelArgsEPvS2_ENK3$_1clEv", - { /*.BasenameRange=*/{53, 63}, /*.ScopeRange=*/{0, 53}, /*.ArgumentsRange=*/{ 63, 65 }, - /*.QualifiersRange=*/{65, 71}, /*.PrefixRange=*/{0, 0}, /*.SuffixRange=*/{0, 0} }, + { + /*.BasenameRange=*/{53, 63}, /*.TemplateRange=*/{0, 0}, /*.ScopeRange=*/{0, 53}, + /*.ArgumentsRange=*/{63, 65}, /*.QualifiersRange=*/{65, 71}, /*.NameQualifiersRange=*/{0, 0}, + /*.PrefixRange=*/{0, 0}, /*.SuffixRange=*/{0, 0} + }, /*.basename=*/"operator()", /*.scope=*/"dyld4::start(dyld4::KernelArgs*, void*, void*)::$_1::", /*.qualifiers=*/" const", }, { "_ZZNK5dyld46Loader38runInitializersBottomUpPlusUpwardLinksERNS_12RuntimeStateEENK3$_0clEv", - { /*.BasenameRange=*/{88, 98}, /*.ScopeRange=*/{0, 88}, /*.ArgumentsRange=*/{ 98, 100 }, - /*.QualifiersRange=*/{100, 106}, /*.PrefixRange=*/{0, 0}, /*.SuffixRange=*/{0, 0} }, + { + /*.BasenameRange=*/{88, 98}, /*.TemplateRange=*/{0, 0}, /*.ScopeRange=*/{0, 88}, + /*.ArgumentsRange=*/{98, 100}, /*.QualifiersRange=*/{100, 106}, /*.NameQualifiersRange=*/{0, 0}, + /*.PrefixRange=*/{0, 0}, /*.SuffixRange=*/{0, 0} + }, /*.basename=*/"operator()", /*.scope=*/"dyld4::Loader::runInitializersBottomUpPlusUpwardLinks(dyld4::RuntimeState&) const::$_0::", /*.qualifiers=*/" const", }, { "_ZZNK5dyld46Loader38runInitializersBottomUpPlusUpwardLinksERNS_12RuntimeStateEENK3$_0clEv.cold", - { /*.BasenameRange=*/{88, 98}, /*.ScopeRange=*/{0, 88}, /*.ArgumentsRange=*/{ 98, 100 }, - /*.QualifiersRange=*/{100, 106}, /*.PrefixRange=*/{0, 0}, /*.SuffixRange=*/{0, 0} }, + { + /*.BasenameRange=*/{88, 98}, /*.TemplateRange=*/{0, 0}, /*.ScopeRange=*/{0, 88}, + /*.ArgumentsRange=*/{98, 100}, /*.QualifiersRange=*/{100, 106}, /*.NameQualifiersRange=*/{0, 0}, + /*.PrefixRange=*/{0, 0}, /*.SuffixRange=*/{0, 0} + }, /*.basename=*/"operator()", /*.scope=*/"dyld4::Loader::runInitializersBottomUpPlusUpwardLinks(dyld4::RuntimeState&) const::$_0::", /*.qualifiers=*/" const", @@ -638,57 +698,97 @@ INSTANTIATE_TEST_SUITE_P(DemanglingPartsTests, DemanglingPartsTestFixture, struct DemangledNameInfoTestCase { DemangledNameInfo expected_info; bool valid_basename; + bool valid_template; bool valid_scope; bool valid_arguments; bool valid_qualifiers; + bool valid_name_qualifiers; bool valid_prefix; bool valid_suffix; }; DemangledNameInfoTestCase g_demangled_name_info_test_cases[] = { // clang-format off - { - { /*.BasenameRange=*/{0, 10}, /*.ScopeRange=*/{1, 0}, /*.ArgumentsRange=*/{1, 0}, - /*.QualifiersRange=*/{1, 0}, /*.PrefixRange=*/{1, 0}, /*.SuffixRange=*/{1, 0} + { + { + /*.BasenameRange=*/{0, 10}, /*.TemplateRange=*/{1, 0}, /*.ScopeRange=*/{1, 0}, + /*.ArgumentsRange=*/{1, 0}, /*.QualifiersRange=*/{1, 0}, /*.NameQualifiersRange=*/{1, 0}, /*.PrefixRange=*/{1, 0}, + /*.SuffixRange=*/{1, 0} }, - /*valid_basename=*/true, /*valid_scope=*/false, /*valid_arguments=*/false, - /*valid_qualifiers=*/false, /*valid_prefix=*/false, /*valid_suffix=*/false, - }, - { - { /*.BasenameRange=*/{1, 0}, /*.ScopeRange=*/{0, 10}, /*.ArgumentsRange=*/{1, 0}, - /*.QualifiersRange=*/{1, 0}, /*.PrefixRange=*/{1, 0}, /*.SuffixRange=*/{1, 0} + /*valid_basename=*/true, /*valid_template=*/false, /*valid_scope=*/false, + /*valid_arguments=*/false, /*valid_qualifiers=*/false, /*valid_name_qualifiers=*/false, + /*valid_prefix=*/false, /*valid_suffix=*/false, + }, + { + { + /*.BasenameRange=*/{1, 0}, /*.TemplateRange=*/{0, 10}, /*.ScopeRange=*/{1, 0}, + /*.ArgumentsRange=*/{1, 0}, /*.QualifiersRange=*/{1, 0}, /*.NameQualifiersRange=*/{1, 0}, /*.PrefixRange=*/{1, 0}, + /*.SuffixRange=*/{1, 0} }, - /*valid_basename=*/false, /*valid_scope=*/true, /*valid_arguments=*/false, - /*valid_qualifiers=*/false, /*valid_prefix=*/false, /*valid_suffix=*/false, - }, - { - { /*.BasenameRange=*/{1, 0}, /*.ScopeRange=*/{1, 0}, /*.ArgumentsRange=*/{0, 10}, - /*.QualifiersRange=*/{1, 0}, /*.PrefixRange=*/{1, 0}, /*.SuffixRange=*/{1, 0} + /*valid_basename=*/false, /*valid_name_qualifiers=*/true, /*valid_scope=*/false, + /*valid_arguments=*/false, /*valid_qualifiers=*/false, /*valid_name_qualifiers=*/false, + /*valid_prefix=*/false, /*valid_suffix=*/false, + }, + { + { + /*.BasenameRange=*/{1, 0}, /*.TemplateRange=*/{1, 0}, /*.ScopeRange=*/{0, 10}, + /*.ArgumentsRange=*/{1, 0}, /*.QualifiersRange=*/{1, 0}, /*.NameQualifiersRange=*/{1, 0}, /*.PrefixRange=*/{1, 0}, + /*.SuffixRange=*/{1, 0} }, - /*valid_basename=*/false, /*valid_scope=*/false, /*valid_arguments=*/true, - /*valid_qualifiers=*/false, /*valid_prefix=*/false, /*valid_suffix=*/false, - }, - { - { /*.BasenameRange=*/{1, 0}, /*.ScopeRange=*/{1, 0}, /*.ArgumentsRange=*/{1, 0}, - /*.QualifiersRange=*/{0, 10}, /*.PrefixRange=*/{1, 0}, /*.SuffixRange=*/{1, 0} + /*valid_basename=*/false, /*valid_template=*/false, /*valid_scope=*/true, + /*valid_arguments=*/false, /*valid_qualifiers=*/false, /*valid_name_qualifiers=*/false, + /*valid_prefix=*/false, /*valid_suffix=*/false, + }, + { + { + /*.BasenameRange=*/{1, 0}, /*.TemplateRange=*/{1, 0}, /*.ScopeRange=*/{1, 0}, + /*.ArgumentsRange=*/{0, 10}, /*.QualifiersRange=*/{1, 0}, /*.NameQualifiersRange=*/{1, 0}, /*.PrefixRange=*/{1, 0}, + /*.SuffixRange=*/{1, 0} }, - /*valid_basename=*/false, /*valid_scope=*/false, /*valid_arguments=*/false, - /*valid_qualifiers=*/true, /*valid_prefix=*/false, /*valid_suffix=*/false, - }, - { - { /*.BasenameRange=*/{1, 0}, /*.ScopeRange=*/{1, 0}, /*.ArgumentsRange=*/{1, 0}, - /*.QualifiersRange=*/{1, 0}, /*.PrefixRange=*/{0, 10}, /*.SuffixRange=*/{1, 0} + /*valid_basename=*/false, /*valid_template=*/false, /*valid_scope=*/false, + /*valid_arguments=*/true, /*valid_qualifiers=*/false, /*valid_name_qualifiers=*/false, + /*valid_prefix=*/false, /*valid_suffix=*/false, + }, + { + { + /*.BasenameRange=*/{1, 0}, /*.TemplateRange=*/{1, 0}, /*.ScopeRange=*/{1, 0}, + /*.ArgumentsRange=*/{1, 0}, /*.QualifiersRange=*/{0, 10}, /*.NameQualifiersRange=*/{1, 0}, /*.PrefixRange=*/{1, 0}, + /*.SuffixRange=*/{1, 0} }, - /*valid_basename=*/false, /*valid_scope=*/false, /*valid_arguments=*/false, - /*valid_qualifiers=*/false, /*valid_prefix=*/true, /*valid_suffix=*/false, - }, - { - { /*.BasenameRange=*/{1, 0}, /*.ScopeRange=*/{1, 0}, /*.ArgumentsRange=*/{1, 0}, - /*.QualifiersRange=*/{1, 0}, /*.PrefixRange=*/{1, 0}, /*.SuffixRange=*/{0, 10} + /*valid_basename=*/false, /*valid_template=*/false, /*valid_scope=*/false, + /*valid_arguments=*/false, /*valid_qualifiers=*/true, /*valid_name_qualifiers=*/false, + /*valid_prefix=*/false, /*valid_suffix=*/false, + }, + { + { + /*.BasenameRange=*/{1, 0}, /*.TemplateRange=*/{1, 0}, /*.ScopeRange=*/{1, 0}, + /*.ArgumentsRange=*/{1, 0}, /*.QualifiersRange=*/{1, 0}, /*.NameQualifiersRange=*/{0, 10}, /*.PrefixRange=*/{1, 0}, + /*.SuffixRange=*/{1, 0} }, - /*valid_basename=*/false, /*valid_scope=*/false, /*valid_arguments=*/false, - /*valid_qualifiers=*/false, /*valid_prefix=*/false, /*valid_suffix=*/true, - }, + /*valid_basename=*/false, /*valid_template=*/false, /*valid_scope=*/false, + /*valid_arguments=*/false, /*valid_qualifiers=*/false, /*valid_name_qualifiers=*/true, + /*valid_prefix=*/false, /*valid_suffix=*/false, + }, + { + { + /*.BasenameRange=*/{1, 0}, /*.TemplateRange=*/{1, 0}, /*.ScopeRange=*/{1, 0}, + /*.ArgumentsRange=*/{1, 0}, /*.QualifiersRange=*/{1, 0}, /*.NameQualifiersRange=*/{1, 0}, /*.PrefixRange=*/{0, 10}, + /*.SuffixRange=*/{1, 0} + }, + /*valid_basename=*/false, /*valid_template=*/false, /*valid_scope=*/false, + /*valid_arguments=*/false, /*valid_qualifiers=*/false, /*valid_name_qualifiers=*/false, + /*valid_prefix=*/true, /*valid_suffix=*/false, + }, + { + { + /*.BasenameRange=*/{1, 0}, /*.TemplateRange=*/{1, 0}, /*.ScopeRange=*/{1, 0}, + /*.ArgumentsRange=*/{1, 0}, /*.QualifiersRange=*/{1, 0}, /*.NameQualifiersRange=*/{1, 0}, /*.PrefixRange=*/{1, 0}, + /*.SuffixRange=*/{0, 10} + }, + /*valid_basename=*/false, /*valid_template=*/false, /*valid_scope=*/false, + /*valid_arguments=*/false, /*valid_qualifiers=*/false, /*valid_name_qualifiers=*/false, + /*valid_prefix=*/false, /*valid_suffix=*/true, + }, // clang-format on }; @@ -696,13 +796,16 @@ struct DemangledNameInfoTestFixture : public ::testing::TestWithParam<DemangledNameInfoTestCase> {}; TEST_P(DemangledNameInfoTestFixture, DemangledNameInfoRanges) { - const auto &[info, valid_basename, valid_scope, valid_arguments, - valid_qualifiers, valid_prefix, valid_suffix] = GetParam(); + const auto &[info, valid_basename, valid_template, valid_scope, + valid_arguments, valid_qualifiers, valid_name_qualifiers, + valid_prefix, valid_suffix] = GetParam(); ASSERT_EQ(info.hasBasename(), valid_basename); + ASSERT_EQ(info.hasTemplate(), valid_template); ASSERT_EQ(info.hasScope(), valid_scope); ASSERT_EQ(info.hasArguments(), valid_arguments); ASSERT_EQ(info.hasQualifiers(), valid_qualifiers); + ASSERT_EQ(info.hasNameQualifiers(), valid_name_qualifiers); ASSERT_EQ(info.hasPrefix(), valid_prefix); ASSERT_EQ(info.hasSuffix(), valid_suffix); } >From a059d5181b827e56b3fe02f527b96a6dc1b80e9b Mon Sep 17 00:00:00 2001 From: Charles Zablit <c_zab...@apple.com> Date: Tue, 29 Jul 2025 17:40:09 +0100 Subject: [PATCH 2/4] embed the logic for TemplateArgumentsRange inside the demangler --- lldb/docs/use/formatting.rst | 2 +- lldb/include/lldb/Core/DemangledNameInfo.h | 39 ++++++-- lldb/source/Core/DemangledNameInfo.cpp | 4 + .../Language/CPlusPlus/CPlusPlusLanguage.cpp | 10 +- lldb/unittests/Core/MangledTest.cpp | 97 ++++++++++--------- 5 files changed, 89 insertions(+), 63 deletions(-) diff --git a/lldb/docs/use/formatting.rst b/lldb/docs/use/formatting.rst index 0b60f1e193acb..4967f6b7c2be7 100644 --- a/lldb/docs/use/formatting.rst +++ b/lldb/docs/use/formatting.rst @@ -89,7 +89,7 @@ A complete list of currently supported format string variables is listed below: +---------------------------------------------------+---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ | ``function.name-without-args`` | The name of the current function without arguments and values (used to include a function name in-line in the ``disassembly-format``) | +---------------------------------------------------+---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ -| ``function.name-qualifiers`` | Any qualifiers added after the name of a function and before its arguments or template arguments. | +| ``function.name-qualifiers`` | Any qualifiers added after the name of a function and before its arguments or template arguments. E.g., for Swift the name qualifier for ``closure #1 in A.foo<Int>()`` is `` in A.foo``. | +---------------------------------------------------+---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ | ``function.basename`` | The basename of the current function depending on the frame's language. E.g., for C++ the basename for ``void ns::foo<float>::bar<int>(int) const`` is ``bar``. | +---------------------------------------------------+---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ diff --git a/lldb/include/lldb/Core/DemangledNameInfo.h b/lldb/include/lldb/Core/DemangledNameInfo.h index bdfcb488c2e01..0ee24d02a0c55 100644 --- a/lldb/include/lldb/Core/DemangledNameInfo.h +++ b/lldb/include/lldb/Core/DemangledNameInfo.h @@ -22,7 +22,9 @@ namespace lldb_private { struct DemangledNameInfo { /// A [start, end) pair for the function basename. /// The basename is the name without scope qualifiers - /// and without template parameters. E.g., + /// and without template parameters. + /// + /// E.g., /// \code{.cpp} /// void foo::bar<int>::someFunc<float>(int) const && /// ^ ^ @@ -31,17 +33,18 @@ struct DemangledNameInfo { std::pair<size_t, size_t> BasenameRange; /// A [start, end) pair for the function template arguments. - /// The basename is the name without scope qualifiers - /// and without template parameters. E.g., + /// + /// E.g., /// \code{.cpp} /// void foo::bar<int>::someFunc<float>(int) const && - /// ^ ^ - /// start end + /// ^ ^ + /// start end /// \endcode - std::pair<size_t, size_t> TemplateRange; + std::pair<size_t, size_t> TemplateArgumentsRange; /// A [start, end) pair for the function scope qualifiers. - /// E.g., for + /// + /// E.g., /// \code{.cpp} /// void foo::bar<int>::qux<float>(int) const && /// ^ ^ @@ -50,6 +53,7 @@ struct DemangledNameInfo { std::pair<size_t, size_t> ScopeRange; /// Indicates the [start, end) of the function argument list. + /// /// E.g., /// \code{.cpp} /// int (*getFunc<float>(float, double))(int, int) @@ -72,6 +76,13 @@ struct DemangledNameInfo { /// Indicates the [start, end) of the function's name qualifiers. This is a /// catch-all range for anything in between the basename and the arguments, /// that is not tracked by the rest of the pairs. + /// + /// E.g., + /// \code{.swift} + /// void foo::bar<int>::qux<float>(int) const && + /// ^ ^ + /// start end + /// \endcode std::pair<size_t, size_t> NameQualifiersRange; /// Indicates the [start, end) of the function's prefix. This is a @@ -90,9 +101,9 @@ struct DemangledNameInfo { return BasenameRange.second > BasenameRange.first; } - /// Returns \c true if this object holds a valid template range. - bool hasTemplate() const { - return TemplateRange.second >= TemplateRange.first; + /// Returns \c true if this object holds a valid template arguments range. + bool hasTemplateArguments() const { + return TemplateArgumentsRange.second >= TemplateArgumentsRange.first; } /// Returns \c true if this object holds a valid scope range. @@ -172,6 +183,14 @@ struct TrackingOutputBuffer : public llvm::itanium_demangle::OutputBuffer { /// the basename range to the current \c OB position. void updateBasenameEnd(); + /// If this object \ref shouldTrack, then update the beginning of + /// the template arguments range to the current \c OB position. + void updateTemplateArgumentsStart(); + + /// If this object \ref shouldTrack, then update the end of + /// the template arguments range to the current \c OB position. + void updateTemplateArgumentsEnd(); + /// If this object \ref shouldTrack, then update the beginning /// of the scope range to the current \c OB position. void updateScopeStart(); diff --git a/lldb/source/Core/DemangledNameInfo.cpp b/lldb/source/Core/DemangledNameInfo.cpp index 54a06edc5ec1d..95db524fba2da 100644 --- a/lldb/source/Core/DemangledNameInfo.cpp +++ b/lldb/source/Core/DemangledNameInfo.cpp @@ -92,6 +92,10 @@ void TrackingOutputBuffer::finalizeStart() { if (NameInfo.BasenameRange.second == 0) NameInfo.BasenameRange.second = getCurrentPosition(); + if (NameInfo.BasenameRange.second != NameInfo.ArgumentsRange.first) + NameInfo.TemplateArgumentsRange = {NameInfo.BasenameRange.second, + NameInfo.ArgumentsRange.first}; + assert(!shouldTrack()); assert(canFinalize()); } diff --git a/lldb/source/Plugins/Language/CPlusPlus/CPlusPlusLanguage.cpp b/lldb/source/Plugins/Language/CPlusPlus/CPlusPlusLanguage.cpp index 46753c5efc331..3353d5a898898 100644 --- a/lldb/source/Plugins/Language/CPlusPlus/CPlusPlusLanguage.cpp +++ b/lldb/source/Plugins/Language/CPlusPlus/CPlusPlusLanguage.cpp @@ -283,12 +283,12 @@ GetDemangledTemplateArguments(const SymbolContext &sc) { auto [demangled_name, info] = *info_or_err; - if (info.ArgumentsRange.first < info.BasenameRange.second) - return llvm::createStringError("Arguments range for '%s' is invalid.", - demangled_name.data()); + if (!info.hasTemplateArguments()) + return llvm::createStringError( + "Template arguments range for '%s' is invalid.", demangled_name.data()); - return demangled_name.slice(info.BasenameRange.second, - info.ArgumentsRange.first); + return demangled_name.slice(info.TemplateArgumentsRange.first, + info.TemplateArgumentsRange.second); } static llvm::Expected<llvm::StringRef> diff --git a/lldb/unittests/Core/MangledTest.cpp b/lldb/unittests/Core/MangledTest.cpp index 7d273a46f1174..06494274ef2e2 100644 --- a/lldb/unittests/Core/MangledTest.cpp +++ b/lldb/unittests/Core/MangledTest.cpp @@ -436,7 +436,7 @@ DemanglingPartsTestCase g_demangling_parts_test_cases[] = { // clang-format off { "_ZNVKO3BarIN2ns3QuxIiEEE1CIPFi3FooIS_IiES6_EEE6methodIS6_EENS5_IT_SC_E5InnerIiEESD_SD_", { - /*.BasenameRange=*/{92, 98}, /*.TemplateRange=*/{0, 0}, /*.ScopeRange=*/{36, 92}, + /*.BasenameRange=*/{92, 98}, /*.TemplateArgumentsRange=*/{98, 108}, /*.ScopeRange=*/{36, 92}, /*.ArgumentsRange=*/{108, 158}, /*.QualifiersRange=*/{158, 176}, /*.NameQualifiersRange=*/{0, 0}, /*.PrefixRange=*/{0, 0}, /*.SuffixRange=*/{0, 0} }, @@ -446,7 +446,7 @@ DemanglingPartsTestCase g_demangling_parts_test_cases[] = { }, { "_Z7getFuncIfEPFiiiET_", { - /*.BasenameRange=*/{6, 13}, /*.TemplateRange=*/{0, 0}, /*.ScopeRange=*/{6, 6}, + /*.BasenameRange=*/{6, 13}, /*.TemplateArgumentsRange=*/{13, 20}, /*.ScopeRange=*/{6, 6}, /*.ArgumentsRange=*/{20, 27}, /*.QualifiersRange=*/{38, 38}, /*.NameQualifiersRange=*/{0, 0}, /*.PrefixRange=*/{0, 0}, /*.SuffixRange=*/{0, 0} }, @@ -456,7 +456,7 @@ DemanglingPartsTestCase g_demangling_parts_test_cases[] = { }, { "_ZN1f1b1c1gEv", { - /*.BasenameRange=*/{9, 10}, /*.TemplateRange=*/{0, 0}, /*.ScopeRange=*/{0, 9}, + /*.BasenameRange=*/{9, 10}, /*.TemplateArgumentsRange=*/{0, 0}, /*.ScopeRange=*/{0, 9}, /*.ArgumentsRange=*/{10, 12}, /*.QualifiersRange=*/{12, 12}, /*.NameQualifiersRange=*/{0, 0}, /*.PrefixRange=*/{0, 0}, /*.SuffixRange=*/{0, 0} }, @@ -466,7 +466,7 @@ DemanglingPartsTestCase g_demangling_parts_test_cases[] = { }, { "_ZN5test73fD1IiEEDTcmtlNS_1DEL_ZNS_1bEEEcvT__EES2_", { - /*.BasenameRange=*/{45, 48}, /*.TemplateRange=*/{0, 0}, /*.ScopeRange=*/{38, 45}, + /*.BasenameRange=*/{45, 48}, /*.TemplateArgumentsRange=*/{48, 53}, /*.ScopeRange=*/{38, 45}, /*.ArgumentsRange=*/{53, 58}, /*.QualifiersRange=*/{58, 58}, /*.NameQualifiersRange=*/{0, 0}, /*.PrefixRange=*/{0, 0}, /*.SuffixRange=*/{0, 0} }, @@ -476,7 +476,7 @@ DemanglingPartsTestCase g_demangling_parts_test_cases[] = { }, { "_ZN5test73fD1IiEEDTcmtlNS_1DEL_ZNS_1bINDT1cE1dEEEEEcvT__EES2_", { - /*.BasenameRange=*/{61, 64}, /*.TemplateRange=*/{0, 0},/*.ScopeRange=*/{54, 61}, + /*.BasenameRange=*/{61, 64}, /*.TemplateArgumentsRange=*/{64, 69},/*.ScopeRange=*/{54, 61}, /*.ArgumentsRange=*/{69, 79}, /*.QualifiersRange=*/{79, 79}, /*.NameQualifiersRange=*/{0, 0}, /*.PrefixRange=*/{0, 0}, /*.SuffixRange=*/{0, 0} }, @@ -486,7 +486,7 @@ DemanglingPartsTestCase g_demangling_parts_test_cases[] = { }, { "_ZN5test7INDT1cE1dINDT1cE1dEEEE3fD1INDT1cE1dINDT1cE1dEEEEEDTcmtlNS_1DEL_ZNS_1bINDT1cE1dEEEEEcvT__EES2_", { - /*.BasenameRange=*/{120, 123}, /*.TemplateRange=*/{0, 0}, /*.ScopeRange=*/{81, 120}, + /*.BasenameRange=*/{120, 123}, /*.TemplateArgumentsRange=*/{123, 155}, /*.ScopeRange=*/{81, 120}, /*.ArgumentsRange=*/{155, 168}, /*.QualifiersRange=*/{168, 168}, /*.NameQualifiersRange=*/{0, 0}, /*.PrefixRange=*/{0, 0}, /*.SuffixRange=*/{0, 0} }, @@ -496,7 +496,7 @@ DemanglingPartsTestCase g_demangling_parts_test_cases[] = { }, { "_ZN8nlohmann16json_abi_v3_11_310basic_jsonINSt3__13mapENS2_6vectorENS2_12basic_stringIcNS2_11char_traitsIcEENS2_9allocatorIcEEEEbxydS8_NS0_14adl_serializerENS4_IhNS8_IhEEEEvE5parseIRA29_KcEESE_OT_NS2_8functionIFbiNS0_6detail13parse_event_tERSE_EEEbb", { - /*.BasenameRange=*/{687, 692}, /*.TemplateRange=*/{0, 0}, /*.ScopeRange=*/{343, 687}, + /*.BasenameRange=*/{687, 692}, /*.TemplateArgumentsRange=*/{692, 713}, /*.ScopeRange=*/{343, 687}, /*.ArgumentsRange=*/{713, 1174}, /*.QualifiersRange=*/{1174, 1174}, /*.NameQualifiersRange=*/{0, 0}, /*.PrefixRange=*/{0, 0}, /*.SuffixRange=*/{0, 0} }, @@ -506,7 +506,7 @@ DemanglingPartsTestCase g_demangling_parts_test_cases[] = { }, { "_ZN8nlohmann16json_abi_v3_11_310basic_jsonINSt3__13mapENS2_6vectorENS2_12basic_stringIcNS2_11char_traitsIcEENS2_9allocatorIcEEEEbxydS8_NS0_14adl_serializerENS4_IhNS8_IhEEEEvEC1EDn", { - /*.BasenameRange=*/{344, 354}, /*.TemplateRange=*/{0, 0}, /*.ScopeRange=*/{0, 344}, + /*.BasenameRange=*/{344, 354}, /*.TemplateArgumentsRange=*/{0, 0}, /*.ScopeRange=*/{0, 344}, /*.ArgumentsRange=*/{354, 370}, /*.QualifiersRange=*/{370, 370}, /*.NameQualifiersRange=*/{0, 0}, /*.PrefixRange=*/{0, 0}, /*.SuffixRange=*/{0, 0} }, @@ -516,7 +516,7 @@ DemanglingPartsTestCase g_demangling_parts_test_cases[] = { }, { "_Z3fppIiEPFPFvvEiEf", { - /*.BasenameRange=*/{10, 13}, /*.TemplateRange=*/{0, 0}, /*.ScopeRange=*/{10, 10}, + /*.BasenameRange=*/{10, 13}, /*.TemplateArgumentsRange=*/{13, 18}, /*.ScopeRange=*/{10, 10}, /*.ArgumentsRange=*/{18, 25}, /*.QualifiersRange=*/{34,34}, /*.NameQualifiersRange=*/{0, 0}, /*.PrefixRange=*/{0, 0}, /*.SuffixRange=*/{0, 0} }, @@ -526,7 +526,7 @@ DemanglingPartsTestCase g_demangling_parts_test_cases[] = { }, { "_Z3fppIiEPFPFvvEN2ns3FooIiEEEf", { - /*.BasenameRange=*/{10, 13}, /*.TemplateRange=*/{0, 0}, /*.ScopeRange=*/{10, 10}, + /*.BasenameRange=*/{10, 13}, /*.TemplateArgumentsRange=*/{13, 18}, /*.ScopeRange=*/{10, 10}, /*.ArgumentsRange=*/{18, 25}, /*.QualifiersRange=*/{43, 43}, /*.NameQualifiersRange=*/{0, 0}, /*.PrefixRange=*/{0, 0}, /*.SuffixRange=*/{0, 0} }, @@ -536,7 +536,7 @@ DemanglingPartsTestCase g_demangling_parts_test_cases[] = { }, { "_Z3fppIiEPFPFvPFN2ns3FooIiEENS2_3BarIfE3QuxEEEPFS2_S2_EEf", { - /*.BasenameRange=*/{10, 13}, /*.TemplateRange=*/{0, 0}, /*.ScopeRange=*/{10, 10}, + /*.BasenameRange=*/{10, 13}, /*.TemplateArgumentsRange=*/{13, 18}, /*.ScopeRange=*/{10, 10}, /*.ArgumentsRange=*/{18, 25}, /*.QualifiersRange=*/{108, 108}, /*.NameQualifiersRange=*/{0, 0}, /*.PrefixRange=*/{0, 0}, /*.SuffixRange=*/{0, 0} }, @@ -546,7 +546,7 @@ DemanglingPartsTestCase g_demangling_parts_test_cases[] = { }, { "_ZN2ns8HasFuncsINS_3FooINS1_IiE3BarIfE3QuxEEEE3fppIiEEPFPFvvEiEf", { - /*.BasenameRange=*/{64, 67}, /*.TemplateRange=*/{0, 0}, /*.ScopeRange=*/{10, 64}, + /*.BasenameRange=*/{64, 67}, /*.TemplateArgumentsRange=*/{67, 72}, /*.ScopeRange=*/{10, 64}, /*.ArgumentsRange=*/{72, 79}, /*.QualifiersRange=*/{88, 88}, /*.NameQualifiersRange=*/{0, 0}, /*.PrefixRange=*/{0, 0}, /*.SuffixRange=*/{0, 0} }, @@ -556,7 +556,7 @@ DemanglingPartsTestCase g_demangling_parts_test_cases[] = { }, { "_ZN2ns8HasFuncsINS_3FooINS1_IiE3BarIfE3QuxEEEE3fppIiEEPFPFvvES2_Ef", { - /*.BasenameRange=*/{64, 67}, /*.TemplateRange=*/{0, 0}, /*.ScopeRange=*/{10, 64}, + /*.BasenameRange=*/{64, 67}, /*.TemplateArgumentsRange=*/{67, 72}, /*.ScopeRange=*/{10, 64}, /*.ArgumentsRange=*/{72, 79}, /*.QualifiersRange=*/{97, 97}, /*.NameQualifiersRange=*/{0, 0}, /*.PrefixRange=*/{0, 0}, /*.SuffixRange=*/{0, 0} }, @@ -566,7 +566,7 @@ DemanglingPartsTestCase g_demangling_parts_test_cases[] = { }, { "_ZN2ns8HasFuncsINS_3FooINS1_IiE3BarIfE3QuxEEEE3fppIiEEPFPFvPFS2_S5_EEPFS2_S2_EEf", { - /*.BasenameRange=*/{64, 67}, /*.TemplateRange=*/{0, 0}, /*.ScopeRange=*/{10, 64}, + /*.BasenameRange=*/{64, 67}, /*.TemplateArgumentsRange=*/{67, 72}, /*.ScopeRange=*/{10, 64}, /*.ArgumentsRange=*/{72, 79}, /*.QualifiersRange=*/{162, 162}, /*.NameQualifiersRange=*/{0, 0}, /*.PrefixRange=*/{0, 0}, /*.SuffixRange=*/{0, 0} }, @@ -576,7 +576,7 @@ DemanglingPartsTestCase g_demangling_parts_test_cases[] = { }, { "_ZNKO2ns3ns23Bar3fooIiEEPFPFNS0_3FooIiEEiENS3_IfEEEi", { - /*.BasenameRange=*/{37, 40}, /*.TemplateRange=*/{0, 0}, /*.ScopeRange=*/{23, 37}, + /*.BasenameRange=*/{37, 40}, /*.TemplateArgumentsRange=*/{40, 45}, /*.ScopeRange=*/{23, 37}, /*.ArgumentsRange=*/{45, 50}, /*.QualifiersRange=*/{78, 87}, /*.NameQualifiersRange=*/{0, 0}, /*.PrefixRange=*/{0, 0}, /*.SuffixRange=*/{0, 0} }, @@ -586,7 +586,7 @@ DemanglingPartsTestCase g_demangling_parts_test_cases[] = { }, { "_ZTV11ImageLoader", { - /*.BasenameRange=*/{0, 0}, /*.TemplateRange=*/{0, 0}, /*.ScopeRange=*/{0, 0}, + /*.BasenameRange=*/{0, 0}, /*.TemplateArgumentsRange=*/{0, 0}, /*.ScopeRange=*/{0, 0}, /*.ArgumentsRange=*/{0, 0}, /*.QualifiersRange=*/{0, 0}, /*.NameQualifiersRange=*/{0, 0}, /*.PrefixRange=*/{0, 0}, /*.SuffixRange=*/{0, 0} }, @@ -597,7 +597,7 @@ DemanglingPartsTestCase g_demangling_parts_test_cases[] = { }, { "___ZNK5dyld313MachOAnalyzer18forEachInitializerER11DiagnosticsRKNS0_15VMAddrConverterEU13block_pointerFvjEPKv_block_invoke.204", { - /*.BasenameRange=*/{55, 73}, /*.TemplateRange=*/{0, 0}, /*.ScopeRange=*/{33, 55}, + /*.BasenameRange=*/{55, 73}, /*.TemplateArgumentsRange=*/{0, 0}, /*.ScopeRange=*/{33, 55}, /*.ArgumentsRange=*/{73, 181}, /*.QualifiersRange=*/{181, 187}, /*.NameQualifiersRange=*/{0, 0}, /*.PrefixRange=*/{0, 0}, /*.SuffixRange=*/{0, 0} }, @@ -607,7 +607,7 @@ DemanglingPartsTestCase g_demangling_parts_test_cases[] = { }, { "_ZZN5dyld45startEPNS_10KernelArgsEPvS2_ENK3$_1clEv", { - /*.BasenameRange=*/{53, 63}, /*.TemplateRange=*/{0, 0}, /*.ScopeRange=*/{0, 53}, + /*.BasenameRange=*/{53, 63}, /*.TemplateArgumentsRange=*/{0, 0}, /*.ScopeRange=*/{0, 53}, /*.ArgumentsRange=*/{63, 65}, /*.QualifiersRange=*/{65, 71}, /*.NameQualifiersRange=*/{0, 0}, /*.PrefixRange=*/{0, 0}, /*.SuffixRange=*/{0, 0} }, @@ -617,7 +617,7 @@ DemanglingPartsTestCase g_demangling_parts_test_cases[] = { }, { "_ZZNK5dyld46Loader38runInitializersBottomUpPlusUpwardLinksERNS_12RuntimeStateEENK3$_0clEv", { - /*.BasenameRange=*/{88, 98}, /*.TemplateRange=*/{0, 0}, /*.ScopeRange=*/{0, 88}, + /*.BasenameRange=*/{88, 98}, /*.TemplateArgumentsRange=*/{0, 0}, /*.ScopeRange=*/{0, 88}, /*.ArgumentsRange=*/{98, 100}, /*.QualifiersRange=*/{100, 106}, /*.NameQualifiersRange=*/{0, 0}, /*.PrefixRange=*/{0, 0}, /*.SuffixRange=*/{0, 0} }, @@ -627,7 +627,7 @@ DemanglingPartsTestCase g_demangling_parts_test_cases[] = { }, { "_ZZNK5dyld46Loader38runInitializersBottomUpPlusUpwardLinksERNS_12RuntimeStateEENK3$_0clEv.cold", { - /*.BasenameRange=*/{88, 98}, /*.TemplateRange=*/{0, 0}, /*.ScopeRange=*/{0, 88}, + /*.BasenameRange=*/{88, 98}, /*.TemplateArgumentsRange=*/{0, 0}, /*.ScopeRange=*/{0, 88}, /*.ArgumentsRange=*/{98, 100}, /*.QualifiersRange=*/{100, 106}, /*.NameQualifiersRange=*/{0, 0}, /*.PrefixRange=*/{0, 0}, /*.SuffixRange=*/{0, 0} }, @@ -677,11 +677,14 @@ TEST_P(DemanglingPartsTestFixture, DemanglingParts) { auto demangled = std::string_view(*OB); ASSERT_EQ(OB->NameInfo.hasBasename(), valid_basename); - + std::cout << demangled << " " << OB->NameInfo.BasenameRange.first << ", " + << OB->NameInfo.BasenameRange.second << '\n'; EXPECT_EQ(OB->NameInfo.BasenameRange, info.BasenameRange); + EXPECT_EQ(OB->NameInfo.TemplateArgumentsRange, info.TemplateArgumentsRange); EXPECT_EQ(OB->NameInfo.ScopeRange, info.ScopeRange); EXPECT_EQ(OB->NameInfo.ArgumentsRange, info.ArgumentsRange); EXPECT_EQ(OB->NameInfo.QualifiersRange, info.QualifiersRange); + EXPECT_EQ(OB->NameInfo.NameQualifiersRange, info.NameQualifiersRange); auto get_part = [&](const std::pair<size_t, size_t> &loc) { return demangled.substr(loc.first, loc.second - loc.first); @@ -711,9 +714,9 @@ DemangledNameInfoTestCase g_demangled_name_info_test_cases[] = { // clang-format off { { - /*.BasenameRange=*/{0, 10}, /*.TemplateRange=*/{1, 0}, /*.ScopeRange=*/{1, 0}, - /*.ArgumentsRange=*/{1, 0}, /*.QualifiersRange=*/{1, 0}, /*.NameQualifiersRange=*/{1, 0}, /*.PrefixRange=*/{1, 0}, - /*.SuffixRange=*/{1, 0} + /*.BasenameRange=*/{0, 10}, /*.TemplateArgumentsRange=*/{1, 0}, /*.ScopeRange=*/{1, 0}, + /*.ArgumentsRange=*/{1, 0}, /*.QualifiersRange=*/{1, 0}, /*.NameQualifiersRange=*/{1, 0}, + /*.PrefixRange=*/{1, 0}, /*.SuffixRange=*/{1, 0} }, /*valid_basename=*/true, /*valid_template=*/false, /*valid_scope=*/false, /*valid_arguments=*/false, /*valid_qualifiers=*/false, /*valid_name_qualifiers=*/false, @@ -721,9 +724,9 @@ DemangledNameInfoTestCase g_demangled_name_info_test_cases[] = { }, { { - /*.BasenameRange=*/{1, 0}, /*.TemplateRange=*/{0, 10}, /*.ScopeRange=*/{1, 0}, - /*.ArgumentsRange=*/{1, 0}, /*.QualifiersRange=*/{1, 0}, /*.NameQualifiersRange=*/{1, 0}, /*.PrefixRange=*/{1, 0}, - /*.SuffixRange=*/{1, 0} + /*.BasenameRange=*/{1, 0}, /*.TemplateArgumentsRange=*/{0, 10}, /*.ScopeRange=*/{1, 0}, + /*.ArgumentsRange=*/{1, 0}, /*.QualifiersRange=*/{1, 0}, /*.NameQualifiersRange=*/{1, 0}, + /*.PrefixRange=*/{1, 0}, /*.SuffixRange=*/{1, 0} }, /*valid_basename=*/false, /*valid_name_qualifiers=*/true, /*valid_scope=*/false, /*valid_arguments=*/false, /*valid_qualifiers=*/false, /*valid_name_qualifiers=*/false, @@ -731,9 +734,9 @@ DemangledNameInfoTestCase g_demangled_name_info_test_cases[] = { }, { { - /*.BasenameRange=*/{1, 0}, /*.TemplateRange=*/{1, 0}, /*.ScopeRange=*/{0, 10}, - /*.ArgumentsRange=*/{1, 0}, /*.QualifiersRange=*/{1, 0}, /*.NameQualifiersRange=*/{1, 0}, /*.PrefixRange=*/{1, 0}, - /*.SuffixRange=*/{1, 0} + /*.BasenameRange=*/{1, 0}, /*.TemplateArgumentsRange=*/{1, 0}, /*.ScopeRange=*/{0, 10}, + /*.ArgumentsRange=*/{1, 0}, /*.QualifiersRange=*/{1, 0}, /*.NameQualifiersRange=*/{1, 0}, + /*.PrefixRange=*/{1, 0}, /*.SuffixRange=*/{1, 0} }, /*valid_basename=*/false, /*valid_template=*/false, /*valid_scope=*/true, /*valid_arguments=*/false, /*valid_qualifiers=*/false, /*valid_name_qualifiers=*/false, @@ -741,9 +744,9 @@ DemangledNameInfoTestCase g_demangled_name_info_test_cases[] = { }, { { - /*.BasenameRange=*/{1, 0}, /*.TemplateRange=*/{1, 0}, /*.ScopeRange=*/{1, 0}, - /*.ArgumentsRange=*/{0, 10}, /*.QualifiersRange=*/{1, 0}, /*.NameQualifiersRange=*/{1, 0}, /*.PrefixRange=*/{1, 0}, - /*.SuffixRange=*/{1, 0} + /*.BasenameRange=*/{1, 0}, /*.TemplateArgumentsRange=*/{1, 0}, /*.ScopeRange=*/{1, 0}, + /*.ArgumentsRange=*/{0, 10}, /*.QualifiersRange=*/{1, 0}, /*.NameQualifiersRange=*/{1, 0}, + /*.PrefixRange=*/{1, 0}, /*.SuffixRange=*/{1, 0} }, /*valid_basename=*/false, /*valid_template=*/false, /*valid_scope=*/false, /*valid_arguments=*/true, /*valid_qualifiers=*/false, /*valid_name_qualifiers=*/false, @@ -751,9 +754,9 @@ DemangledNameInfoTestCase g_demangled_name_info_test_cases[] = { }, { { - /*.BasenameRange=*/{1, 0}, /*.TemplateRange=*/{1, 0}, /*.ScopeRange=*/{1, 0}, - /*.ArgumentsRange=*/{1, 0}, /*.QualifiersRange=*/{0, 10}, /*.NameQualifiersRange=*/{1, 0}, /*.PrefixRange=*/{1, 0}, - /*.SuffixRange=*/{1, 0} + /*.BasenameRange=*/{1, 0}, /*.TemplateArgumentsRange=*/{1, 0}, /*.ScopeRange=*/{1, 0}, + /*.ArgumentsRange=*/{1, 0}, /*.QualifiersRange=*/{0, 10}, /*.NameQualifiersRange=*/{1, 0}, + /*.PrefixRange=*/{1, 0}, /*.SuffixRange=*/{1, 0} }, /*valid_basename=*/false, /*valid_template=*/false, /*valid_scope=*/false, /*valid_arguments=*/false, /*valid_qualifiers=*/true, /*valid_name_qualifiers=*/false, @@ -761,9 +764,9 @@ DemangledNameInfoTestCase g_demangled_name_info_test_cases[] = { }, { { - /*.BasenameRange=*/{1, 0}, /*.TemplateRange=*/{1, 0}, /*.ScopeRange=*/{1, 0}, - /*.ArgumentsRange=*/{1, 0}, /*.QualifiersRange=*/{1, 0}, /*.NameQualifiersRange=*/{0, 10}, /*.PrefixRange=*/{1, 0}, - /*.SuffixRange=*/{1, 0} + /*.BasenameRange=*/{1, 0}, /*.TemplateArgumentsRange=*/{1, 0}, /*.ScopeRange=*/{1, 0}, + /*.ArgumentsRange=*/{1, 0}, /*.QualifiersRange=*/{1, 0}, /*.NameQualifiersRange=*/{0, 10}, + /*.PrefixRange=*/{1, 0}, /*.SuffixRange=*/{1, 0} }, /*valid_basename=*/false, /*valid_template=*/false, /*valid_scope=*/false, /*valid_arguments=*/false, /*valid_qualifiers=*/false, /*valid_name_qualifiers=*/true, @@ -771,9 +774,9 @@ DemangledNameInfoTestCase g_demangled_name_info_test_cases[] = { }, { { - /*.BasenameRange=*/{1, 0}, /*.TemplateRange=*/{1, 0}, /*.ScopeRange=*/{1, 0}, - /*.ArgumentsRange=*/{1, 0}, /*.QualifiersRange=*/{1, 0}, /*.NameQualifiersRange=*/{1, 0}, /*.PrefixRange=*/{0, 10}, - /*.SuffixRange=*/{1, 0} + /*.BasenameRange=*/{1, 0}, /*.TemplateArgumentsRange=*/{1, 0}, /*.ScopeRange=*/{1, 0}, + /*.ArgumentsRange=*/{1, 0}, /*.QualifiersRange=*/{1, 0}, /*.NameQualifiersRange=*/{1, 0}, + /*.PrefixRange=*/{0, 10}, /*.SuffixRange=*/{1, 0} }, /*valid_basename=*/false, /*valid_template=*/false, /*valid_scope=*/false, /*valid_arguments=*/false, /*valid_qualifiers=*/false, /*valid_name_qualifiers=*/false, @@ -781,9 +784,9 @@ DemangledNameInfoTestCase g_demangled_name_info_test_cases[] = { }, { { - /*.BasenameRange=*/{1, 0}, /*.TemplateRange=*/{1, 0}, /*.ScopeRange=*/{1, 0}, - /*.ArgumentsRange=*/{1, 0}, /*.QualifiersRange=*/{1, 0}, /*.NameQualifiersRange=*/{1, 0}, /*.PrefixRange=*/{1, 0}, - /*.SuffixRange=*/{0, 10} + /*.BasenameRange=*/{1, 0}, /*.TemplateArgumentsRange=*/{1, 0}, /*.ScopeRange=*/{1, 0}, + /*.ArgumentsRange=*/{1, 0}, /*.QualifiersRange=*/{1, 0}, /*.NameQualifiersRange=*/{1, 0}, + /*.PrefixRange=*/{1, 0}, /*.SuffixRange=*/{0, 10} }, /*valid_basename=*/false, /*valid_template=*/false, /*valid_scope=*/false, /*valid_arguments=*/false, /*valid_qualifiers=*/false, /*valid_name_qualifiers=*/false, @@ -796,12 +799,12 @@ struct DemangledNameInfoTestFixture : public ::testing::TestWithParam<DemangledNameInfoTestCase> {}; TEST_P(DemangledNameInfoTestFixture, DemangledNameInfoRanges) { - const auto &[info, valid_basename, valid_template, valid_scope, + const auto &[info, valid_basename, valid_template_arguments, valid_scope, valid_arguments, valid_qualifiers, valid_name_qualifiers, valid_prefix, valid_suffix] = GetParam(); ASSERT_EQ(info.hasBasename(), valid_basename); - ASSERT_EQ(info.hasTemplate(), valid_template); + ASSERT_EQ(info.hasTemplateArguments(), valid_template_arguments); ASSERT_EQ(info.hasScope(), valid_scope); ASSERT_EQ(info.hasArguments(), valid_arguments); ASSERT_EQ(info.hasQualifiers(), valid_qualifiers); >From c2e9516f2887157c16542a89169ac1d3f36d784a Mon Sep 17 00:00:00 2001 From: Charles Zablit <c_zab...@apple.com> Date: Wed, 30 Jul 2025 10:32:35 +0100 Subject: [PATCH 3/4] fixup! embed the logic for TemplateArgumentsRange inside the demangler --- lldb/include/lldb/Core/DemangledNameInfo.h | 8 -------- 1 file changed, 8 deletions(-) diff --git a/lldb/include/lldb/Core/DemangledNameInfo.h b/lldb/include/lldb/Core/DemangledNameInfo.h index 0ee24d02a0c55..4f3960f6da1e0 100644 --- a/lldb/include/lldb/Core/DemangledNameInfo.h +++ b/lldb/include/lldb/Core/DemangledNameInfo.h @@ -183,14 +183,6 @@ struct TrackingOutputBuffer : public llvm::itanium_demangle::OutputBuffer { /// the basename range to the current \c OB position. void updateBasenameEnd(); - /// If this object \ref shouldTrack, then update the beginning of - /// the template arguments range to the current \c OB position. - void updateTemplateArgumentsStart(); - - /// If this object \ref shouldTrack, then update the end of - /// the template arguments range to the current \c OB position. - void updateTemplateArgumentsEnd(); - /// If this object \ref shouldTrack, then update the beginning /// of the scope range to the current \c OB position. void updateScopeStart(); >From 17f7a5a2f107c59ed56555430349739e526619fc Mon Sep 17 00:00:00 2001 From: Charles Zablit <c_zab...@apple.com> Date: Wed, 30 Jul 2025 10:33:50 +0100 Subject: [PATCH 4/4] fixup! embed the logic for TemplateArgumentsRange inside the demangler --- lldb/unittests/Core/MangledTest.cpp | 2 -- 1 file changed, 2 deletions(-) diff --git a/lldb/unittests/Core/MangledTest.cpp b/lldb/unittests/Core/MangledTest.cpp index 06494274ef2e2..eecef033aa349 100644 --- a/lldb/unittests/Core/MangledTest.cpp +++ b/lldb/unittests/Core/MangledTest.cpp @@ -677,8 +677,6 @@ TEST_P(DemanglingPartsTestFixture, DemanglingParts) { auto demangled = std::string_view(*OB); ASSERT_EQ(OB->NameInfo.hasBasename(), valid_basename); - std::cout << demangled << " " << OB->NameInfo.BasenameRange.first << ", " - << OB->NameInfo.BasenameRange.second << '\n'; EXPECT_EQ(OB->NameInfo.BasenameRange, info.BasenameRange); EXPECT_EQ(OB->NameInfo.TemplateArgumentsRange, info.TemplateArgumentsRange); EXPECT_EQ(OB->NameInfo.ScopeRange, info.ScopeRange); _______________________________________________ lldb-commits mailing list lldb-commits@lists.llvm.org https://lists.llvm.org/cgi-bin/mailman/listinfo/lldb-commits