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 <[email protected]> Date: Fri, 6 Feb 2026 17:10:56 +0530 Subject: [PATCH 1/4] [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 <[email protected]> Date: Fri, 6 Feb 2026 17:28:26 +0530 Subject: [PATCH 2/4] 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 eecfc3fd736d8a0be34b19eadc941a0d755bb067 Mon Sep 17 00:00:00 2001 From: Mohit Gunani <[email protected]> Date: Sat, 7 Feb 2026 14:46:12 +0530 Subject: [PATCH 3/4] [Clang] Address review feedback in template diffing --- clang/lib/AST/ASTDiagnostic.cpp | 13 +++++-------- 1 file changed, 5 insertions(+), 8 deletions(-) diff --git a/clang/lib/AST/ASTDiagnostic.cpp b/clang/lib/AST/ASTDiagnostic.cpp index 7c498bc9b8e8a..153f4bbcea25c 100644 --- a/clang/lib/AST/ASTDiagnostic.cpp +++ b/clang/lib/AST/ASTDiagnostic.cpp @@ -1205,14 +1205,11 @@ 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()) { - // If the names match, the ONLY thing that makes them different is the Qualifiers - Same = (FromQual == ToQual); - } + + // If the names match, the ONLY thing that makes them different is the Qualifiers + bool Same = FromArgTST->getTemplateName().getAsTemplateDecl() == + ToArgTST->getTemplateName().getAsTemplateDecl() && FromQual == ToQual; + Tree.SetSame(Same); Tree.SetTemplateDiff(FromArgTST->getTemplateName().getAsTemplateDecl(), ToArgTST->getTemplateName().getAsTemplateDecl(), >From 382867fae16038cfe09f14ca31ccfa54e239c616 Mon Sep 17 00:00:00 2001 From: Mohit Gunani <[email protected]> Date: Sat, 7 Feb 2026 23:29:25 +0530 Subject: [PATCH 4/4] docs: add release note for GH180046 --- clang/docs/ReleaseNotes.rst | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/clang/docs/ReleaseNotes.rst b/clang/docs/ReleaseNotes.rst index 24d4e07ca68b3..1902ec53830ec 100644 --- a/clang/docs/ReleaseNotes.rst +++ b/clang/docs/ReleaseNotes.rst @@ -151,6 +151,11 @@ Attribute Changes in Clang Improvements to Clang's diagnostics ----------------------------------- +- Clang's template type diffing has been improved to accurately display type + qualifiers. Diagnostics will now explicitly show ``const`` and ``volatile`` + qualifiers when comparing template arguments, preventing confusion in cases + where these qualifiers were previously omitted from the error output. (#GH180046) + - Added ``-Wlifetime-safety`` to enable lifetime safety analysis, a CFG-based intra-procedural analysis that detects use-after-free and related temporal safety bugs. See the _______________________________________________ cfe-commits mailing list [email protected] https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits
