https://github.com/ykhatav updated https://github.com/llvm/llvm-project/pull/146729
>From 29dd71a91958e8de7ee811838994fa664afe75d1 Mon Sep 17 00:00:00 2001 From: "Khatavkar, Yashasvi" <yashasvi.khatav...@intel.com> Date: Wed, 2 Jul 2025 08:23:14 -0700 Subject: [PATCH 01/12] Fix scoping of dependent typedefs --- clang/lib/CodeGen/CGDebugInfo.cpp | 12 ++++++++++-- .../dependent-template-type-scope.cpp | 18 ++++++++++++++++++ 2 files changed, 28 insertions(+), 2 deletions(-) create mode 100644 clang/test/CodeGenCXX/dependent-template-type-scope.cpp diff --git a/clang/lib/CodeGen/CGDebugInfo.cpp b/clang/lib/CodeGen/CGDebugInfo.cpp index 994bdbdae860f..1ee6f52efda6a 100644 --- a/clang/lib/CodeGen/CGDebugInfo.cpp +++ b/clang/lib/CodeGen/CGDebugInfo.cpp @@ -4183,9 +4183,17 @@ llvm::DICompositeType *CGDebugInfo::CreateLimitedType(const RecordType *Ty) { llvm::MDNode::replaceWithDistinct(llvm::TempDICompositeType(RealDecl)); break; } - - RegionMap[RD].reset(RealDecl); + auto *CTSD = dyn_cast<ClassTemplateSpecializationDecl>(Ty->getDecl()); + if(CTSD) { + CXXRecordDecl *TemplateDecl = + CTSD->getSpecializedTemplate()->getTemplatedDecl(); + RegionMap[TemplateDecl].reset(RealDecl); + TypeCache[QualType(Ty, 0).getAsOpaquePtr()].reset(RealDecl); + } + else { + RegionMap[Ty->getDecl()].reset(RealDecl); TypeCache[QualType(Ty, 0).getAsOpaquePtr()].reset(RealDecl); +} if (const auto *TSpecial = dyn_cast<ClassTemplateSpecializationDecl>(RD)) DBuilder.replaceArrays(RealDecl, llvm::DINodeArray(), diff --git a/clang/test/CodeGenCXX/dependent-template-type-scope.cpp b/clang/test/CodeGenCXX/dependent-template-type-scope.cpp new file mode 100644 index 0000000000000..3b2e57b700936 --- /dev/null +++ b/clang/test/CodeGenCXX/dependent-template-type-scope.cpp @@ -0,0 +1,18 @@ +// RUN: %clang_cc1 -triple x86_64-unknown-linux-gnu -emit-llvm -debug-info-kind=standalone -o - %s | FileCheck %s + +struct X { + typedef int inside; + inside i; +}; + +template <typename T = int> +struct Y { + typedef int outside; + outside o; +}; + +X x; +Y<> y; + +// CHECK: ![[Y:.*]] = distinct !DICompositeType(tag: DW_TAG_structure_type, name: "Y<int>", {{.*}}identifier: "_ZTS1YIiE") +// CHECK: !DIDerivedType(tag: DW_TAG_typedef, name: "outside", scope: ![[Y]], >From 12e9adf8c8a98b02ec8e5a58f682832d132ddfc0 Mon Sep 17 00:00:00 2001 From: "Khatavkar, Yashasvi" <yashasvi.khatav...@intel.com> Date: Wed, 2 Jul 2025 08:24:26 -0700 Subject: [PATCH 02/12] Apply clang-format --- clang/lib/CodeGen/CGDebugInfo.cpp | 21 ++++++++++----------- 1 file changed, 10 insertions(+), 11 deletions(-) diff --git a/clang/lib/CodeGen/CGDebugInfo.cpp b/clang/lib/CodeGen/CGDebugInfo.cpp index 1ee6f52efda6a..d9b5935f7bb7c 100644 --- a/clang/lib/CodeGen/CGDebugInfo.cpp +++ b/clang/lib/CodeGen/CGDebugInfo.cpp @@ -4183,17 +4183,16 @@ llvm::DICompositeType *CGDebugInfo::CreateLimitedType(const RecordType *Ty) { llvm::MDNode::replaceWithDistinct(llvm::TempDICompositeType(RealDecl)); break; } - auto *CTSD = dyn_cast<ClassTemplateSpecializationDecl>(Ty->getDecl()); - if(CTSD) { - CXXRecordDecl *TemplateDecl = - CTSD->getSpecializedTemplate()->getTemplatedDecl(); - RegionMap[TemplateDecl].reset(RealDecl); - TypeCache[QualType(Ty, 0).getAsOpaquePtr()].reset(RealDecl); - } - else { - RegionMap[Ty->getDecl()].reset(RealDecl); - TypeCache[QualType(Ty, 0).getAsOpaquePtr()].reset(RealDecl); -} + auto *CTSD = dyn_cast<ClassTemplateSpecializationDecl>(Ty->getDecl()); + if (CTSD) { + CXXRecordDecl *TemplateDecl = + CTSD->getSpecializedTemplate()->getTemplatedDecl(); + RegionMap[TemplateDecl].reset(RealDecl); + TypeCache[QualType(Ty, 0).getAsOpaquePtr()].reset(RealDecl); + } else { + RegionMap[Ty->getDecl()].reset(RealDecl); + TypeCache[QualType(Ty, 0).getAsOpaquePtr()].reset(RealDecl); + } if (const auto *TSpecial = dyn_cast<ClassTemplateSpecializationDecl>(RD)) DBuilder.replaceArrays(RealDecl, llvm::DINodeArray(), >From 7e3dfe0cc9d954733f01be22f779c7583521b4a1 Mon Sep 17 00:00:00 2001 From: "Khatavkar, Yashasvi" <yashasvi.khatav...@intel.com> Date: Thu, 10 Jul 2025 06:28:49 -0700 Subject: [PATCH 03/12] address review comments --- clang/lib/CodeGen/CGDebugInfo.cpp | 3 +-- clang/test/CodeGenCXX/dependent-template-type-scope.cpp | 6 ------ 2 files changed, 1 insertion(+), 8 deletions(-) diff --git a/clang/lib/CodeGen/CGDebugInfo.cpp b/clang/lib/CodeGen/CGDebugInfo.cpp index d9b5935f7bb7c..1dc12d705b2cf 100644 --- a/clang/lib/CodeGen/CGDebugInfo.cpp +++ b/clang/lib/CodeGen/CGDebugInfo.cpp @@ -4188,11 +4188,10 @@ llvm::DICompositeType *CGDebugInfo::CreateLimitedType(const RecordType *Ty) { CXXRecordDecl *TemplateDecl = CTSD->getSpecializedTemplate()->getTemplatedDecl(); RegionMap[TemplateDecl].reset(RealDecl); - TypeCache[QualType(Ty, 0).getAsOpaquePtr()].reset(RealDecl); } else { RegionMap[Ty->getDecl()].reset(RealDecl); - TypeCache[QualType(Ty, 0).getAsOpaquePtr()].reset(RealDecl); } + TypeCache[QualType(Ty, 0).getAsOpaquePtr()].reset(RealDecl); if (const auto *TSpecial = dyn_cast<ClassTemplateSpecializationDecl>(RD)) DBuilder.replaceArrays(RealDecl, llvm::DINodeArray(), diff --git a/clang/test/CodeGenCXX/dependent-template-type-scope.cpp b/clang/test/CodeGenCXX/dependent-template-type-scope.cpp index 3b2e57b700936..25a4d8741b01e 100644 --- a/clang/test/CodeGenCXX/dependent-template-type-scope.cpp +++ b/clang/test/CodeGenCXX/dependent-template-type-scope.cpp @@ -1,17 +1,11 @@ // RUN: %clang_cc1 -triple x86_64-unknown-linux-gnu -emit-llvm -debug-info-kind=standalone -o - %s | FileCheck %s -struct X { - typedef int inside; - inside i; -}; - template <typename T = int> struct Y { typedef int outside; outside o; }; -X x; Y<> y; // CHECK: ![[Y:.*]] = distinct !DICompositeType(tag: DW_TAG_structure_type, name: "Y<int>", {{.*}}identifier: "_ZTS1YIiE") >From 5b88f9d72edf4ab205adcc832b19acbb5555e75d Mon Sep 17 00:00:00 2001 From: "Khatavkar, Yashasvi" <yashasvi.khatav...@intel.com> Date: Wed, 16 Jul 2025 10:44:34 -0700 Subject: [PATCH 04/12] Address review comments --- clang/docs/ReleaseNotes.rst | 3 +++ clang/lib/CodeGen/CGDebugInfo.cpp | 3 +-- 2 files changed, 4 insertions(+), 2 deletions(-) diff --git a/clang/docs/ReleaseNotes.rst b/clang/docs/ReleaseNotes.rst index fe1dd15c6f885..c9dbb6cfe4a83 100644 --- a/clang/docs/ReleaseNotes.rst +++ b/clang/docs/ReleaseNotes.rst @@ -220,6 +220,7 @@ Improvements to Coverage Mapping Bug Fixes in This Version ------------------------- + - Fix a crash when marco name is empty in ``#pragma push_macro("")`` or ``#pragma pop_macro("")``. (#GH149762). - `-Wunreachable-code`` now diagnoses tautological or contradictory @@ -229,6 +230,8 @@ Bug Fixes in This Version cast chain. (#GH149967). - Fixed a crash with incompatible pointer to integer conversions in designated initializers involving string literals. (#GH154046) + macro expansion when performing analysis for nullability attributes. (#GH138371) +- Fixed scope of typedefs present inside a template class. (#GH91451) Bug Fixes to Compiler Builtins ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ diff --git a/clang/lib/CodeGen/CGDebugInfo.cpp b/clang/lib/CodeGen/CGDebugInfo.cpp index 1dc12d705b2cf..6fbed3e3369d1 100644 --- a/clang/lib/CodeGen/CGDebugInfo.cpp +++ b/clang/lib/CodeGen/CGDebugInfo.cpp @@ -4183,8 +4183,7 @@ llvm::DICompositeType *CGDebugInfo::CreateLimitedType(const RecordType *Ty) { llvm::MDNode::replaceWithDistinct(llvm::TempDICompositeType(RealDecl)); break; } - auto *CTSD = dyn_cast<ClassTemplateSpecializationDecl>(Ty->getDecl()); - if (CTSD) { + if (auto *CTSD = dyn_cast<ClassTemplateSpecializationDecl>(Ty->getDecl())) { CXXRecordDecl *TemplateDecl = CTSD->getSpecializedTemplate()->getTemplatedDecl(); RegionMap[TemplateDecl].reset(RealDecl); >From 10f08d4fbcabd3d78d87c14a40ded284521e89b4 Mon Sep 17 00:00:00 2001 From: "Khatavkar, Yashasvi" <yashasvi.khatav...@intel.com> Date: Wed, 13 Aug 2025 12:19:44 -0700 Subject: [PATCH 05/12] Address review comment --- clang/lib/CodeGen/CGDebugInfo.cpp | 10 ++++------ 1 file changed, 4 insertions(+), 6 deletions(-) diff --git a/clang/lib/CodeGen/CGDebugInfo.cpp b/clang/lib/CodeGen/CGDebugInfo.cpp index 6fbed3e3369d1..a4663f79bd609 100644 --- a/clang/lib/CodeGen/CGDebugInfo.cpp +++ b/clang/lib/CodeGen/CGDebugInfo.cpp @@ -4183,13 +4183,11 @@ llvm::DICompositeType *CGDebugInfo::CreateLimitedType(const RecordType *Ty) { llvm::MDNode::replaceWithDistinct(llvm::TempDICompositeType(RealDecl)); break; } - if (auto *CTSD = dyn_cast<ClassTemplateSpecializationDecl>(Ty->getDecl())) { - CXXRecordDecl *TemplateDecl = - CTSD->getSpecializedTemplate()->getTemplatedDecl(); - RegionMap[TemplateDecl].reset(RealDecl); - } else { - RegionMap[Ty->getDecl()].reset(RealDecl); + auto *Decl = Ty->getDecl(); + if (auto *CTSD = dyn_cast<ClassTemplateSpecializationDecl>(Decl)) { + Decl = CTSD->getSpecializedTemplate()->getTemplateDecl(); } + RegionMap[Decl].reset(RealDecl); TypeCache[QualType(Ty, 0).getAsOpaquePtr()].reset(RealDecl); if (const auto *TSpecial = dyn_cast<ClassTemplateSpecializationDecl>(RD)) >From 3f5774338736709f724dfcb39ccb9aa5ba96e231 Mon Sep 17 00:00:00 2001 From: "Khatavkar, Yashasvi" <yashasvi.khatav...@intel.com> Date: Thu, 14 Aug 2025 06:54:27 -0700 Subject: [PATCH 06/12] Fix release note after merge confits --- clang/docs/ReleaseNotes.rst | 1 - 1 file changed, 1 deletion(-) diff --git a/clang/docs/ReleaseNotes.rst b/clang/docs/ReleaseNotes.rst index c9dbb6cfe4a83..2b01dc4c84ec4 100644 --- a/clang/docs/ReleaseNotes.rst +++ b/clang/docs/ReleaseNotes.rst @@ -220,7 +220,6 @@ Improvements to Coverage Mapping Bug Fixes in This Version ------------------------- - - Fix a crash when marco name is empty in ``#pragma push_macro("")`` or ``#pragma pop_macro("")``. (#GH149762). - `-Wunreachable-code`` now diagnoses tautological or contradictory >From b1fbff2491fd04fb76340de04c38dd294b55f0fb Mon Sep 17 00:00:00 2001 From: "Khatavkar, Yashasvi" <yashasvi.khatav...@intel.com> Date: Thu, 14 Aug 2025 07:18:19 -0700 Subject: [PATCH 07/12] Fix build failure --- clang/lib/CodeGen/CGDebugInfo.cpp | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/clang/lib/CodeGen/CGDebugInfo.cpp b/clang/lib/CodeGen/CGDebugInfo.cpp index a4663f79bd609..3f379850ac5ad 100644 --- a/clang/lib/CodeGen/CGDebugInfo.cpp +++ b/clang/lib/CodeGen/CGDebugInfo.cpp @@ -4183,11 +4183,11 @@ llvm::DICompositeType *CGDebugInfo::CreateLimitedType(const RecordType *Ty) { llvm::MDNode::replaceWithDistinct(llvm::TempDICompositeType(RealDecl)); break; } - auto *Decl = Ty->getDecl(); - if (auto *CTSD = dyn_cast<ClassTemplateSpecializationDecl>(Decl)) { - Decl = CTSD->getSpecializedTemplate()->getTemplateDecl(); + + if (auto *CTSD = dyn_cast<ClassTemplateSpecializationDecl>(RD)) { + RD = CTSD->getSpecializedTemplate()->getTemplatedDecl(); } - RegionMap[Decl].reset(RealDecl); + RegionMap[RD].reset(RealDecl); TypeCache[QualType(Ty, 0).getAsOpaquePtr()].reset(RealDecl); if (const auto *TSpecial = dyn_cast<ClassTemplateSpecializationDecl>(RD)) >From a1ff3af79423900a667200eb9bfa6cd609efafc6 Mon Sep 17 00:00:00 2001 From: "Khatavkar, Yashasvi" <yashasvi.khatav...@intel.com> Date: Thu, 14 Aug 2025 07:25:36 -0700 Subject: [PATCH 08/12] Apply clang-format --- clang/lib/CodeGen/CGDebugInfo.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/clang/lib/CodeGen/CGDebugInfo.cpp b/clang/lib/CodeGen/CGDebugInfo.cpp index 3f379850ac5ad..696e0492cced7 100644 --- a/clang/lib/CodeGen/CGDebugInfo.cpp +++ b/clang/lib/CodeGen/CGDebugInfo.cpp @@ -4183,7 +4183,7 @@ llvm::DICompositeType *CGDebugInfo::CreateLimitedType(const RecordType *Ty) { llvm::MDNode::replaceWithDistinct(llvm::TempDICompositeType(RealDecl)); break; } - + if (auto *CTSD = dyn_cast<ClassTemplateSpecializationDecl>(RD)) { RD = CTSD->getSpecializedTemplate()->getTemplatedDecl(); } >From 8bc2ddb874f021aa5097b2bcedb28e329afa333a Mon Sep 17 00:00:00 2001 From: "Khatavkar, Yashasvi" <yashasvi.khatav...@intel.com> Date: Thu, 14 Aug 2025 08:31:21 -0700 Subject: [PATCH 09/12] fix test failures --- clang/lib/CodeGen/CGDebugInfo.cpp | 8 +++++--- 1 file changed, 5 insertions(+), 3 deletions(-) diff --git a/clang/lib/CodeGen/CGDebugInfo.cpp b/clang/lib/CodeGen/CGDebugInfo.cpp index 696e0492cced7..9cd6d5815d9ea 100644 --- a/clang/lib/CodeGen/CGDebugInfo.cpp +++ b/clang/lib/CodeGen/CGDebugInfo.cpp @@ -4184,10 +4184,12 @@ llvm::DICompositeType *CGDebugInfo::CreateLimitedType(const RecordType *Ty) { break; } - if (auto *CTSD = dyn_cast<ClassTemplateSpecializationDecl>(RD)) { - RD = CTSD->getSpecializedTemplate()->getTemplatedDecl(); - } + if (auto *CTSD = dyn_cast<ClassTemplateSpecializationDecl>(Ty->getOriginalDecl())) { + CXXRecordDecl *TemplateDecl = CTSD->getSpecializedTemplate()->getTemplatedDecl(); + RegionMap[TemplateDecl].reset(RealDecl); + }else { RegionMap[RD].reset(RealDecl); + } TypeCache[QualType(Ty, 0).getAsOpaquePtr()].reset(RealDecl); if (const auto *TSpecial = dyn_cast<ClassTemplateSpecializationDecl>(RD)) >From c7164eef53e165b695cb67aca853e97633fd0ac9 Mon Sep 17 00:00:00 2001 From: "Khatavkar, Yashasvi" <yashasvi.khatav...@intel.com> Date: Thu, 14 Aug 2025 08:33:03 -0700 Subject: [PATCH 10/12] Apply clang-format --- clang/lib/CodeGen/CGDebugInfo.cpp | 10 ++++++---- 1 file changed, 6 insertions(+), 4 deletions(-) diff --git a/clang/lib/CodeGen/CGDebugInfo.cpp b/clang/lib/CodeGen/CGDebugInfo.cpp index 9cd6d5815d9ea..c44fea3e6383d 100644 --- a/clang/lib/CodeGen/CGDebugInfo.cpp +++ b/clang/lib/CodeGen/CGDebugInfo.cpp @@ -4184,11 +4184,13 @@ llvm::DICompositeType *CGDebugInfo::CreateLimitedType(const RecordType *Ty) { break; } - if (auto *CTSD = dyn_cast<ClassTemplateSpecializationDecl>(Ty->getOriginalDecl())) { - CXXRecordDecl *TemplateDecl = CTSD->getSpecializedTemplate()->getTemplatedDecl(); + if (auto *CTSD = + dyn_cast<ClassTemplateSpecializationDecl>(Ty->getOriginalDecl())) { + CXXRecordDecl *TemplateDecl = + CTSD->getSpecializedTemplate()->getTemplatedDecl(); RegionMap[TemplateDecl].reset(RealDecl); - }else { - RegionMap[RD].reset(RealDecl); + } else { + RegionMap[RD].reset(RealDecl); } TypeCache[QualType(Ty, 0).getAsOpaquePtr()].reset(RealDecl); >From fc20aeb6d712c5f3fa8a21deab84dcc8f3e82c59 Mon Sep 17 00:00:00 2001 From: "Khatavkar, Yashasvi" <yashasvi.khatav...@intel.com> Date: Thu, 21 Aug 2025 10:51:09 -0700 Subject: [PATCH 11/12] Move test to debuginfo directory --- .../CXX}/dependent-template-type-scope.cpp | 0 1 file changed, 0 insertions(+), 0 deletions(-) rename clang/test/{CodeGenCXX => DebugInfo/CXX}/dependent-template-type-scope.cpp (100%) diff --git a/clang/test/CodeGenCXX/dependent-template-type-scope.cpp b/clang/test/DebugInfo/CXX/dependent-template-type-scope.cpp similarity index 100% rename from clang/test/CodeGenCXX/dependent-template-type-scope.cpp rename to clang/test/DebugInfo/CXX/dependent-template-type-scope.cpp >From b1fc985c4c81729748508833a3cd6510a43b5c3d Mon Sep 17 00:00:00 2001 From: "Khatavkar, Yashasvi" <yashasvi.khatav...@intel.com> Date: Thu, 21 Aug 2025 10:54:23 -0700 Subject: [PATCH 12/12] resolve conflicts in release notes --- clang/docs/ReleaseNotes.rst | 1 - 1 file changed, 1 deletion(-) diff --git a/clang/docs/ReleaseNotes.rst b/clang/docs/ReleaseNotes.rst index 2b01dc4c84ec4..6fe54f65656fc 100644 --- a/clang/docs/ReleaseNotes.rst +++ b/clang/docs/ReleaseNotes.rst @@ -229,7 +229,6 @@ Bug Fixes in This Version cast chain. (#GH149967). - Fixed a crash with incompatible pointer to integer conversions in designated initializers involving string literals. (#GH154046) - macro expansion when performing analysis for nullability attributes. (#GH138371) - Fixed scope of typedefs present inside a template class. (#GH91451) Bug Fixes to Compiler Builtins _______________________________________________ cfe-commits mailing list cfe-commits@lists.llvm.org https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits