[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