expnkx updated this revision to Diff 375758. expnkx added a comment. fixing clang format
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,12 +2923,17 @@ 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 + } else FieldOffset = Size.alignTo(Info.Alignment); placeFieldAtOffset(FieldOffset); Size = std::max(Size, FieldOffset + Info.Size);
Index: clang/lib/AST/RecordLayoutBuilder.cpp =================================================================== --- clang/lib/AST/RecordLayoutBuilder.cpp +++ clang/lib/AST/RecordLayoutBuilder.cpp @@ -2923,12 +2923,17 @@ 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 + } else FieldOffset = Size.alignTo(Info.Alignment); placeFieldAtOffset(FieldOffset); Size = std::max(Size, FieldOffset + Info.Size);
_______________________________________________ cfe-commits mailing list cfe-commits@lists.llvm.org https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits