This revision was automatically updated to reflect the committed changes. Closed by commit rGcb0ffa529a0f: [lldb] Fix simple template names and template params with scope qualifiers (authored by aeubanks).
Repository: rG LLVM Github Monorepo CHANGES SINCE LAST ACTION https://reviews.llvm.org/D137583/new/ https://reviews.llvm.org/D137583 Files: lldb/source/Plugins/TypeSystem/Clang/TypeSystemClang.cpp lldb/source/Plugins/TypeSystem/Clang/TypeSystemClang.h lldb/test/API/lang/cpp/unique-types2/TestUniqueTypes2.py lldb/test/API/lang/cpp/unique-types2/main.cpp
Index: lldb/test/API/lang/cpp/unique-types2/main.cpp =================================================================== --- lldb/test/API/lang/cpp/unique-types2/main.cpp +++ lldb/test/API/lang/cpp/unique-types2/main.cpp @@ -1,3 +1,7 @@ +namespace ns { +struct Bar {}; +} // namespace ns + template <class T> struct Foo { T t; template <class U> class Nested { @@ -23,5 +27,6 @@ FooPack<int, int, int> p7; Foo<int>::Nested<char> n1; + Foo<int>::Nested<ns::Bar> n2; // Set breakpoint here } Index: lldb/test/API/lang/cpp/unique-types2/TestUniqueTypes2.py =================================================================== --- lldb/test/API/lang/cpp/unique-types2/TestUniqueTypes2.py +++ lldb/test/API/lang/cpp/unique-types2/TestUniqueTypes2.py @@ -36,6 +36,7 @@ self.expect("image lookup -A -t 'Foo<int>::Nested<int>'", DATA_TYPES_DISPLAYED_CORRECTLY, error=True) self.expect("image lookup -A -t 'Nested<char>'", DATA_TYPES_DISPLAYED_CORRECTLY, substrs=["1 match found"]) self.expect("image lookup -A -t '::Nested<char>'", DATA_TYPES_DISPLAYED_CORRECTLY, error=True) + self.expect("image lookup -A -t 'Foo<int>::Nested<ns::Bar>'", DATA_TYPES_DISPLAYED_CORRECTLY, substrs=["1 match found"]) self.expect_expr("t1", result_type="Foo<char>") self.expect_expr("t1", result_type="Foo<char>") @@ -49,6 +50,7 @@ self.expect_expr("p6", result_type="FooPack<int, int>") self.expect_expr("p7", result_type="FooPack<int, int, int>") self.expect_expr("n1", result_type="Foo<int>::Nested<char>") + self.expect_expr("n2", result_type="Foo<int>::Nested<ns::Bar>") @skipIf(compiler=no_match("clang")) @skipIf(compiler_version=["<", "15.0"]) Index: lldb/source/Plugins/TypeSystem/Clang/TypeSystemClang.h =================================================================== --- lldb/source/Plugins/TypeSystem/Clang/TypeSystemClang.h +++ lldb/source/Plugins/TypeSystem/Clang/TypeSystemClang.h @@ -644,7 +644,7 @@ // Accessors ConstString GetTypeName(lldb::opaque_compiler_type_t type, - bool BaseOnly) override; + bool base_only) override; ConstString GetDisplayTypeName(lldb::opaque_compiler_type_t type) override; @@ -1051,7 +1051,8 @@ clang::PrintingPolicy GetTypePrintingPolicy(); /// Returns the internal type name for the given NamedDecl using the /// type printing policy. - std::string GetTypeNameForDecl(const clang::NamedDecl *named_decl); + std::string GetTypeNameForDecl(const clang::NamedDecl *named_decl, + bool qualified = true); const clang::ClassTemplateSpecializationDecl * GetAsTemplateSpecialization(lldb::opaque_compiler_type_t type); Index: lldb/source/Plugins/TypeSystem/Clang/TypeSystemClang.cpp =================================================================== --- lldb/source/Plugins/TypeSystem/Clang/TypeSystemClang.cpp +++ lldb/source/Plugins/TypeSystem/Clang/TypeSystemClang.cpp @@ -2131,11 +2131,12 @@ return printing_policy; } -std::string TypeSystemClang::GetTypeNameForDecl(const NamedDecl *named_decl) { +std::string TypeSystemClang::GetTypeNameForDecl(const NamedDecl *named_decl, + bool qualified) { clang::PrintingPolicy printing_policy = GetTypePrintingPolicy(); std::string result; llvm::raw_string_ostream os(result); - named_decl->printQualifiedName(os, printing_policy); + named_decl->getNameForDiagnostic(os, printing_policy, qualified); return result; } @@ -3768,7 +3769,7 @@ } ConstString TypeSystemClang::GetTypeName(lldb::opaque_compiler_type_t type, - bool BaseOnly) { + bool base_only) { if (!type) return ConstString(); @@ -3790,9 +3791,13 @@ return ConstString(GetTypeNameForDecl(typedef_decl)); } - clang::PrintingPolicy printing_policy(GetTypePrintingPolicy()); - printing_policy.SuppressScope = BaseOnly; - return ConstString(qual_type.getAsString(printing_policy)); + // For consistency, this follows the same code path that clang uses to emit + // debug info. This also handles when we don't want any scopes preceding the + // name. + if (auto *named_decl = qual_type->getAsTagDecl()) + return ConstString(GetTypeNameForDecl(named_decl, !base_only)); + + return ConstString(qual_type.getAsString(GetTypePrintingPolicy())); } ConstString
_______________________________________________ lldb-commits mailing list lldb-commits@lists.llvm.org https://lists.llvm.org/cgi-bin/mailman/listinfo/lldb-commits