Browse Source

Fix parsing of member pointers with MSVC

Fixes https://github.com/mono/CppSharp/issues/1231.

Signed-off-by: Dimitar Dobrev <dpldobrev@protonmail.com>
const-wchar_t
Dimitar Dobrev 5 years ago
parent
commit
fe4a466964
  1. 3
      src/CppParser/Parser.cpp
  2. 15
      tests/Common/Common.h

3
src/CppParser/Parser.cpp

@ -2939,7 +2939,8 @@ bool Parser::CanCheckCodeGenInfo(clang::Sema& S, const clang::Type* Ty) @@ -2939,7 +2939,8 @@ bool Parser::CanCheckCodeGenInfo(clang::Sema& S, const clang::Type* Ty)
return false;
if (auto RT = FinalType->getAs<clang::RecordType>())
return HasLayout(RT->getDecl());
if (!HasLayout(RT->getDecl()))
return false;
// Lock in the MS inheritance model if we have a member pointer to a class,
// else we get an assertion error inside Clang's codegen machinery.

15
tests/Common/Common.h

@ -1639,6 +1639,21 @@ class TemplateClass : TemplateClassBase<A,B> { @@ -1639,6 +1639,21 @@ class TemplateClass : TemplateClassBase<A,B> {
explicit TemplateClass(Func function) {}
};
template <typename T>
class QScopedPointer
{
public:
typedef T* QScopedPointer::* RestrictedBool;
operator RestrictedBool()
{
}
};
class QObjectData {
};
QScopedPointer<QObjectData> d_ptr;
struct DLL_API PointerToTypedefPointerTest
{
int val;

Loading…
Cancel
Save