aeubanks created this revision.
Herald added a project: All.
aeubanks requested review of this revision.
Herald added projects: clang, LLDB.
Herald added subscribers: lldb-commits, cfe-commits.
Followup to D134378 <https://reviews.llvm.org/D134378>.
With PrintingPolicy::SuppressScope, we'd also not print the scope in template
params. The intention was only to skip the scope for the class because we
expect template params to be fully qualified when comparing them for simple
template names.
Add a PrintingPolicy::NoSuppressTemplateParamsScope which disables
SuppressScope for template params.
Repository:
rG LLVM Github Monorepo
https://reviews.llvm.org/D137583
Files:
clang/include/clang/AST/PrettyPrinter.h
clang/lib/AST/TypePrinter.cpp
lldb/source/Plugins/TypeSystem/Clang/TypeSystemClang.cpp
lldb/test/API/lang/cpp/unique-types2/TestUniqueTypes.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/TestUniqueTypes.py
===================================================================
--- lldb/test/API/lang/cpp/unique-types2/TestUniqueTypes.py
+++ lldb/test/API/lang/cpp/unique-types2/TestUniqueTypes.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.cpp
===================================================================
--- lldb/source/Plugins/TypeSystem/Clang/TypeSystemClang.cpp
+++ lldb/source/Plugins/TypeSystem/Clang/TypeSystemClang.cpp
@@ -3792,6 +3792,7 @@
clang::PrintingPolicy printing_policy(GetTypePrintingPolicy());
printing_policy.SuppressScope = BaseOnly;
+ printing_policy.NoSuppressTemplateParamsScope = BaseOnly;
return ConstString(qual_type.getAsString(printing_policy));
}
Index: clang/lib/AST/TypePrinter.cpp
===================================================================
--- clang/lib/AST/TypePrinter.cpp
+++ clang/lib/AST/TypePrinter.cpp
@@ -110,6 +110,23 @@
}
};
+class NoSuppressTemplateParamsScopeRAII {
+ PrintingPolicy &Policy;
+ bool OldSuppressScope;
+
+public:
+ explicit NoSuppressTemplateParamsScopeRAII(PrintingPolicy &Policy)
+ : Policy(Policy) {
+ OldSuppressScope = Policy.SuppressScope;
+ if (Policy.NoSuppressTemplateParamsScope)
+ Policy.SuppressScope = false;
+ }
+
+ ~NoSuppressTemplateParamsScopeRAII() {
+ Policy.SuppressScope = OldSuppressScope;
+ }
+};
+
class TypePrinter {
PrintingPolicy Policy;
unsigned Indentation;
@@ -1370,6 +1387,7 @@
// If this is a class template specialization, print the template
// arguments.
if (const auto *Spec = dyn_cast<ClassTemplateSpecializationDecl>(D)) {
+ NoSuppressTemplateParamsScopeRAII SuppressScopeRAII(Policy);
ArrayRef<TemplateArgument> Args;
TypeSourceInfo *TAW = Spec->getTypeAsWritten();
if (!Policy.PrintCanonicalTypes && TAW) {
Index: clang/include/clang/AST/PrettyPrinter.h
===================================================================
--- clang/include/clang/AST/PrettyPrinter.h
+++ clang/include/clang/AST/PrettyPrinter.h
@@ -130,6 +130,9 @@
/// Suppresses printing of scope specifiers.
unsigned SuppressScope : 1;
+ /// When SuppressScope is true, do not apply it to template parameters.
+ unsigned NoSuppressTemplateParamsScope : 1;
+
/// Suppress printing parts of scope specifiers that are never
/// written, e.g., for anonymous namespaces.
unsigned SuppressUnwrittenScope : 1;
_______________________________________________
lldb-commits mailing list
[email protected]
https://lists.llvm.org/cgi-bin/mailman/listinfo/lldb-commits