[clang] My change (PR #146729)
via cfe-commits
cfe-commits at lists.llvm.org
Wed Jul 2 08:34:47 PDT 2025
https://github.com/ykhatav created https://github.com/llvm/llvm-project/pull/146729
None
>From cfd949c1a70ae25c5c35e48d92166b45aef63654 Mon Sep 17 00:00:00 2001
From: "Khatavkar, Yashasvi" <yashasvi.khatavkar at intel.com>
Date: Wed, 2 Jul 2025 08:23:14 -0700
Subject: [PATCH 1/2] Fix scoping of dependent typedefs
---
clang/lib/CodeGen/CGDebugInfo.cpp | 10 +++++++++-
.../dependent-template-type-scope.cpp | 18 ++++++++++++++++++
2 files changed, 27 insertions(+), 1 deletion(-)
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 ee5e3d68a5ffa..fb70b9fd13d31 100644
--- a/clang/lib/CodeGen/CGDebugInfo.cpp
+++ b/clang/lib/CodeGen/CGDebugInfo.cpp
@@ -4170,9 +4170,17 @@ 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);
+}
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 d1404fa7e2ba716e2edfcb0468d06a6028297eda Mon Sep 17 00:00:00 2001
From: "Khatavkar, Yashasvi" <yashasvi.khatavkar at intel.com>
Date: Wed, 2 Jul 2025 08:24:26 -0700
Subject: [PATCH 2/2] 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 fb70b9fd13d31..a08f15418ea0b 100644
--- a/clang/lib/CodeGen/CGDebugInfo.cpp
+++ b/clang/lib/CodeGen/CGDebugInfo.cpp
@@ -4170,17 +4170,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(),
More information about the cfe-commits
mailing list