diff options
-rw-r--r-- | sources/shiboken2/generator/shiboken2/cppgenerator.cpp | 5 | ||||
-rw-r--r-- | sources/shiboken2/tests/libsample/virtualmethods.cpp | 6 | ||||
-rw-r--r-- | sources/shiboken2/tests/libsample/virtualmethods.h | 2 |
3 files changed, 13 insertions, 0 deletions
diff --git a/sources/shiboken2/generator/shiboken2/cppgenerator.cpp b/sources/shiboken2/generator/shiboken2/cppgenerator.cpp index 65e12c7bc..54af34180 100644 --- a/sources/shiboken2/generator/shiboken2/cppgenerator.cpp +++ b/sources/shiboken2/generator/shiboken2/cppgenerator.cpp @@ -869,6 +869,11 @@ QString CppGenerator::virtualMethodReturn(QTextStream &s, qCWarning(lcShiboken).noquote().nospace() << errorMsg; s << Qt::endl << INDENT << "#error " << errorMsg << Qt::endl; } + if (returnType->referenceType() == LValueReference) { + s << INDENT << "static " << returnType->typeEntry()->qualifiedCppName() + << " result;\n"; + return QLatin1String("return result;"); + } return QLatin1String("return ") + defaultReturnExpr.returnValue() + QLatin1Char(';'); } diff --git a/sources/shiboken2/tests/libsample/virtualmethods.cpp b/sources/shiboken2/tests/libsample/virtualmethods.cpp index 294feca60..8f9c8f64d 100644 --- a/sources/shiboken2/tests/libsample/virtualmethods.cpp +++ b/sources/shiboken2/tests/libsample/virtualmethods.cpp @@ -57,6 +57,12 @@ VirtualMethods::getMargins(int* left, int* top, int* right, int* bottom) const *bottom = m_bottom; } +const Str & VirtualMethods::returnConstRef() const +{ + static const Str result; + return result; +} + double VirtualDaughter2::virtualMethod0(Point pt, int val, Complex cpx, bool b) { return 42 + VirtualMethods::virtualMethod0(pt, val, cpx, b); diff --git a/sources/shiboken2/tests/libsample/virtualmethods.h b/sources/shiboken2/tests/libsample/virtualmethods.h index 3e4c8c504..4937fab0d 100644 --- a/sources/shiboken2/tests/libsample/virtualmethods.h +++ b/sources/shiboken2/tests/libsample/virtualmethods.h @@ -106,6 +106,8 @@ public: virtual int recursionOnModifiedVirtual(Str arg) const { return 0; } int callRecursionOnModifiedVirtual(Str arg) const { return recursionOnModifiedVirtual(arg); } + virtual const Str & returnConstRef() const; + private: Str m_name; int m_left; |