================ Comment at: lib/CodeGen/CGRecordLayoutBuilder.cpp:347 @@ -346,2 +346,3 @@ // beneficial. uint64_t EndOffset = Types.getContext().toBits(Layout.getDataSize()); + if (Types.getContext().getLangOpts().CPlusPlus) ---------------- David Majnemer wrote: > This would make more sense written as: > > uint64_t EndOffset; > if (Types.getContext().getLangOpts().CPlusPlus) > EndOffset = Types.getContext().toBits(Layout.getNonVirtualSize()); > else > EndOffset = Types.getContext().toBits(Layout.getDataSize()); > > That being said, why do we need the language check at all? Couldn't we always > use `Layout.getNonVirtualSize()`? Yes I can change that. Or do you think it will be even better to use a ?: operator: ``` uint64_t EndOffset = Types.getContext().toBits( Types.getContext().getLangOpts().CPlusPlus ? Layout.getNonVirtualSize() : Layout.getDataSize()); ```
The language check is there to avoid an assertion failure in getNonVirtualSize(). getNonVirtualSize() queries CXXInfo->NonVirtualSize, and the member CXXInfo is null for non-C++ records. There are two constructors of ASTRecordLayout for C++ and non-C++ records respectively. http://llvm-reviews.chandlerc.com/D2560 _______________________________________________ cfe-commits mailing list [email protected] http://lists.cs.uiuc.edu/mailman/listinfo/cfe-commits
