diff options
author | David Majnemer <david.majnemer@gmail.com> | 2015-10-22 18:04:22 +0000 |
---|---|---|
committer | David Majnemer <david.majnemer@gmail.com> | 2015-10-22 18:04:22 +0000 |
commit | 78945d0721ea631bfb4535ea36058567a07a6991 (patch) | |
tree | 17702966bce6b6af1701d8300be1dafe131cacc0 /clang/lib/CodeGen | |
parent | 227d71bba6de6b39f6e7bbc22288e966858a030d (diff) | |
download | bcm5719-llvm-78945d0721ea631bfb4535ea36058567a07a6991.tar.gz bcm5719-llvm-78945d0721ea631bfb4535ea36058567a07a6991.zip |
[MS ABI] Don't crash when inheriting from base with trailing empty array member
We got this right for Itanium but not MSVC because CGRecordLayoutBuilder
was checking if the base's size was zero when it should have been
checking the non-virtual size.
This fixes PR21040.
llvm-svn: 251036
Diffstat (limited to 'clang/lib/CodeGen')
-rw-r--r-- | clang/lib/CodeGen/CGRecordLayoutBuilder.cpp | 2 |
1 files changed, 1 insertions, 1 deletions
diff --git a/clang/lib/CodeGen/CGRecordLayoutBuilder.cpp b/clang/lib/CodeGen/CGRecordLayoutBuilder.cpp index f91ecebd092..375b59c5cb3 100644 --- a/clang/lib/CodeGen/CGRecordLayoutBuilder.cpp +++ b/clang/lib/CodeGen/CGRecordLayoutBuilder.cpp @@ -454,7 +454,7 @@ void CGRecordLowering::accumulateBases() { // contain only a trailing array member. const CXXRecordDecl *BaseDecl = Base.getType()->getAsCXXRecordDecl(); if (!BaseDecl->isEmpty() && - !Context.getASTRecordLayout(BaseDecl).getSize().isZero()) + !Context.getASTRecordLayout(BaseDecl).getNonVirtualSize().isZero()) Members.push_back(MemberInfo(Layout.getBaseClassOffset(BaseDecl), MemberInfo::Base, getStorageType(BaseDecl), BaseDecl)); } |