aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--sources/shiboken2/generator/shiboken2/cppgenerator.cpp5
-rw-r--r--sources/shiboken2/tests/libsample/virtualmethods.cpp6
-rw-r--r--sources/shiboken2/tests/libsample/virtualmethods.h2
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;