efriedma added inline comments.
================
Comment at: clang/lib/AST/RecordLayoutBuilder.cpp:666
+ FirstNonOverlappingEmptyFieldHandled
+ } FirstNonOverlappingEmptyFieldStatus;
+
----------------
Xiangling_L wrote:
> efriedma wrote:
> > Instead of specifically tracking whether you've found an OverlappingEmpty
> > field, could you just have something like "bool
> > FoundNonOverlappingEmptyField = false;", and set it to true when you handle
> > a field that isn't OverlappingEmpty? I don't think we need to specifically
> > track whether we've found an OverlappingEmpty field.
> I think you are right. We do not need to specifically track whether we've
> found an OverlappingEmpty field. But I think we do need an enum to track if
> the first non-OverlappingEmptyField is handled or not.
>
> Or the following case is problematic:
>
>
> ```
> struct A {
> int : 0;
> double d;
> };
>
> ```
> The `double d` will mistakenly match `FieldOffset == CharUnits::Zero() &&
> D->getFieldIndex() != 0 && !IsOverlappingEmptyField &&
> FoundNonOverlappingEmptyField `, which we shouldn't because it is not the
> first member of the struct.
>
>
>
Okay, so now there are three states. But the
FirstNonOverlappingEmptyFieldFound is transient: on exit from
ItaniumRecordLayoutBuilder::LayoutField, FirstNonOverlappingEmptyFieldStatus
never contains FirstNonOverlappingEmptyFieldFound. I think it would be more
clear to use a local variable for that.
================
Comment at: clang/lib/AST/RecordLayoutBuilder.cpp:1884
+ if (isAIXLayout(Context) && FieldOffset == CharUnits::Zero() &&
+ ((D->getFieldIndex() == 0 && !IsOverlappingEmptyField) || IsUnion ||
+ (D->getFieldIndex() != 0 && FirstNonOverlappingEmptyFieldStatus ==
----------------
I don't think you need to distinguish the `D->getFieldIndex() == 0` case from
the `D->getFieldIndex() != 0` case.
Repository:
rG LLVM Github Monorepo
CHANGES SINCE LAST ACTION
https://reviews.llvm.org/D79719/new/
https://reviews.llvm.org/D79719
_______________________________________________
cfe-commits mailing list
[email protected]
https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits