diff options
Diffstat (limited to 'clang/lib/AST/RecordLayoutBuilder.cpp')
-rw-r--r-- | clang/lib/AST/RecordLayoutBuilder.cpp | 6 |
1 files changed, 6 insertions, 0 deletions
diff --git a/clang/lib/AST/RecordLayoutBuilder.cpp b/clang/lib/AST/RecordLayoutBuilder.cpp index 30293c27c17..6a708a7e8d7 100644 --- a/clang/lib/AST/RecordLayoutBuilder.cpp +++ b/clang/lib/AST/RecordLayoutBuilder.cpp @@ -2477,6 +2477,9 @@ void MicrosoftRecordLayoutBuilder::injectVBPtr(const CXXRecordDecl *RD) { i->second += Offset; // Update the object alignment. updateAlignment(PointerInfo.Alignment); + // The presence of a vbptr suppresses zero sized objects that are not in + // virtual bases. + HasZeroSizedSubObject = false; } void MicrosoftRecordLayoutBuilder::injectVFPtr(const CXXRecordDecl *RD) { @@ -2566,6 +2569,9 @@ void MicrosoftRecordLayoutBuilder::injectVPtrs(const CXXRecordDecl *RD) { } } layoutFields(RD); + // The presence of a vbptr suppresses zero sized objects that are not in + // virtual bases. + HasZeroSizedSubObject = false; } void MicrosoftRecordLayoutBuilder::layoutVirtualBases(const CXXRecordDecl *RD) { |