Browse Source

A test for the crash when using multiple inheritance and calling a virtual function from a secondary base.

Signed-off-by: Dimitar Dobrev <dpldobrev@yahoo.com>
pull/1132/head
Dimitar Dobrev 10 years ago
parent
commit
a9a7c8dbfe
  1. 13
      tests/CSharp/CSharp.Tests.cs
  2. 31
      tests/CSharp/CSharp.cpp
  3. 24
      tests/CSharp/CSharp.h

13
tests/CSharp/CSharp.Tests.cs

@ -482,4 +482,17 @@ public class CSharpTests : GeneratorTestFixture @@ -482,4 +482,17 @@ public class CSharpTests : GeneratorTestFixture
new QWidget();
}
}
[Test]
public void TestStackOverflowOnVirtualCall()
{
using (var hasMissingObjectOnVirtualCall = new HasMissingObjectOnVirtualCall())
{
using (var missingObjectOnVirtualCall = new MissingObjectOnVirtualCall())
{
hasMissingObjectOnVirtualCall.SetMissingObjectOnVirtualCall(missingObjectOnVirtualCall);
hasMissingObjectOnVirtualCall.MakeMissingObjectOnVirtualCall();
}
}
}
}

31
tests/CSharp/CSharp.cpp

@ -894,3 +894,34 @@ char* HasSamePropertyInDerivedAbstractType::property() @@ -894,3 +894,34 @@ char* HasSamePropertyInDerivedAbstractType::property()
InheritsFromHasSamePropertyInDerivedAbstractType::InheritsFromHasSamePropertyInDerivedAbstractType()
{
}
MissingObjectOnVirtualCallSecondaryBase::MissingObjectOnVirtualCallSecondaryBase()
{
}
void MissingObjectOnVirtualCallSecondaryBase::f()
{
}
MissingObjectOnVirtualCall::MissingObjectOnVirtualCall()
{
}
void MissingObjectOnVirtualCall::f()
{
}
HasMissingObjectOnVirtualCall::HasMissingObjectOnVirtualCall()
{
}
void HasMissingObjectOnVirtualCall::makeMissingObjectOnVirtualCall()
{
stackOverflowOnVirtualCall->f();
}
void HasMissingObjectOnVirtualCall::setMissingObjectOnVirtualCall(MissingObjectOnVirtualCall* value)
{
stackOverflowOnVirtualCall = value;
}

24
tests/CSharp/CSharp.h

@ -806,3 +806,27 @@ public: @@ -806,3 +806,27 @@ public:
InheritsFromHasSamePropertyInDerivedAbstractType();
virtual int property() = 0;
};
class DLL_API MissingObjectOnVirtualCallSecondaryBase
{
public:
MissingObjectOnVirtualCallSecondaryBase();
virtual void f();
};
class DLL_API MissingObjectOnVirtualCall : public HasVirtualDtor1, public MissingObjectOnVirtualCallSecondaryBase
{
public:
MissingObjectOnVirtualCall();
void f();
};
class DLL_API HasMissingObjectOnVirtualCall
{
public:
HasMissingObjectOnVirtualCall();
void makeMissingObjectOnVirtualCall();
void setMissingObjectOnVirtualCall(MissingObjectOnVirtualCall* value);
private:
MissingObjectOnVirtualCall* stackOverflowOnVirtualCall;
};

Loading…
Cancel
Save