https://github.com/llvmbot created https://github.com/llvm/llvm-project/pull/187872
Backport 1f9c54a Requested by: @devajithvs >From a5fa2012515a595f2357b9033f2d7cfb7ae1fd2e Mon Sep 17 00:00:00 2001 From: Devajith <[email protected]> Date: Sat, 21 Mar 2026 09:22:20 +0100 Subject: [PATCH] [clang][AST] Preserve qualifiers in getFullyQualifiedType for AutoType (#187717) A previous change (86c4e96) did not preserve qualifiers attached to the AutoType QualType when the type was deduced. For an AutoType after `getDeducedType()`, qualifiers from the original QualType were dropped. Preserve and reapply them to the deduced type. (cherry picked from commit 1f9c54a15a87f72ca45fb47ec006d1eae63f4eb0) --- clang/lib/AST/QualTypeNames.cpp | 10 ++++++++-- clang/test/Interpreter/pretty-print.cpp | 4 ++++ 2 files changed, 12 insertions(+), 2 deletions(-) diff --git a/clang/lib/AST/QualTypeNames.cpp b/clang/lib/AST/QualTypeNames.cpp index 9e3885e100c6b..7cdee52acce3f 100644 --- a/clang/lib/AST/QualTypeNames.cpp +++ b/clang/lib/AST/QualTypeNames.cpp @@ -370,9 +370,15 @@ NestedNameSpecifier createNestedNameSpecifier(const ASTContext &Ctx, QualType getFullyQualifiedType(QualType QT, const ASTContext &Ctx, bool WithGlobalNsPrefix) { // Use the underlying deduced type for AutoType - if (const auto *AT = dyn_cast<AutoType>(QT.getTypePtr())) - if (AT->isDeduced()) + if (const auto *AT = dyn_cast<AutoType>(QT.getTypePtr())) { + if (AT->isDeduced()) { + // Get the qualifiers. + Qualifiers Quals = QT.getQualifiers(); QT = AT->getDeducedType(); + // Add back the qualifiers. + QT = Ctx.getQualifiedType(QT, Quals); + } + } // In case of myType* we need to strip the pointer first, fully // qualify and attach the pointer once again. diff --git a/clang/test/Interpreter/pretty-print.cpp b/clang/test/Interpreter/pretty-print.cpp index f0548358d65db..ef0ee8e233c28 100644 --- a/clang/test/Interpreter/pretty-print.cpp +++ b/clang/test/Interpreter/pretty-print.cpp @@ -69,6 +69,10 @@ namespace Outer { template<class T> struct Bar {}; } auto y = Outer::Bar<int>(); y // CHECK-NEXT: (Outer::Bar<int> &) @0x{{[0-9a-f]+}} +// Check that const is preserved +const auto z = Outer::Foo(); z +// CHECK-NEXT: (const Outer::Foo &) @0x{{[0-9a-f]+}} + // int i = 12; // int &iref = i; // iref _______________________________________________ llvm-branch-commits mailing list [email protected] https://lists.llvm.org/cgi-bin/mailman/listinfo/llvm-branch-commits
