[clang] [Clang] Fix template elision to preserve qualifiers in diagnostics (PR #180175)
via cfe-commits
cfe-commits at lists.llvm.org
Sat Feb 7 01:08:31 PST 2026
https://github.com/Lambo-IITian updated https://github.com/llvm/llvm-project/pull/180175
>From 31e6ffdd6275caacb8c03a890c607377c5b66dbe Mon Sep 17 00:00:00 2001
From: Mohit Gunani <gunanimohit1221 at gmail.com>
Date: Fri, 6 Feb 2026 17:10:56 +0530
Subject: [PATCH 1/3] [Clang] Improve template diffing to show qualifiers in
elided types
This change ensures that template diagnostics like Dual<int, [...]> vs Dual<const int, [...]> correctly display the differing qualifiers instead of hiding the entire type.
---
clang/lib/AST/ASTDiagnostic.cpp | 12 ++++++++++--
1 file changed, 10 insertions(+), 2 deletions(-)
diff --git a/clang/lib/AST/ASTDiagnostic.cpp b/clang/lib/AST/ASTDiagnostic.cpp
index b8023cb6fa10f..44983edbf870a 100644
--- a/clang/lib/AST/ASTDiagnostic.cpp
+++ b/clang/lib/AST/ASTDiagnostic.cpp
@@ -1205,8 +1205,16 @@ class TemplateDiff {
"Both template specializations need to be valid.");
Qualifiers FromQual = FromType.getQualifiers(),
ToQual = ToType.getQualifiers();
- FromQual -= QualType(FromArgTST, 0).getQualifiers();
- ToQual -= QualType(ToArgTST, 0).getQualifiers();
+ // FromQual -= QualType(FromArgTST, 0).getQualifiers();
+ // ToQual -= QualType(ToArgTST, 0).getQualifiers();
+ // ... your commented out lines ...
+ bool Same = false;
+ if (FromArgTST->getTemplateName().getAsTemplateDecl() ==
+ ToArgTST->getTemplateName().getAsTemplateDecl()) {
+ // If the names match, the ONLY thing that makes them different is the Qualifiers
+ Same = (FromQual == ToQual);
+ }
+ Tree.SetSame(Same);
Tree.SetTemplateDiff(FromArgTST->getTemplateName().getAsTemplateDecl(),
ToArgTST->getTemplateName().getAsTemplateDecl(),
FromQual, ToQual, FromDefault, ToDefault);
>From 8d3fc9c6664480844a46ddd5cf4658add10ee7b9 Mon Sep 17 00:00:00 2001
From: lambo <gunanimohit1221 at gmail.com>
Date: Fri, 6 Feb 2026 17:28:26 +0530
Subject: [PATCH 2/3] Clean up commented code in ASTDiagnostic.cpp
Removed commented out lines in ASTDiagnostic.cpp.
---
clang/lib/AST/ASTDiagnostic.cpp | 1 -
1 file changed, 1 deletion(-)
diff --git a/clang/lib/AST/ASTDiagnostic.cpp b/clang/lib/AST/ASTDiagnostic.cpp
index 44983edbf870a..7c498bc9b8e8a 100644
--- a/clang/lib/AST/ASTDiagnostic.cpp
+++ b/clang/lib/AST/ASTDiagnostic.cpp
@@ -1207,7 +1207,6 @@ class TemplateDiff {
ToQual = ToType.getQualifiers();
// FromQual -= QualType(FromArgTST, 0).getQualifiers();
// ToQual -= QualType(ToArgTST, 0).getQualifiers();
- // ... your commented out lines ...
bool Same = false;
if (FromArgTST->getTemplateName().getAsTemplateDecl() ==
ToArgTST->getTemplateName().getAsTemplateDecl()) {
>From e05df0304fbcc827d705b7b0405392cc388fe1a4 Mon Sep 17 00:00:00 2001
From: lambo <gunanimohit1221 at gmail.com>
Date: Sat, 7 Feb 2026 13:34:38 +0530
Subject: [PATCH 3/3] Apply suggestion from @cor3ntin
Removed the comment out code lines
Co-authored-by: Corentin Jabot <corentinjabot at gmail.com>
---
clang/lib/AST/ASTDiagnostic.cpp | 2 --
1 file changed, 2 deletions(-)
diff --git a/clang/lib/AST/ASTDiagnostic.cpp b/clang/lib/AST/ASTDiagnostic.cpp
index 7c498bc9b8e8a..25d6a0c9c0f43 100644
--- a/clang/lib/AST/ASTDiagnostic.cpp
+++ b/clang/lib/AST/ASTDiagnostic.cpp
@@ -1205,8 +1205,6 @@ class TemplateDiff {
"Both template specializations need to be valid.");
Qualifiers FromQual = FromType.getQualifiers(),
ToQual = ToType.getQualifiers();
- // FromQual -= QualType(FromArgTST, 0).getQualifiers();
- // ToQual -= QualType(ToArgTST, 0).getQualifiers();
bool Same = false;
if (FromArgTST->getTemplateName().getAsTemplateDecl() ==
ToArgTST->getTemplateName().getAsTemplateDecl()) {
More information about the cfe-commits
mailing list