[llvm] [CodeView] Encode signed enumerators as signed integers (PR #210352)

via llvm-commits llvm-commits at lists.llvm.org
Fri Jul 17 07:54:07 PDT 2026


https://github.com/Nerixyz created https://github.com/llvm/llvm-project/pull/210352

In #210338 I noticed that enumerator constants were always encoded as unsigned integers. MSVC (usually) uses the correct signedness (comparison: https://godbolt.org/z/rbrchhjTT). It only uses signed values for 64 bit unsigned values (probably a bug).

We know the signedness in `DIEnumerator` and we should use it.

The change in `llvm/lib/DebugInfo/CodeView/CodeViewRecordIO.cpp` was needed, because the max/min values need all the bits to encode their value - otherwise we hit an assertion.

This also encodes the saturated value (`INT64_MIN = 0x8000000000000000`) in the int128 test correctly (initially added in https://reviews.llvm.org/D105320).

>From f19358afef10457a61b7fb02f7d163fc32562e4c Mon Sep 17 00:00:00 2001
From: Nerixyz <nerixdev at outlook.de>
Date: Fri, 17 Jul 2026 16:40:10 +0200
Subject: [PATCH] [CodeView] Encode signed enumerators as signed integers

---
 llvm/lib/CodeGen/AsmPrinter/CodeViewDebug.cpp |   8 +-
 .../DebugInfo/CodeView/CodeViewRecordIO.cpp   |   7 +-
 llvm/test/DebugInfo/COFF/enum-limits.ll       | 431 ++++++++++++++++++
 llvm/test/DebugInfo/COFF/integer-128.ll       |   4 +-
 4 files changed, 440 insertions(+), 10 deletions(-)
 create mode 100644 llvm/test/DebugInfo/COFF/enum-limits.ll

diff --git a/llvm/lib/CodeGen/AsmPrinter/CodeViewDebug.cpp b/llvm/lib/CodeGen/AsmPrinter/CodeViewDebug.cpp
index 193379d7170d6..84ea5e349f01d 100644
--- a/llvm/lib/CodeGen/AsmPrinter/CodeViewDebug.cpp
+++ b/llvm/lib/CodeGen/AsmPrinter/CodeViewDebug.cpp
@@ -2285,10 +2285,10 @@ TypeIndex CodeViewDebug::lowerTypeEnum(const DICompositeType *Ty) {
       // We assume that the frontend provides all members in source declaration
       // order, which is what MSVC does.
       if (auto *Enumerator = dyn_cast_or_null<DIEnumerator>(Element)) {
-        // FIXME: Is it correct to always emit these as unsigned here?
-        EnumeratorRecord ER(MemberAccess::Public,
-                            APSInt(Enumerator->getValue(), true),
-                            Enumerator->getName());
+        EnumeratorRecord ER(
+            MemberAccess::Public,
+            APSInt(Enumerator->getValue(), Enumerator->isUnsigned()),
+            Enumerator->getName());
         ContinuationBuilder.writeMemberType(ER);
         EnumeratorCount++;
       }
diff --git a/llvm/lib/DebugInfo/CodeView/CodeViewRecordIO.cpp b/llvm/lib/DebugInfo/CodeView/CodeViewRecordIO.cpp
index 9557305c91ff9..9e5b1204defb9 100644
--- a/llvm/lib/DebugInfo/CodeView/CodeViewRecordIO.cpp
+++ b/llvm/lib/DebugInfo/CodeView/CodeViewRecordIO.cpp
@@ -308,8 +308,8 @@ void CodeViewRecordIO::emitEncodedSignedInteger(const int64_t &Value,
   } else {
     Streamer->emitIntValue(LF_QUADWORD, 2);
     emitComment(Comment);
-    Streamer->emitIntValue(Value, 4); // FIXME: Why not 8 (size of quadword)?
-    incrStreamedLen(6);               // FIXME: Why not 10 (8 + 2)?
+    Streamer->emitIntValue(Value, 8);
+    incrStreamedLen(10);
   }
 }
 
@@ -330,11 +330,10 @@ void CodeViewRecordIO::emitEncodedUnsignedInteger(const uint64_t &Value,
     Streamer->emitIntValue(Value, 4);
     incrStreamedLen(6);
   } else {
-    // FIXME: There are no test cases covering this block.
     Streamer->emitIntValue(LF_UQUADWORD, 2);
     emitComment(Comment);
     Streamer->emitIntValue(Value, 8);
-    incrStreamedLen(6); // FIXME: Why not 10 (8 + 2)?
+    incrStreamedLen(10);
   }
 }
 
diff --git a/llvm/test/DebugInfo/COFF/enum-limits.ll b/llvm/test/DebugInfo/COFF/enum-limits.ll
new file mode 100644
index 0000000000000..38130add01744
--- /dev/null
+++ b/llvm/test/DebugInfo/COFF/enum-limits.ll
@@ -0,0 +1,431 @@
+; RUN: llc < %s -filetype=obj | llvm-readobj - --codeview | FileCheck %s
+; RUN: llc < %s | llvm-mc -filetype=obj --triple=x86_64-windows | llvm-readobj - --codeview | FileCheck %s
+
+; CHECK:     CodeViewTypes [
+
+; CHECK:        FieldList (0x1003) {
+; CHECK-NEXT:     TypeLeafKind: LF_FIELDLIST (0x1203)
+; CHECK-NEXT:     Enumerator {
+; CHECK-NEXT:       TypeLeafKind: LF_ENUMERATE (0x1502)
+; CHECK-NEXT:       AccessSpecifier: Public (0x3)
+; CHECK-NEXT:       EnumValue: 0
+; CHECK-NEXT:       Name: Min
+; CHECK-NEXT:     }
+; CHECK-NEXT:     Enumerator {
+; CHECK-NEXT:       TypeLeafKind: LF_ENUMERATE (0x1502)
+; CHECK-NEXT:       AccessSpecifier: Public (0x3)
+; CHECK-NEXT:       EnumValue: 255
+; CHECK-NEXT:       Name: Max
+; CHECK-NEXT:     }
+; CHECK-NEXT:   }
+; CHECK-NEXT:   Enum (0x1004) {
+; CHECK-NEXT:     TypeLeafKind: LF_ENUM (0x1507)
+; CHECK-NEXT:     NumEnumerators: 2
+; CHECK-NEXT:     Properties [ (0x200)
+; CHECK-NEXT:       HasUniqueName (0x200)
+; CHECK-NEXT:     ]
+; CHECK-NEXT:     UnderlyingType: unsigned char (0x20)
+; CHECK-NEXT:     FieldListType: <field list> (0x1003)
+; CHECK-NEXT:     Name: U8Enum
+; CHECK-NEXT:     LinkageName: .?AW4U8Enum@@
+; CHECK-NEXT:   }
+
+; CHECK:        FieldList (0x1007) {
+; CHECK-NEXT:     TypeLeafKind: LF_FIELDLIST (0x1203)
+; CHECK-NEXT:     Enumerator {
+; CHECK-NEXT:       TypeLeafKind: LF_ENUMERATE (0x1502)
+; CHECK-NEXT:       AccessSpecifier: Public (0x3)
+; CHECK-NEXT:       EnumValue: -128
+; CHECK-NEXT:       Name: Min
+; CHECK-NEXT:     }
+; CHECK-NEXT:     Enumerator {
+; CHECK-NEXT:       TypeLeafKind: LF_ENUMERATE (0x1502)
+; CHECK-NEXT:       AccessSpecifier: Public (0x3)
+; CHECK-NEXT:       EnumValue: 127
+; CHECK-NEXT:       Name: Max
+; CHECK-NEXT:     }
+; CHECK-NEXT:   }
+; CHECK-NEXT:   Enum (0x1008) {
+; CHECK-NEXT:     TypeLeafKind: LF_ENUM (0x1507)
+; CHECK-NEXT:     NumEnumerators: 2
+; CHECK-NEXT:     Properties [ (0x200)
+; CHECK-NEXT:       HasUniqueName (0x200)
+; CHECK-NEXT:     ]
+; CHECK-NEXT:     UnderlyingType: char (0x70)
+; CHECK-NEXT:     FieldListType: <field list> (0x1007)
+; CHECK-NEXT:     Name: I8Enum
+; CHECK-NEXT:     LinkageName: .?AW4I8Enum@@
+; CHECK-NEXT:   }
+
+; CHECK:        FieldList (0x100A) {
+; CHECK-NEXT:     TypeLeafKind: LF_FIELDLIST (0x1203)
+; CHECK-NEXT:     Enumerator {
+; CHECK-NEXT:       TypeLeafKind: LF_ENUMERATE (0x1502)
+; CHECK-NEXT:       AccessSpecifier: Public (0x3)
+; CHECK-NEXT:       EnumValue: 0
+; CHECK-NEXT:       Name: Min
+; CHECK-NEXT:     }
+; CHECK-NEXT:     Enumerator {
+; CHECK-NEXT:       TypeLeafKind: LF_ENUMERATE (0x1502)
+; CHECK-NEXT:       AccessSpecifier: Public (0x3)
+; CHECK-NEXT:       EnumValue: 65535
+; CHECK-NEXT:       Name: Max
+; CHECK-NEXT:     }
+; CHECK-NEXT:   }
+; CHECK-NEXT:   Enum (0x100B) {
+; CHECK-NEXT:     TypeLeafKind: LF_ENUM (0x1507)
+; CHECK-NEXT:     NumEnumerators: 2
+; CHECK-NEXT:     Properties [ (0x200)
+; CHECK-NEXT:       HasUniqueName (0x200)
+; CHECK-NEXT:     ]
+; CHECK-NEXT:     UnderlyingType: unsigned short (0x21)
+; CHECK-NEXT:     FieldListType: <field list> (0x100A)
+; CHECK-NEXT:     Name: U16Enum
+; CHECK-NEXT:     LinkageName: .?AW4U16Enum@@
+; CHECK-NEXT:   }
+
+; CHECK:        FieldList (0x100D) {
+; CHECK-NEXT:     TypeLeafKind: LF_FIELDLIST (0x1203)
+; CHECK-NEXT:     Enumerator {
+; CHECK-NEXT:       TypeLeafKind: LF_ENUMERATE (0x1502)
+; CHECK-NEXT:       AccessSpecifier: Public (0x3)
+; CHECK-NEXT:       EnumValue: -32768
+; CHECK-NEXT:       Name: Min
+; CHECK-NEXT:     }
+; CHECK-NEXT:     Enumerator {
+; CHECK-NEXT:       TypeLeafKind: LF_ENUMERATE (0x1502)
+; CHECK-NEXT:       AccessSpecifier: Public (0x3)
+; CHECK-NEXT:       EnumValue: 32767
+; CHECK-NEXT:       Name: Max
+; CHECK-NEXT:     }
+; CHECK-NEXT:   }
+; CHECK-NEXT:   Enum (0x100E) {
+; CHECK-NEXT:     TypeLeafKind: LF_ENUM (0x1507)
+; CHECK-NEXT:     NumEnumerators: 2
+; CHECK-NEXT:     Properties [ (0x200)
+; CHECK-NEXT:       HasUniqueName (0x200)
+; CHECK-NEXT:     ]
+; CHECK-NEXT:     UnderlyingType: short (0x11)
+; CHECK-NEXT:     FieldListType: <field list> (0x100D)
+; CHECK-NEXT:     Name: I16Enum
+; CHECK-NEXT:     LinkageName: .?AW4I16Enum@@
+; CHECK-NEXT:   }
+
+; CHECK:        FieldList (0x1010) {
+; CHECK-NEXT:     TypeLeafKind: LF_FIELDLIST (0x1203)
+; CHECK-NEXT:     Enumerator {
+; CHECK-NEXT:       TypeLeafKind: LF_ENUMERATE (0x1502)
+; CHECK-NEXT:       AccessSpecifier: Public (0x3)
+; CHECK-NEXT:       EnumValue: 0
+; CHECK-NEXT:       Name: Min
+; CHECK-NEXT:     }
+; CHECK-NEXT:     Enumerator {
+; CHECK-NEXT:       TypeLeafKind: LF_ENUMERATE (0x1502)
+; CHECK-NEXT:       AccessSpecifier: Public (0x3)
+; CHECK-NEXT:       EnumValue: 4294967294
+; CHECK-NEXT:       Name: MaxMinusOne
+; CHECK-NEXT:     }
+; CHECK-NEXT:     Enumerator {
+; CHECK-NEXT:       TypeLeafKind: LF_ENUMERATE (0x1502)
+; CHECK-NEXT:       AccessSpecifier: Public (0x3)
+; CHECK-NEXT:       EnumValue: 4294967295
+; CHECK-NEXT:       Name: Max
+; CHECK-NEXT:     }
+; CHECK-NEXT:   }
+; CHECK-NEXT:   Enum (0x1011) {
+; CHECK-NEXT:     TypeLeafKind: LF_ENUM (0x1507)
+; CHECK-NEXT:     NumEnumerators: 3
+; CHECK-NEXT:     Properties [ (0x200)
+; CHECK-NEXT:       HasUniqueName (0x200)
+; CHECK-NEXT:     ]
+; CHECK-NEXT:     UnderlyingType: unsigned (0x75)
+; CHECK-NEXT:     FieldListType: <field list> (0x1010)
+; CHECK-NEXT:     Name: U32Enum
+; CHECK-NEXT:     LinkageName: .?AW4U32Enum@@
+; CHECK-NEXT:   }
+
+; CHECK:        FieldList (0x1013) {
+; CHECK-NEXT:     TypeLeafKind: LF_FIELDLIST (0x1203)
+; CHECK-NEXT:     Enumerator {
+; CHECK-NEXT:       TypeLeafKind: LF_ENUMERATE (0x1502)
+; CHECK-NEXT:       AccessSpecifier: Public (0x3)
+; CHECK-NEXT:       EnumValue: -2147483648
+; CHECK-NEXT:       Name: Min
+; CHECK-NEXT:     }
+; CHECK-NEXT:     Enumerator {
+; CHECK-NEXT:       TypeLeafKind: LF_ENUMERATE (0x1502)
+; CHECK-NEXT:       AccessSpecifier: Public (0x3)
+; CHECK-NEXT:       EnumValue: 2147483647
+; CHECK-NEXT:       Name: Max
+; CHECK-NEXT:     }
+; CHECK-NEXT:   }
+; CHECK-NEXT:   Enum (0x1014) {
+; CHECK-NEXT:     TypeLeafKind: LF_ENUM (0x1507)
+; CHECK-NEXT:     NumEnumerators: 2
+; CHECK-NEXT:     Properties [ (0x200)
+; CHECK-NEXT:       HasUniqueName (0x200)
+; CHECK-NEXT:     ]
+; CHECK-NEXT:     UnderlyingType: int (0x74)
+; CHECK-NEXT:     FieldListType: <field list> (0x1013)
+; CHECK-NEXT:     Name: I32Enum
+; CHECK-NEXT:     LinkageName: .?AW4I32Enum@@
+; CHECK-NEXT:   }
+
+; CHECK:        FieldList (0x1016) {
+; CHECK-NEXT:     TypeLeafKind: LF_FIELDLIST (0x1203)
+; CHECK-NEXT:     Enumerator {
+; CHECK-NEXT:       TypeLeafKind: LF_ENUMERATE (0x1502)
+; CHECK-NEXT:       AccessSpecifier: Public (0x3)
+; CHECK-NEXT:       EnumValue: 0
+; CHECK-NEXT:       Name: Min
+; CHECK-NEXT:     }
+; CHECK-NEXT:     Enumerator {
+; CHECK-NEXT:       TypeLeafKind: LF_ENUMERATE (0x1502)
+; CHECK-NEXT:       AccessSpecifier: Public (0x3)
+; CHECK-NEXT:       EnumValue: 18446744073709551614
+; CHECK-NEXT:       Name: MaxMinusOne
+; CHECK-NEXT:     }
+; CHECK-NEXT:     Enumerator {
+; CHECK-NEXT:       TypeLeafKind: LF_ENUMERATE (0x1502)
+; CHECK-NEXT:       AccessSpecifier: Public (0x3)
+; CHECK-NEXT:       EnumValue: 18446744073709551615
+; CHECK-NEXT:       Name: Max
+; CHECK-NEXT:     }
+; CHECK-NEXT:   }
+; CHECK-NEXT:   Enum (0x1017) {
+; CHECK-NEXT:     TypeLeafKind: LF_ENUM (0x1507)
+; CHECK-NEXT:     NumEnumerators: 3
+; CHECK-NEXT:     Properties [ (0x200)
+; CHECK-NEXT:       HasUniqueName (0x200)
+; CHECK-NEXT:     ]
+; CHECK-NEXT:     UnderlyingType: unsigned __int64 (0x23)
+; CHECK-NEXT:     FieldListType: <field list> (0x1016)
+; CHECK-NEXT:     Name: U64Enum
+; CHECK-NEXT:     LinkageName: .?AW4U64Enum@@
+; CHECK-NEXT:   }
+
+; CHECK:        FieldList (0x1019) {
+; CHECK-NEXT:     TypeLeafKind: LF_FIELDLIST (0x1203)
+; CHECK-NEXT:     Enumerator {
+; CHECK-NEXT:       TypeLeafKind: LF_ENUMERATE (0x1502)
+; CHECK-NEXT:       AccessSpecifier: Public (0x3)
+; CHECK-NEXT:       EnumValue: -9223372036854775808
+; CHECK-NEXT:       Name: Min
+; CHECK-NEXT:     }
+; CHECK-NEXT:     Enumerator {
+; CHECK-NEXT:       TypeLeafKind: LF_ENUMERATE (0x1502)
+; CHECK-NEXT:       AccessSpecifier: Public (0x3)
+; CHECK-NEXT:       EnumValue: -9223372036854775807
+; CHECK-NEXT:       Name: MinPlusOne
+; CHECK-NEXT:     }
+; CHECK-NEXT:     Enumerator {
+; CHECK-NEXT:       TypeLeafKind: LF_ENUMERATE (0x1502)
+; CHECK-NEXT:       AccessSpecifier: Public (0x3)
+; CHECK-NEXT:       EnumValue: 9223372036854775806
+; CHECK-NEXT:       Name: MaxMinusOne
+; CHECK-NEXT:     }
+; CHECK-NEXT:     Enumerator {
+; CHECK-NEXT:       TypeLeafKind: LF_ENUMERATE (0x1502)
+; CHECK-NEXT:       AccessSpecifier: Public (0x3)
+; CHECK-NEXT:       EnumValue: 9223372036854775807
+; CHECK-NEXT:       Name: Max
+; CHECK-NEXT:     }
+; CHECK-NEXT:   }
+; CHECK-NEXT:   Enum (0x101A) {
+; CHECK-NEXT:     TypeLeafKind: LF_ENUM (0x1507)
+; CHECK-NEXT:     NumEnumerators: 4
+; CHECK-NEXT:     Properties [ (0x200)
+; CHECK-NEXT:       HasUniqueName (0x200)
+; CHECK-NEXT:     ]
+; CHECK-NEXT:     UnderlyingType: __int64 (0x13)
+; CHECK-NEXT:     FieldListType: <field list> (0x1019)
+; CHECK-NEXT:     Name: I64Enum
+; CHECK-NEXT:     LinkageName: .?AW4I64Enum@@
+; CHECK-NEXT:   }
+
+; Generated and reduced from the following C++ source:
+; enum class U8Enum : unsigned char {
+;   Min = 0,
+;   Max = 255,
+; };
+; enum class I8Enum : char {
+;   Min = -128,
+;   Max = 127,
+; };
+; enum class U16Enum : unsigned short {
+;   Min = 0,
+;   Max = 65535,
+; };
+; enum class I16Enum : short {
+;   Min = -32768,
+;   Max = 32767,
+; };
+; enum class U32Enum : unsigned {
+;   Min = 0,
+;   MaxMinusOne = 4294967294,
+;   Max = 4294967295,
+; };
+; enum class I32Enum : int {
+;   Min = -2147483648,
+;   Max = 2147483647,
+; };
+; enum class U64Enum : unsigned long long {
+;   Min = 0,
+;   MaxMinusOne = 18446744073709551614ULL,
+;   Max = 18446744073709551615ULL,
+; };
+; enum class I64Enum : long long {
+;   Min = -9223372036854775807LL - 1,
+;   MinPlusOne = -9223372036854775807LL,
+;   MaxMinusOne = 9223372036854775806LL,
+;   Max = 9223372036854775807LL,
+; };
+; int main(){
+;   auto u8 = U8Enum::Max;
+;   auto i8 = I8Enum::Max;
+;   auto u16 = U16Enum::Max;
+;   auto i16 = I16Enum::Max;
+;   auto u32 = U32Enum::Max;
+;   auto i32 = I32Enum::Max;
+;   auto u64 = U64Enum::Max;
+;   auto i64 = I64Enum::Max;
+;   return 0;
+; }
+
+; ModuleID = 'enum-limits.cpp'
+source_filename = "enum-limits.cpp"
+target datalayout = "e-m:w-p270:32:32-p271:32:32-p272:64:64-i64:64-i128:128-f80:128-n8:16:32:64-S128"
+target triple = "x86_64-pc-windows-msvc19.51.36248"
+
+; Function Attrs: mustprogress noinline norecurse nounwind optnone uwtable
+define dso_local noundef i32 @main() #0 !dbg !72 {
+entry:
+  %retval = alloca i32, align 4
+  %u8 = alloca i8, align 1
+  %i8 = alloca i8, align 1
+  %u16 = alloca i16, align 2
+  %i16 = alloca i16, align 2
+  %u32 = alloca i32, align 4
+  %i32 = alloca i32, align 4
+  %u64 = alloca i64, align 8
+  %i64 = alloca i64, align 8
+  store i32 0, ptr %retval, align 4
+    #dbg_declare(ptr %u8, !76, !DIExpression(), !77)
+  store i8 -1, ptr %u8, align 1, !dbg !77
+    #dbg_declare(ptr %i8, !78, !DIExpression(), !79)
+  store i8 127, ptr %i8, align 1, !dbg !79
+    #dbg_declare(ptr %u16, !80, !DIExpression(), !81)
+  store i16 -1, ptr %u16, align 2, !dbg !81
+    #dbg_declare(ptr %i16, !82, !DIExpression(), !83)
+  store i16 32767, ptr %i16, align 2, !dbg !83
+    #dbg_declare(ptr %u32, !84, !DIExpression(), !85)
+  store i32 -1, ptr %u32, align 4, !dbg !85
+    #dbg_declare(ptr %i32, !86, !DIExpression(), !87)
+  store i32 2147483647, ptr %i32, align 4, !dbg !87
+    #dbg_declare(ptr %u64, !88, !DIExpression(), !89)
+  store i64 -1, ptr %u64, align 8, !dbg !89
+    #dbg_declare(ptr %i64, !90, !DIExpression(), !91)
+  store i64 9223372036854775807, ptr %i64, align 8, !dbg !91
+  ret i32 0, !dbg !92
+}
+
+attributes #0 = { mustprogress noinline norecurse nounwind optnone uwtable "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" }
+
+!llvm.dbg.cu = !{!0}
+!llvm.linker.options = !{!64, !65}
+!llvm.module.flags = !{!66, !67, !68, !69, !70}
+!llvm.ident = !{!71}
+
+!0 = distinct !DICompileUnit(language: DW_LANG_C_plus_plus_14, file: !1, producer: "clang version 24.0.0git (https://github.com/Nerixyz/llvm-project.git 9a2d9c7fef47c0af321150f75d8f21db06cccb43)", isOptimized: false, runtimeVersion: 0, emissionKind: FullDebug, enums: !2, globals: !47, splitDebugInlining: false, nameTableKind: None)
+!1 = !DIFile(filename: "enum-limits.cpp", directory: "F:\\Dev\\llvm-project\\llvm\\test\\DebugInfo\\COFF", checksumkind: CSK_MD5, checksum: "372fdab57a95194725a33026ed999ee0")
+!2 = !{!3, !8, !13, !18, !23, !29, !34, !40}
+!3 = !DICompositeType(tag: DW_TAG_enumeration_type, name: "U8Enum", file: !1, line: 1, baseType: !4, size: 8, flags: DIFlagEnumClass, elements: !5, identifier: ".?AW4U8Enum@@")
+!4 = !DIBasicType(name: "unsigned char", size: 8, encoding: DW_ATE_unsigned_char)
+!5 = !{!6, !7}
+!6 = !DIEnumerator(name: "Min", value: 0, isUnsigned: true)
+!7 = !DIEnumerator(name: "Max", value: 255, isUnsigned: true)
+!8 = !DICompositeType(tag: DW_TAG_enumeration_type, name: "I8Enum", file: !1, line: 5, baseType: !9, size: 8, flags: DIFlagEnumClass, elements: !10, identifier: ".?AW4I8Enum@@")
+!9 = !DIBasicType(name: "char", size: 8, encoding: DW_ATE_signed_char)
+!10 = !{!11, !12}
+!11 = !DIEnumerator(name: "Min", value: -128)
+!12 = !DIEnumerator(name: "Max", value: 127)
+!13 = !DICompositeType(tag: DW_TAG_enumeration_type, name: "U16Enum", file: !1, line: 9, baseType: !14, size: 16, flags: DIFlagEnumClass, elements: !15, identifier: ".?AW4U16Enum@@")
+!14 = !DIBasicType(name: "unsigned short", size: 16, encoding: DW_ATE_unsigned)
+!15 = !{!16, !17}
+!16 = !DIEnumerator(name: "Min", value: 0, isUnsigned: true)
+!17 = !DIEnumerator(name: "Max", value: 65535, isUnsigned: true)
+!18 = !DICompositeType(tag: DW_TAG_enumeration_type, name: "I16Enum", file: !1, line: 13, baseType: !19, size: 16, flags: DIFlagEnumClass, elements: !20, identifier: ".?AW4I16Enum@@")
+!19 = !DIBasicType(name: "short", size: 16, encoding: DW_ATE_signed)
+!20 = !{!21, !22}
+!21 = !DIEnumerator(name: "Min", value: -32768)
+!22 = !DIEnumerator(name: "Max", value: 32767)
+!23 = !DICompositeType(tag: DW_TAG_enumeration_type, name: "U32Enum", file: !1, line: 17, baseType: !24, size: 32, flags: DIFlagEnumClass, elements: !25, identifier: ".?AW4U32Enum@@")
+!24 = !DIBasicType(name: "unsigned int", size: 32, encoding: DW_ATE_unsigned)
+!25 = !{!26, !27, !28}
+!26 = !DIEnumerator(name: "Min", value: 0, isUnsigned: true)
+!27 = !DIEnumerator(name: "MaxMinusOne", value: 4294967294, isUnsigned: true)
+!28 = !DIEnumerator(name: "Max", value: 4294967295, isUnsigned: true)
+!29 = !DICompositeType(tag: DW_TAG_enumeration_type, name: "I32Enum", file: !1, line: 22, baseType: !30, size: 32, flags: DIFlagEnumClass, elements: !31, identifier: ".?AW4I32Enum@@")
+!30 = !DIBasicType(name: "int", size: 32, encoding: DW_ATE_signed)
+!31 = !{!32, !33}
+!32 = !DIEnumerator(name: "Min", value: -2147483648)
+!33 = !DIEnumerator(name: "Max", value: 2147483647)
+!34 = !DICompositeType(tag: DW_TAG_enumeration_type, name: "U64Enum", file: !1, line: 26, baseType: !35, size: 64, flags: DIFlagEnumClass, elements: !36, identifier: ".?AW4U64Enum@@")
+!35 = !DIBasicType(name: "unsigned long long", size: 64, encoding: DW_ATE_unsigned)
+!36 = !{!37, !38, !39}
+!37 = !DIEnumerator(name: "Min", value: 0, isUnsigned: true)
+!38 = !DIEnumerator(name: "MaxMinusOne", value: 18446744073709551614, isUnsigned: true)
+!39 = !DIEnumerator(name: "Max", value: 18446744073709551615, isUnsigned: true)
+!40 = !DICompositeType(tag: DW_TAG_enumeration_type, name: "I64Enum", file: !1, line: 31, baseType: !41, size: 64, flags: DIFlagEnumClass, elements: !42, identifier: ".?AW4I64Enum@@")
+!41 = !DIBasicType(name: "long long", size: 64, encoding: DW_ATE_signed)
+!42 = !{!43, !44, !45, !46}
+!43 = !DIEnumerator(name: "Min", value: -9223372036854775808)
+!44 = !DIEnumerator(name: "MinPlusOne", value: -9223372036854775807)
+!45 = !DIEnumerator(name: "MaxMinusOne", value: 9223372036854775806)
+!46 = !DIEnumerator(name: "Max", value: 9223372036854775807)
+!47 = !{!48, !50, !52, !54, !56, !58, !60, !62}
+!48 = !DIGlobalVariableExpression(var: !49, expr: !DIExpression(DW_OP_constu, 255, DW_OP_stack_value))
+!49 = distinct !DIGlobalVariable(name: "Max", scope: !0, file: !1, line: 3, type: !3, isLocal: true, isDefinition: true)
+!50 = !DIGlobalVariableExpression(var: !51, expr: !DIExpression(DW_OP_constu, 127, DW_OP_stack_value))
+!51 = distinct !DIGlobalVariable(name: "Max", scope: !0, file: !1, line: 7, type: !8, isLocal: true, isDefinition: true)
+!52 = !DIGlobalVariableExpression(var: !53, expr: !DIExpression(DW_OP_constu, 65535, DW_OP_stack_value))
+!53 = distinct !DIGlobalVariable(name: "Max", scope: !0, file: !1, line: 11, type: !13, isLocal: true, isDefinition: true)
+!54 = !DIGlobalVariableExpression(var: !55, expr: !DIExpression(DW_OP_constu, 32767, DW_OP_stack_value))
+!55 = distinct !DIGlobalVariable(name: "Max", scope: !0, file: !1, line: 15, type: !18, isLocal: true, isDefinition: true)
+!56 = !DIGlobalVariableExpression(var: !57, expr: !DIExpression(DW_OP_constu, 4294967295, DW_OP_stack_value))
+!57 = distinct !DIGlobalVariable(name: "Max", scope: !0, file: !1, line: 20, type: !23, isLocal: true, isDefinition: true)
+!58 = !DIGlobalVariableExpression(var: !59, expr: !DIExpression(DW_OP_constu, 2147483647, DW_OP_stack_value))
+!59 = distinct !DIGlobalVariable(name: "Max", scope: !0, file: !1, line: 24, type: !29, isLocal: true, isDefinition: true)
+!60 = !DIGlobalVariableExpression(var: !61, expr: !DIExpression(DW_OP_constu, 18446744073709551615, DW_OP_stack_value))
+!61 = distinct !DIGlobalVariable(name: "Max", scope: !0, file: !1, line: 29, type: !34, isLocal: true, isDefinition: true)
+!62 = !DIGlobalVariableExpression(var: !63, expr: !DIExpression(DW_OP_constu, 9223372036854775807, DW_OP_stack_value))
+!63 = distinct !DIGlobalVariable(name: "Max", scope: !0, file: !1, line: 35, type: !40, isLocal: true, isDefinition: true)
+!64 = !{!"/DEFAULTLIB:libcmt.lib"}
+!65 = !{!"/DEFAULTLIB:oldnames.lib"}
+!66 = !{i32 2, !"CodeView", i32 1}
+!67 = !{i32 2, !"Debug Info Version", i32 3}
+!68 = !{i32 8, !"PIC Level", i32 2}
+!69 = !{i32 7, !"uwtable", i32 2}
+!70 = !{i32 1, !"MaxTLSAlign", i32 65536}
+!71 = !{!"clang version 24.0.0git (https://github.com/Nerixyz/llvm-project.git 9a2d9c7fef47c0af321150f75d8f21db06cccb43)"}
+!72 = distinct !DISubprogram(name: "main", scope: !1, file: !1, line: 38, type: !73, scopeLine: 38, flags: DIFlagPrototyped, spFlags: DISPFlagDefinition, unit: !0, retainedNodes: !75)
+!73 = !DISubroutineType(types: !74)
+!74 = !{!30}
+!75 = !{}
+!76 = !DILocalVariable(name: "u8", scope: !72, file: !1, line: 39, type: !3)
+!77 = !DILocation(line: 39, scope: !72)
+!78 = !DILocalVariable(name: "i8", scope: !72, file: !1, line: 40, type: !8)
+!79 = !DILocation(line: 40, scope: !72)
+!80 = !DILocalVariable(name: "u16", scope: !72, file: !1, line: 41, type: !13)
+!81 = !DILocation(line: 41, scope: !72)
+!82 = !DILocalVariable(name: "i16", scope: !72, file: !1, line: 42, type: !18)
+!83 = !DILocation(line: 42, scope: !72)
+!84 = !DILocalVariable(name: "u32", scope: !72, file: !1, line: 43, type: !23)
+!85 = !DILocation(line: 43, scope: !72)
+!86 = !DILocalVariable(name: "i32", scope: !72, file: !1, line: 44, type: !29)
+!87 = !DILocation(line: 44, scope: !72)
+!88 = !DILocalVariable(name: "u64", scope: !72, file: !1, line: 45, type: !34)
+!89 = !DILocation(line: 45, scope: !72)
+!90 = !DILocalVariable(name: "i64", scope: !72, file: !1, line: 46, type: !40)
+!91 = !DILocation(line: 46, scope: !72)
+!92 = !DILocation(line: 47, scope: !72)
diff --git a/llvm/test/DebugInfo/COFF/integer-128.ll b/llvm/test/DebugInfo/COFF/integer-128.ll
index 57ebdcc144af6..a592f33af1100 100644
--- a/llvm/test/DebugInfo/COFF/integer-128.ll
+++ b/llvm/test/DebugInfo/COFF/integer-128.ll
@@ -43,8 +43,8 @@
 ; ASM-LABEL: .short	0x1203                          # Record kind: LF_FIELDLIST
 ; ASM-NEXT:  .short	0x1502                          # Member kind: Enumerator ( LF_ENUMERATE )
 ; ASM-NEXT:  .short	0x3                             # Attrs: Public
-; ASM-NEXT:  .short	0x800a
-; ASM-NEXT:  .quad	0xffffffffffffffff              # EnumValue
+; ASM-NEXT:  .short	0x8009
+; ASM-NEXT:  .quad	0x8000000000000000              # EnumValue
 ; ASM-NEXT:  .asciz	"sigval"                        # Name
 
 ; ------------------------------------------------------------------------------



More information about the llvm-commits mailing list