expnkx updated this revision to Diff 375720. expnkx added a comment. it should first update the field and then test no_unique_address
CHANGES SINCE LAST ACTION https://reviews.llvm.org/D110485/new/ https://reviews.llvm.org/D110485 Files: clang/lib/AST/RecordLayoutBuilder.cpp Index: clang/lib/AST/RecordLayoutBuilder.cpp =================================================================== --- clang/lib/AST/RecordLayoutBuilder.cpp +++ clang/lib/AST/RecordLayoutBuilder.cpp @@ -2923,11 +2923,18 @@ ElementInfo Info = getAdjustedElementInfo(FD); Alignment = std::max(Alignment, Info.Alignment); CharUnits FieldOffset; + auto *FieldClass = FD->getType()->getAsCXXRecordDecl(); + bool PotentiallyOverlapping = + FD->hasAttr<NoUniqueAddressAttr>() && FieldClass; + bool IsOverlappingEmptyField = + PotentiallyOverlapping && FieldClass->isEmpty(); if (UseExternalLayout) FieldOffset = Context.toCharUnitsFromBits(External.getExternalFieldOffset(FD)); - else if (IsUnion) + else if (IsUnion || IsOverlappingEmptyField) + { FieldOffset = CharUnits::Zero(); + } else FieldOffset = Size.alignTo(Info.Alignment); placeFieldAtOffset(FieldOffset);
Index: clang/lib/AST/RecordLayoutBuilder.cpp =================================================================== --- clang/lib/AST/RecordLayoutBuilder.cpp +++ clang/lib/AST/RecordLayoutBuilder.cpp @@ -2923,11 +2923,18 @@ ElementInfo Info = getAdjustedElementInfo(FD); Alignment = std::max(Alignment, Info.Alignment); CharUnits FieldOffset; + auto *FieldClass = FD->getType()->getAsCXXRecordDecl(); + bool PotentiallyOverlapping = + FD->hasAttr<NoUniqueAddressAttr>() && FieldClass; + bool IsOverlappingEmptyField = + PotentiallyOverlapping && FieldClass->isEmpty(); if (UseExternalLayout) FieldOffset = Context.toCharUnitsFromBits(External.getExternalFieldOffset(FD)); - else if (IsUnion) + else if (IsUnion || IsOverlappingEmptyField) + { FieldOffset = CharUnits::Zero(); + } else FieldOffset = Size.alignTo(Info.Alignment); placeFieldAtOffset(FieldOffset);
_______________________________________________ cfe-commits mailing list cfe-commits@lists.llvm.org https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits