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
[email protected]
https://lists.llvm.org/cgi-bin/mailman/listinfo/lldb-commits