[clang] [llvm] Unused enum type (PR #137682)
via cfe-commits
cfe-commits at lists.llvm.org
Mon Apr 28 11:23:24 PDT 2025
https://github.com/ykhatav created https://github.com/llvm/llvm-project/pull/137682
None
>From 0647828990d9ec89554c016e4e016f28b9a2931d Mon Sep 17 00:00:00 2001
From: "Khatavkar, Yashasvi" <yashasvi.khatavkar at intel.com>
Date: Mon, 28 Apr 2025 10:53:53 -0700
Subject: [PATCH 1/3] Retain unused nested enum type information
---
clang/lib/CodeGen/CGDebugInfo.cpp | 9 ++
clang/lib/CodeGen/CGDebugInfo.h | 1 +
llvm/test/DebugInfo/X86/nested_unused_enum.ll | 104 ++++++++++++++++++
3 files changed, 114 insertions(+)
create mode 100644 llvm/test/DebugInfo/X86/nested_unused_enum.ll
diff --git a/clang/lib/CodeGen/CGDebugInfo.cpp b/clang/lib/CodeGen/CGDebugInfo.cpp
index f3ec498d4064b..6bac549b2a8f1 100644
--- a/clang/lib/CodeGen/CGDebugInfo.cpp
+++ b/clang/lib/CodeGen/CGDebugInfo.cpp
@@ -1901,6 +1901,13 @@ CGDebugInfo::CreateRecordStaticField(const VarDecl *Var, llvm::DIType *RecordTy,
return GV;
}
+void CGDebugInfo::CollectRecordEnumType(const EnumDecl *ED, SmallVectorImpl<llvm::Metadata *> &elements) {
+QualType Ty = CGM.getContext().getTypeDeclType(ED);
+ SourceLocation Loc = ED->getLocation();
+ if (llvm::DIType *enumType = getOrCreateType(Ty, getOrCreateFile(Loc)))
+ elements.push_back(enumType);
+}
+
void CGDebugInfo::CollectRecordNormalField(
const FieldDecl *field, uint64_t OffsetInBits, llvm::DIFile *tunit,
SmallVectorImpl<llvm::Metadata *> &elements, llvm::DIType *RecordTy,
@@ -1987,6 +1994,8 @@ void CGDebugInfo::CollectRecordFields(
// Bump field number for next field.
++fieldNo;
+ } else if (const auto *enumType = dyn_cast<EnumDecl>(I)) {
+ CollectRecordEnumType(enumType, elements);
} else if (CGM.getCodeGenOpts().EmitCodeView) {
// Debug info for nested types is included in the member list only for
// CodeView.
diff --git a/clang/lib/CodeGen/CGDebugInfo.h b/clang/lib/CodeGen/CGDebugInfo.h
index b287ce7b92eee..2bfa66ddec509 100644
--- a/clang/lib/CodeGen/CGDebugInfo.h
+++ b/clang/lib/CodeGen/CGDebugInfo.h
@@ -370,6 +370,7 @@ class CGDebugInfo {
llvm::DIDerivedType *CreateRecordStaticField(const VarDecl *Var,
llvm::DIType *RecordTy,
const RecordDecl *RD);
+ void CollectRecordEnumType(const EnumDecl *ED, SmallVectorImpl<llvm::Metadata *> &elements);
void CollectRecordNormalField(const FieldDecl *Field, uint64_t OffsetInBits,
llvm::DIFile *F,
SmallVectorImpl<llvm::Metadata *> &E,
diff --git a/llvm/test/DebugInfo/X86/nested_unused_enum.ll b/llvm/test/DebugInfo/X86/nested_unused_enum.ll
new file mode 100644
index 0000000000000..f8f304add2eb8
--- /dev/null
+++ b/llvm/test/DebugInfo/X86/nested_unused_enum.ll
@@ -0,0 +1,104 @@
+; RUN: %clang_cc1 -fno-eliminate-unused-debug-types -emit-llvm -o - %s | FileCheck %s
+; RUN: llvm-dwarfdump %t | FileCheck %s
+
+;CHECK: DW_TAG_structure_type
+;CHECK-NEXT: DW_AT_calling_convention (DW_CC_pass_by_value)
+;CHECK-NEXT: DW_AT_name ("Type")
+;CHECK-NEXT: DW_AT_byte_size (0x04)
+;CHECK-NEXT: DW_AT_decl_file ("/iusers/ykhatavk/project_ics/llvm-project/debug_issue/enump.cpp")
+;CHECK-NEXT: DW_AT_decl_line (1)
+;CHECK: DW_TAG_member
+;CHECK-NEXT: DW_AT_name ("value")
+;CHECK-NEXT: DW_AT_type (0x0000004f "int")
+;CHECK-NEXT: DW_AT_decl_file ("/iusers/ykhatavk/project_ics/llvm-project/debug_issue/enump.cpp")
+;CHECK-NEXT: DW_AT_decl_line (3)
+;CHECK-NEXT: DW_AT_data_member_location (0x00)
+;CHECK: DW_TAG_enumeration_type
+;CHECK-NEXT: DW_AT_type (0x00000053 "unsigned int")
+;CHECK-NEXT: DW_AT_byte_size (0x04)
+;CHECK-NEXT: DW_AT_decl_file ("/iusers/ykhatavk/project_ics/llvm-project/debug_issue/enump.cpp")
+;CHECK-NEXT: DW_AT_decl_line (2)
+;CHECK: DW_TAG_enumerator
+;CHECK-NEXT: DW_AT_name ("Unused")
+;CHECK-NEXT: DW_AT_const_value (0)
+
+; ModuleID = 'enump.cpp'
+source_filename = "enump.cpp"
+target datalayout = "e-m:e-p270:32:32-p271:32:32-p272:64:64-i64:64-i128:128-f80:128-n8:16:32:64-S128"
+target triple = "x86_64-unknown-linux-gnu"
+
+%struct.Type = type { i32 }
+
+$_ZN4TypeC2Ev = comdat any
+
+; Function Attrs: mustprogress noinline norecurse nounwind optnone uwtable
+define dso_local noundef i32 @main() #0 !dbg !20 {
+entry:
+ %retval = alloca i32, align 4
+ %t = alloca %struct.Type, align 4
+ store i32 0, ptr %retval, align 4
+ #dbg_declare(ptr %t, !24, !DIExpression(), !25)
+ call void @_ZN4TypeC2Ev(ptr noundef nonnull align 4 dereferenceable(4) %t) #2, !dbg !25
+ %value = getelementptr inbounds nuw %struct.Type, ptr %t, i32 0, i32 0, !dbg !26
+ %0 = load i32, ptr %value, align 4, !dbg !26
+ ret i32 %0, !dbg !27
+}
+
+; Function Attrs: mustprogress noinline nounwind optnone uwtable
+define linkonce_odr dso_local void @_ZN4TypeC2Ev(ptr noundef nonnull align 4 dereferenceable(4) %this) unnamed_addr #1 comdat align 2 !dbg !28 {
+entry:
+ %this.addr = alloca ptr, align 8
+ store ptr %this, ptr %this.addr, align 8
+ #dbg_declare(ptr %this.addr, !33, !DIExpression(), !35)
+ %this1 = load ptr, ptr %this.addr, align 8
+ %value = getelementptr inbounds nuw %struct.Type, ptr %this1, i32 0, i32 0, !dbg !36
+ store i32 0, ptr %value, align 4, !dbg !36
+ ret void, !dbg !37
+}
+
+attributes #0 = { mustprogress noinline norecurse nounwind optnone uwtable "frame-pointer"="all" "min-legal-vector-width"="0" "no-trapping-math"="true" "stack-protector-buffer-size"="8" "target-cpu"="x86-64" "target-features"="+cmov,+cx8,+fxsr,+mmx,+sse,+sse2,+x87" "tune-cpu"="generic" }
+attributes #1 = { mustprogress noinline nounwind optnone uwtable "frame-pointer"="all" "min-legal-vector-width"="0" "no-trapping-math"="true" "stack-protector-buffer-size"="8" "target-cpu"="x86-64" "target-features"="+cmov,+cx8,+fxsr,+mmx,+sse,+sse2,+x87" "tune-cpu"="generic" }
+attributes #2 = { nounwind }
+
+!llvm.dbg.cu = !{!0}
+!llvm.module.flags = !{!12, !13, !14, !15, !16, !17, !18}
+!llvm.ident = !{!19}
+
+!0 = distinct !DICompileUnit(language: DW_LANG_C_plus_plus_14, file: !1, producer: "clang version 21.0.0git (https://github.com/llvm/llvm-project.git 2b983a24583dd4e131d727717872a56712b5dd52)", isOptimized: false, runtimeVersion: 0, emissionKind: FullDebug, enums: !2, retainedTypes: !11, splitDebugInlining: false, nameTableKind: None)
+!1 = !DIFile(filename: "enump.cpp", directory: "/iusers/ykhatavk/project_ics/llvm-project/debug_issue", checksumkind: CSK_MD5, checksum: "35ec0482db78c9e464e8bf8cd231d5b9")
+!2 = !{!3}
+!3 = !DICompositeType(tag: DW_TAG_enumeration_type, scope: !4, file: !1, line: 2, baseType: !8, size: 32, elements: !9, identifier: "_ZTSN4TypeUt_E")
+!4 = distinct !DICompositeType(tag: DW_TAG_structure_type, name: "Type", file: !1, line: 1, size: 32, flags: DIFlagTypePassByValue | DIFlagNonTrivial, elements: !5, identifier: "_ZTS4Type")
+!5 = !{!3, !6}
+!6 = !DIDerivedType(tag: DW_TAG_member, name: "value", scope: !4, file: !1, line: 3, baseType: !7, size: 32)
+!7 = !DIBasicType(name: "int", size: 32, encoding: DW_ATE_signed)
+!8 = !DIBasicType(name: "unsigned int", size: 32, encoding: DW_ATE_unsigned)
+!9 = !{!10}
+!10 = !DIEnumerator(name: "Unused", value: 0, isUnsigned: true)
+!11 = !{!4}
+!12 = !{i32 7, !"Dwarf Version", i32 5}
+!13 = !{i32 2, !"Debug Info Version", i32 3}
+!14 = !{i32 1, !"wchar_size", i32 4}
+!15 = !{i32 8, !"PIC Level", i32 2}
+!16 = !{i32 7, !"PIE Level", i32 2}
+!17 = !{i32 7, !"uwtable", i32 2}
+!18 = !{i32 7, !"frame-pointer", i32 2}
+!19 = !{!"clang version 21.0.0git (https://github.com/llvm/llvm-project.git 2b983a24583dd4e131d727717872a56712b5dd52)"}
+!20 = distinct !DISubprogram(name: "main", scope: !1, file: !1, line: 5, type: !21, scopeLine: 5, flags: DIFlagPrototyped, spFlags: DISPFlagDefinition, unit: !0, retainedNodes: !23)
+!21 = !DISubroutineType(types: !22)
+!22 = !{!7}
+!23 = !{}
+!24 = !DILocalVariable(name: "t", scope: !20, file: !1, line: 6, type: !4)
+!25 = !DILocation(line: 6, column: 10, scope: !20)
+!26 = !DILocation(line: 7, column: 14, scope: !20)
+!27 = !DILocation(line: 7, column: 5, scope: !20)
+!28 = distinct !DISubprogram(name: "Type", linkageName: "_ZN4TypeC2Ev", scope: !4, file: !1, line: 1, type: !29, scopeLine: 1, flags: DIFlagArtificial | DIFlagPrototyped, spFlags: DISPFlagDefinition, unit: !0, declaration: !32, retainedNodes: !23)
+!29 = !DISubroutineType(types: !30)
+!30 = !{null, !31}
+!31 = !DIDerivedType(tag: DW_TAG_pointer_type, baseType: !4, size: 64, flags: DIFlagArtificial | DIFlagObjectPointer)
+!32 = !DISubprogram(name: "Type", scope: !4, type: !29, flags: DIFlagArtificial | DIFlagPrototyped, spFlags: 0)
+!33 = !DILocalVariable(name: "this", arg: 1, scope: !28, type: !34, flags: DIFlagArtificial | DIFlagObjectPointer)
+!34 = !DIDerivedType(tag: DW_TAG_pointer_type, baseType: !4, size: 64)
+!35 = !DILocation(line: 0, scope: !28)
+!36 = !DILocation(line: 3, column: 9, scope: !28)
+!37 = !DILocation(line: 1, column: 8, scope: !28)
>From c14676ece567a0062b6a9e8c2f97cc117220b4b1 Mon Sep 17 00:00:00 2001
From: "Khatavkar, Yashasvi" <yashasvi.khatavkar at intel.com>
Date: Mon, 28 Apr 2025 11:19:38 -0700
Subject: [PATCH 2/3] apply clang-format
---
clang/lib/CodeGen/CGDebugInfo.cpp | 9 +++++----
clang/lib/CodeGen/CGDebugInfo.h | 3 ++-
2 files changed, 7 insertions(+), 5 deletions(-)
diff --git a/clang/lib/CodeGen/CGDebugInfo.cpp b/clang/lib/CodeGen/CGDebugInfo.cpp
index 6bac549b2a8f1..7840b09776be4 100644
--- a/clang/lib/CodeGen/CGDebugInfo.cpp
+++ b/clang/lib/CodeGen/CGDebugInfo.cpp
@@ -1901,8 +1901,9 @@ CGDebugInfo::CreateRecordStaticField(const VarDecl *Var, llvm::DIType *RecordTy,
return GV;
}
-void CGDebugInfo::CollectRecordEnumType(const EnumDecl *ED, SmallVectorImpl<llvm::Metadata *> &elements) {
-QualType Ty = CGM.getContext().getTypeDeclType(ED);
+void CGDebugInfo::CollectRecordEnumType(
+ const EnumDecl *ED, SmallVectorImpl<llvm::Metadata *> &elements) {
+ QualType Ty = CGM.getContext().getTypeDeclType(ED);
SourceLocation Loc = ED->getLocation();
if (llvm::DIType *enumType = getOrCreateType(Ty, getOrCreateFile(Loc)))
elements.push_back(enumType);
@@ -1994,8 +1995,8 @@ void CGDebugInfo::CollectRecordFields(
// Bump field number for next field.
++fieldNo;
- } else if (const auto *enumType = dyn_cast<EnumDecl>(I)) {
- CollectRecordEnumType(enumType, elements);
+ } else if (const auto *enumType = dyn_cast<EnumDecl>(I)) {
+ CollectRecordEnumType(enumType, elements);
} else if (CGM.getCodeGenOpts().EmitCodeView) {
// Debug info for nested types is included in the member list only for
// CodeView.
diff --git a/clang/lib/CodeGen/CGDebugInfo.h b/clang/lib/CodeGen/CGDebugInfo.h
index 2bfa66ddec509..baf2069745535 100644
--- a/clang/lib/CodeGen/CGDebugInfo.h
+++ b/clang/lib/CodeGen/CGDebugInfo.h
@@ -370,7 +370,8 @@ class CGDebugInfo {
llvm::DIDerivedType *CreateRecordStaticField(const VarDecl *Var,
llvm::DIType *RecordTy,
const RecordDecl *RD);
- void CollectRecordEnumType(const EnumDecl *ED, SmallVectorImpl<llvm::Metadata *> &elements);
+ void CollectRecordEnumType(const EnumDecl *ED,
+ SmallVectorImpl<llvm::Metadata *> &elements);
void CollectRecordNormalField(const FieldDecl *Field, uint64_t OffsetInBits,
llvm::DIFile *F,
SmallVectorImpl<llvm::Metadata *> &E,
>From 5ea124927554bb4e6ed5cb5649075ff0024b11ab Mon Sep 17 00:00:00 2001
From: "Khatavkar, Yashasvi" <yashasvi.khatavkar at intel.com>
Date: Mon, 28 Apr 2025 11:22:58 -0700
Subject: [PATCH 3/3] Add clang test
---
clang/test/CodeGen/unused_nested_enump.cpp | 32 ++++++
llvm/test/DebugInfo/X86/nested_unused_enum.ll | 104 ------------------
2 files changed, 32 insertions(+), 104 deletions(-)
create mode 100644 clang/test/CodeGen/unused_nested_enump.cpp
delete mode 100644 llvm/test/DebugInfo/X86/nested_unused_enum.ll
diff --git a/clang/test/CodeGen/unused_nested_enump.cpp b/clang/test/CodeGen/unused_nested_enump.cpp
new file mode 100644
index 0000000000000..b4bab645ad0e5
--- /dev/null
+++ b/clang/test/CodeGen/unused_nested_enump.cpp
@@ -0,0 +1,32 @@
+// RUN: %clang_cc1 -debug-info-kind=unused-types -emit-llvm -o - %s | FileCheck %s
+
+struct Type {
+ enum { Unused };
+ int value = 0;
+};
+int main() {
+ Type t;
+ return t.value;
+}
+
+// CHECK: !DICompositeType(tag: DW_TAG_enumeration_type
+// CHECK-SAME: scope: ![[STRUCT:[0-9]+]]
+// CHECK-SAME: baseType: ![[UINT:[0-9]+]]
+// CHECK-SAME: elements: ![[ELEMENTS:[0-9]+]]
+
+// CHECK: ![[STRUCT]] = distinct !DICompositeType(tag: DW_TAG_structure_type
+// CHECK-SAME: elements: ![[STRUCT_ELEMENTS:[0-9]+]]
+
+// CHECK: ![[STRUCT_ELEMENTS]] = !{![[ENUM_MEMBER:[0-9]+]], ![[VALUE_MEMBER:[0-9]+]]}
+
+// CHECK: ![[VALUE_MEMBER]] = !DIDerivedType(tag: DW_TAG_member
+// CHECK-SAME: name: "value"
+// CHECK-SAME: scope: ![[STRUCT]]
+// CHECK-SAME: baseType: ![[INT:[0-9]+]]
+
+// CHECK: ![[INT]] = !DIBasicType(name: "int"
+
+// CHECK: ![[UINT]] = !DIBasicType(name: "unsigned int"
+
+// CHECK: ![[ELEMENTS]] = !{![[ENUMERATOR:[0-9]+]]}
+// CHECK: ![[ENUMERATOR]] = !DIEnumerator(name: "Unused", value: 0, isUnsigned: true)
diff --git a/llvm/test/DebugInfo/X86/nested_unused_enum.ll b/llvm/test/DebugInfo/X86/nested_unused_enum.ll
deleted file mode 100644
index f8f304add2eb8..0000000000000
--- a/llvm/test/DebugInfo/X86/nested_unused_enum.ll
+++ /dev/null
@@ -1,104 +0,0 @@
-; RUN: %clang_cc1 -fno-eliminate-unused-debug-types -emit-llvm -o - %s | FileCheck %s
-; RUN: llvm-dwarfdump %t | FileCheck %s
-
-;CHECK: DW_TAG_structure_type
-;CHECK-NEXT: DW_AT_calling_convention (DW_CC_pass_by_value)
-;CHECK-NEXT: DW_AT_name ("Type")
-;CHECK-NEXT: DW_AT_byte_size (0x04)
-;CHECK-NEXT: DW_AT_decl_file ("/iusers/ykhatavk/project_ics/llvm-project/debug_issue/enump.cpp")
-;CHECK-NEXT: DW_AT_decl_line (1)
-;CHECK: DW_TAG_member
-;CHECK-NEXT: DW_AT_name ("value")
-;CHECK-NEXT: DW_AT_type (0x0000004f "int")
-;CHECK-NEXT: DW_AT_decl_file ("/iusers/ykhatavk/project_ics/llvm-project/debug_issue/enump.cpp")
-;CHECK-NEXT: DW_AT_decl_line (3)
-;CHECK-NEXT: DW_AT_data_member_location (0x00)
-;CHECK: DW_TAG_enumeration_type
-;CHECK-NEXT: DW_AT_type (0x00000053 "unsigned int")
-;CHECK-NEXT: DW_AT_byte_size (0x04)
-;CHECK-NEXT: DW_AT_decl_file ("/iusers/ykhatavk/project_ics/llvm-project/debug_issue/enump.cpp")
-;CHECK-NEXT: DW_AT_decl_line (2)
-;CHECK: DW_TAG_enumerator
-;CHECK-NEXT: DW_AT_name ("Unused")
-;CHECK-NEXT: DW_AT_const_value (0)
-
-; ModuleID = 'enump.cpp'
-source_filename = "enump.cpp"
-target datalayout = "e-m:e-p270:32:32-p271:32:32-p272:64:64-i64:64-i128:128-f80:128-n8:16:32:64-S128"
-target triple = "x86_64-unknown-linux-gnu"
-
-%struct.Type = type { i32 }
-
-$_ZN4TypeC2Ev = comdat any
-
-; Function Attrs: mustprogress noinline norecurse nounwind optnone uwtable
-define dso_local noundef i32 @main() #0 !dbg !20 {
-entry:
- %retval = alloca i32, align 4
- %t = alloca %struct.Type, align 4
- store i32 0, ptr %retval, align 4
- #dbg_declare(ptr %t, !24, !DIExpression(), !25)
- call void @_ZN4TypeC2Ev(ptr noundef nonnull align 4 dereferenceable(4) %t) #2, !dbg !25
- %value = getelementptr inbounds nuw %struct.Type, ptr %t, i32 0, i32 0, !dbg !26
- %0 = load i32, ptr %value, align 4, !dbg !26
- ret i32 %0, !dbg !27
-}
-
-; Function Attrs: mustprogress noinline nounwind optnone uwtable
-define linkonce_odr dso_local void @_ZN4TypeC2Ev(ptr noundef nonnull align 4 dereferenceable(4) %this) unnamed_addr #1 comdat align 2 !dbg !28 {
-entry:
- %this.addr = alloca ptr, align 8
- store ptr %this, ptr %this.addr, align 8
- #dbg_declare(ptr %this.addr, !33, !DIExpression(), !35)
- %this1 = load ptr, ptr %this.addr, align 8
- %value = getelementptr inbounds nuw %struct.Type, ptr %this1, i32 0, i32 0, !dbg !36
- store i32 0, ptr %value, align 4, !dbg !36
- ret void, !dbg !37
-}
-
-attributes #0 = { mustprogress noinline norecurse nounwind optnone uwtable "frame-pointer"="all" "min-legal-vector-width"="0" "no-trapping-math"="true" "stack-protector-buffer-size"="8" "target-cpu"="x86-64" "target-features"="+cmov,+cx8,+fxsr,+mmx,+sse,+sse2,+x87" "tune-cpu"="generic" }
-attributes #1 = { mustprogress noinline nounwind optnone uwtable "frame-pointer"="all" "min-legal-vector-width"="0" "no-trapping-math"="true" "stack-protector-buffer-size"="8" "target-cpu"="x86-64" "target-features"="+cmov,+cx8,+fxsr,+mmx,+sse,+sse2,+x87" "tune-cpu"="generic" }
-attributes #2 = { nounwind }
-
-!llvm.dbg.cu = !{!0}
-!llvm.module.flags = !{!12, !13, !14, !15, !16, !17, !18}
-!llvm.ident = !{!19}
-
-!0 = distinct !DICompileUnit(language: DW_LANG_C_plus_plus_14, file: !1, producer: "clang version 21.0.0git (https://github.com/llvm/llvm-project.git 2b983a24583dd4e131d727717872a56712b5dd52)", isOptimized: false, runtimeVersion: 0, emissionKind: FullDebug, enums: !2, retainedTypes: !11, splitDebugInlining: false, nameTableKind: None)
-!1 = !DIFile(filename: "enump.cpp", directory: "/iusers/ykhatavk/project_ics/llvm-project/debug_issue", checksumkind: CSK_MD5, checksum: "35ec0482db78c9e464e8bf8cd231d5b9")
-!2 = !{!3}
-!3 = !DICompositeType(tag: DW_TAG_enumeration_type, scope: !4, file: !1, line: 2, baseType: !8, size: 32, elements: !9, identifier: "_ZTSN4TypeUt_E")
-!4 = distinct !DICompositeType(tag: DW_TAG_structure_type, name: "Type", file: !1, line: 1, size: 32, flags: DIFlagTypePassByValue | DIFlagNonTrivial, elements: !5, identifier: "_ZTS4Type")
-!5 = !{!3, !6}
-!6 = !DIDerivedType(tag: DW_TAG_member, name: "value", scope: !4, file: !1, line: 3, baseType: !7, size: 32)
-!7 = !DIBasicType(name: "int", size: 32, encoding: DW_ATE_signed)
-!8 = !DIBasicType(name: "unsigned int", size: 32, encoding: DW_ATE_unsigned)
-!9 = !{!10}
-!10 = !DIEnumerator(name: "Unused", value: 0, isUnsigned: true)
-!11 = !{!4}
-!12 = !{i32 7, !"Dwarf Version", i32 5}
-!13 = !{i32 2, !"Debug Info Version", i32 3}
-!14 = !{i32 1, !"wchar_size", i32 4}
-!15 = !{i32 8, !"PIC Level", i32 2}
-!16 = !{i32 7, !"PIE Level", i32 2}
-!17 = !{i32 7, !"uwtable", i32 2}
-!18 = !{i32 7, !"frame-pointer", i32 2}
-!19 = !{!"clang version 21.0.0git (https://github.com/llvm/llvm-project.git 2b983a24583dd4e131d727717872a56712b5dd52)"}
-!20 = distinct !DISubprogram(name: "main", scope: !1, file: !1, line: 5, type: !21, scopeLine: 5, flags: DIFlagPrototyped, spFlags: DISPFlagDefinition, unit: !0, retainedNodes: !23)
-!21 = !DISubroutineType(types: !22)
-!22 = !{!7}
-!23 = !{}
-!24 = !DILocalVariable(name: "t", scope: !20, file: !1, line: 6, type: !4)
-!25 = !DILocation(line: 6, column: 10, scope: !20)
-!26 = !DILocation(line: 7, column: 14, scope: !20)
-!27 = !DILocation(line: 7, column: 5, scope: !20)
-!28 = distinct !DISubprogram(name: "Type", linkageName: "_ZN4TypeC2Ev", scope: !4, file: !1, line: 1, type: !29, scopeLine: 1, flags: DIFlagArtificial | DIFlagPrototyped, spFlags: DISPFlagDefinition, unit: !0, declaration: !32, retainedNodes: !23)
-!29 = !DISubroutineType(types: !30)
-!30 = !{null, !31}
-!31 = !DIDerivedType(tag: DW_TAG_pointer_type, baseType: !4, size: 64, flags: DIFlagArtificial | DIFlagObjectPointer)
-!32 = !DISubprogram(name: "Type", scope: !4, type: !29, flags: DIFlagArtificial | DIFlagPrototyped, spFlags: 0)
-!33 = !DILocalVariable(name: "this", arg: 1, scope: !28, type: !34, flags: DIFlagArtificial | DIFlagObjectPointer)
-!34 = !DIDerivedType(tag: DW_TAG_pointer_type, baseType: !4, size: 64)
-!35 = !DILocation(line: 0, scope: !28)
-!36 = !DILocation(line: 3, column: 9, scope: !28)
-!37 = !DILocation(line: 1, column: 8, scope: !28)
More information about the cfe-commits
mailing list