diff options
author | Eli Friedman <eli.friedman@gmail.com> | 2013-09-18 01:59:16 +0000 |
---|---|---|
committer | Eli Friedman <eli.friedman@gmail.com> | 2013-09-18 01:59:16 +0000 |
commit | 1d24af872df47c0baad9cc291a05575c2e4947d5 (patch) | |
tree | 3bca36492f9ede6adcf46e2cbeddb580187a57ea /clang/lib/AST/ASTContext.cpp | |
parent | d25789a671c3169412a48c0bacf0ec0c150d5190 (diff) | |
download | bcm5719-llvm-1d24af872df47c0baad9cc291a05575c2e4947d5.tar.gz bcm5719-llvm-1d24af872df47c0baad9cc291a05575c2e4947d5.zip |
Fix ObjC @encode for C++ classes w/virtual bases.
PR17142.
llvm-svn: 190912
Diffstat (limited to 'clang/lib/AST/ASTContext.cpp')
-rw-r--r-- | clang/lib/AST/ASTContext.cpp | 3 |
1 files changed, 2 insertions, 1 deletions
diff --git a/clang/lib/AST/ASTContext.cpp b/clang/lib/AST/ASTContext.cpp index ee71116c58a..fd9c7cf1132 100644 --- a/clang/lib/AST/ASTContext.cpp +++ b/clang/lib/AST/ASTContext.cpp @@ -5552,7 +5552,8 @@ void ASTContext::getObjCEncodingForStructureImpl(RecordDecl *RDecl, if (base->isEmpty()) continue; uint64_t offs = toBits(layout.getVBaseClassOffset(base)); - if (FieldOrBaseOffsets.find(offs) == FieldOrBaseOffsets.end()) + if (offs >= uint64_t(toBits(layout.getNonVirtualSize())) && + FieldOrBaseOffsets.find(offs) == FieldOrBaseOffsets.end()) FieldOrBaseOffsets.insert(FieldOrBaseOffsets.end(), std::make_pair(offs, base)); } |