Browse Source

Fixed parsing of classes with virtual bases.

This bug only manifested itself as an assert in debug builds.

Partial fix for https://github.com/mono/CppSharp/issues/664.
pull/667/head
Joao Matos 9 years ago
parent
commit
965129182d
  1. 3
      src/CppParser/Parser.cpp
  2. 5
      tests/Common/Common.h

3
src/CppParser/Parser.cpp

@ -959,7 +959,8 @@ void Parser::WalkRecordCXX(const clang::CXXRecordDecl* Record, Class* RC) @@ -959,7 +959,8 @@ void Parser::WalkRecordCXX(const clang::CXXRecordDecl* Record, Class* RC)
auto BaseDecl = GetCXXRecordDeclFromBaseType(BS.getType().getTypePtr());
if (BaseDecl && Layout)
{
auto Offset = Layout->getBaseClassOffset(BaseDecl);
auto Offset = BS.isVirtual() ? Layout->getVBaseClassOffset(BaseDecl)
: Layout->getBaseClassOffset(BaseDecl);
Base->Offset = Offset.getQuantity();
}

5
tests/Common/Common.h

@ -678,6 +678,11 @@ public: @@ -678,6 +678,11 @@ public:
int Value;
};
class DLL_API ClassWithVirtualBase : public virtual ClassC
{
};
// Test decltype
int Expr = 0;
DLL_API decltype(Expr) TestDecltype()

Loading…
Cancel
Save