[clang] [llvm] Non constant size and offset in DWARF (PR #141106)

David Blaikie via llvm-commits llvm-commits at lists.llvm.org
Tue Jun 17 13:40:43 PDT 2025


================
@@ -4822,6 +4822,35 @@ struct MDSignedOrMDField : MDEitherFieldImpl<MDSignedField, MDField> {
   }
 };
 
+struct MDUnsignedOrMDField : MDEitherFieldImpl<MDUnsignedField, MDField> {
+  MDUnsignedOrMDField(uint64_t Default = 0, bool AllowNull = true)
+      : ImplTy(MDUnsignedField(Default), MDField(AllowNull)) {}
+
+  MDUnsignedOrMDField(uint64_t Default, uint64_t Max, bool AllowNull = true)
+      : ImplTy(MDUnsignedField(Default, Max), MDField(AllowNull)) {}
+
+  bool isMDUnsignedField() const { return WhatIs == IsTypeA; }
+  bool isMDField() const { return WhatIs == IsTypeB; }
+  uint64_t getMDUnsignedValue() const {
+    assert(isMDUnsignedField() && "Wrong field type");
+    return A.Val;
+  }
+  Metadata *getMDFieldValue() const {
+    assert(isMDField() && "Wrong field type");
+    return B.Val;
+  }
+
+  Metadata *getValueAsMetadata(LLVMContext &Context) const {
+    if (isMDUnsignedField()) {
+      return ConstantAsMetadata::get(
+          ConstantInt::get(Type::getInt64Ty(Context), getMDUnsignedValue()));
+    } else if (isMDField()) {
+      return getMDFieldValue();
+    }
+    return nullptr;
----------------
dwblaikie wrote:

LLVM's style avoids "else after return", favouring code like this:
```
if (...)
  return;
if (...)
  return;
return;
```
(& omitting `{}` from single-line blocks)

https://github.com/llvm/llvm-project/pull/141106


More information about the llvm-commits mailing list