efriedma-quic wrote:
> > couldn't the inverse be true, then - that codegen should ignore if
> > something isZeroSize or not?
>
> Just to clarify, is the suggestion here to remove the special handling of
> `isZeroSize` in the RecordLayoutBuilder?
We currently need to distinguish between empty fields and non-empty fields:
various parts of CodeGen expect to be able to get the LLVM struct field
associated with a non-empty clang field. Maybe we can reduce that dependency,
but that would be a deeper refactoring.
But we don't really care whether an empty field is formally "zero-size", so we
could instead just check if the field is empty.
The change would be a bit wider than just RecordLayoutBuilder; there are other
places in CodeGen that check isZeroSize for similar reasons.
> > That would mean if someone wrote `struct Empty {}; struct Z { Empty a,b,c;
> > }`, we'd lower it to `{ [3 x i8] }` instead of `{%Empty, %Empty, %Empty}`,
> > which is a bit ugly. Other than that, sure, I guess we could do that.
>
> Ah, fair enough. Glad to understand and I don't feel /super/ strongly either
> way. Though it might help with confidence if codegen didn't depend on this
> property at all (that it depends on the property a bit may make it harder to
> detect if later codegen depends on the property in a real/ABI-breaking way).
I think we have enough regression tests and assertions to detect breakage from
minor adjustments here.
https://github.com/llvm/llvm-project/pull/93809
_______________________________________________
lldb-commits mailing list
[email protected]
https://lists.llvm.org/cgi-bin/mailman/listinfo/lldb-commits