diff --git a/tests/CSharp/CSharp.Tests.cs b/tests/CSharp/CSharp.Tests.cs index b6589334..0e3830bf 100644 --- a/tests/CSharp/CSharp.Tests.cs +++ b/tests/CSharp/CSharp.Tests.cs @@ -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(); + } + } + } } diff --git a/tests/CSharp/CSharp.cpp b/tests/CSharp/CSharp.cpp index de11fd66..b060eb3b 100644 --- a/tests/CSharp/CSharp.cpp +++ b/tests/CSharp/CSharp.cpp @@ -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; +} diff --git a/tests/CSharp/CSharp.h b/tests/CSharp/CSharp.h index 32321527..ff03eeb7 100644 --- a/tests/CSharp/CSharp.h +++ b/tests/CSharp/CSharp.h @@ -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; +};