From 27186df9e1ddbf625b73ae9a6c26769d2363a3b4 Mon Sep 17 00:00:00 2001 From: Friedemann Kleint Date: Mon, 13 Jul 2020 13:32:50 +0200 Subject: shiboken2: Handle virtual methods returning a reference Although it is a questionable practice, it occurs in Qt 6: virtual const QEventPoint &QPointerEvent::point(int i) const; Previously, the generated return statement return QEventPoint(); would cause a warning about returning a temporary. Fix by creating a static variable and returning a reference to it. Task-number: PYSIDE-1339 Task-number: PYSIDE-904 Change-Id: Id6467be22a166e99e8dcf08b2c7c14df33cd2786 Reviewed-by: Christian Tismer --- sources/shiboken2/tests/libsample/virtualmethods.cpp | 6 ++++++ sources/shiboken2/tests/libsample/virtualmethods.h | 2 ++ 2 files changed, 8 insertions(+) (limited to 'sources/shiboken2/tests/libsample') 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; -- cgit v1.2.3