[Bug 292376] devel/qt6-base: Regression in 6.10.1: qbittorrent crashes after the update

bugzilla-noreply at freebsd.org bugzilla-noreply at freebsd.org
Tue Apr 14 00:02:43 BST 2026


https://bugs.freebsd.org/bugzilla/show_bug.cgi?id=292376

--- Comment #23 from Jesper Schmitz Mouridsen <jsm at FreeBSD.org> ---
Well it fails because lto internalizes the QObject::staticMetaObject..

We can modify Qt code as follows to avoid that and still use
-Bsymbolic-functions in Qt.
qtbase-everywhere-src-6.10.2/src/corelib/kernel/qobjectdefs.h:
    583     template <const QMetaObject &MO> static const QMetaObject
*staticMetaObject()
    584     {
    585         const QMetaObject* ptr = &MO;
    586         asm volatile("" : : "r"(ptr) : "memory"); << avoid lto to
internalize the staticMetaObject                                      
    587         return ptr;
    588     }

work/qtbase-everywhere-src-6.10.2/src/corelib/global/qcompilerdetection.h:
   1413 #elif defined(__has_cpp_attribute) &&
 __has_cpp_attribute(clang::require_constant_initialization)
   1414 # define Q_CONSTINIT/* [[clang::require_constant_initialization]]  */

With LTO the [[clang::require_constant_initialization]] and the template as the
original 
constexpr &QObject::staticMetaData ends up as a copy of the QObject in the
program. Then inherits check fails because is depends on pointer comparison.
Correct me if I am wrong.
Another workaround would be to mark the Q_OBJECT declaration of
staticMetaObject as weak to allow it to resolve to the symbol in QtCore.so but
that is more ugly I think.

-- 
You are receiving this mail because:
You are the assignee for the bug.


More information about the kde-freebsd mailing list