rsmith accepted this revision. rsmith added a comment. This revision is now accepted and ready to land.
This looks fine as far as it goes, but it doesn't fix all cases of incorrect behavior of `__has_unique_object_representations` due to `[[no_unique_address]]`. Feel free to either to land this as-is and leave the other case to a separate patch, or fix it as a revision of this same change. I would expect we'll want to unify the code paths for base classes and non-static data members, which might be better done all at once. ================ Comment at: clang/lib/AST/ASTContext.cpp:2580-2581 if (!isStructEmpty(Base.getType())) { llvm::Optional<int64_t> Size = structHasUniqueObjectRepresentations( Context, Base.getType()->castAs<RecordType>()->getDecl()); if (!Size) ---------------- We need to do this for non-empty `[[no_unique_address]]` members of class type too, to handle tail padding reuse in cases such as: ``` struct A { ~A(); int a; char b; }; struct B { [[no_unique_address]] A a; char c[3]; }; static_assert(sizeof(B) == 8, ""); static_assert(__has_unique_object_representations(B), ""); ``` Repository: rG LLVM Github Monorepo CHANGES SINCE LAST ACTION https://reviews.llvm.org/D89649/new/ https://reviews.llvm.org/D89649 _______________________________________________ cfe-commits mailing list cfe-commits@lists.llvm.org https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits