Dear ARM porters, I recently uploaded KDE Frameworks 6 packages (version 6.5.0) to unstable, paving the way for Plasma 6 and Qt6 based KDE applications.
All 72 source packages builds fine, including 51 of them running their upstream testsuite, but kf6-ktexttemplate fails its testsuite on arm64. [1] 2 tests are segfaulting: The following tests FAILED: 2 - testbuiltins (SEGFAULT) 3 - testloadertags (SEGFAULT) Errors while running CTest See the full build logs at [2] and the stack traces below. Both tests crash deep inside the stack in an internal copy in the QVariant object. Reverting the optimization level to -O1 makes the issue disappear, so this looks like a compiler bug. As an additional data point, version 6.4.0 which in fact has exactly the same upstream code built successfully in experimental a couple of days ago. [3] For now I’ll be setting -O1 for building the package on arm64, but if you’re interested in analysing and fixing the issue I’d prefer to be able to drop that and use the standard optimisation level. [1] https://deb.li/kf6builds [2] https://buildd.debian.org/status/fetch.php?pkg=kf6-ktexttemplate&arch=arm64&ver=6.5.0-1&stamp=1723536095&raw=0 [3] https://buildd.debian.org/status/fetch.php?pkg=kf6-ktexttemplate&arch=arm64&ver=6.4.0-1&stamp=1721388797&raw=0 Happy hacking, -- Aurélien ########## testbuiltins SEGV ########## 2: [New LWP 2592652] 2: [Thread debugging using libthread_db enabled] 2: Using host libthread_db library "/lib/aarch64-linux-gnu/libthread_db.so.1". 2: 0x0000ffffa95525f0 in wait4 () from /lib/aarch64-linux-gnu/libc.so.6 2: 2: Thread 2 (Thread 0xffffa4a45d00 (LWP 2592652) "QtTest Watchdog"): 2: #0 0x0000ffffa94fc414 in ?? () from /lib/aarch64-linux-gnu/libc.so.6 2: #1 0x0000ffffa94ff6c4 in pthread_cond_clockwait () from /lib/aarch64-linux-gnu/libc.so.6 2: #2 0x0000ffffa9ea2294 in std::__condvar::wait_until (this=<optimized out>, __m=..., __clock=1, __abs_time=...) at /usr/include/c++/14/bits/std_mutex.h:185 2: #3 std::condition_variable::__wait_until_impl<std::chrono::duration<long, std::ratio<1l, 1000000000l> > > (__lock=..., this=<optimized out>, __atime=...) at /usr/include/c++/14/condition_variable:203 2: #4 std::condition_variable::wait_until<std::chrono::duration<long, std::ratio<1l, 1000000000l> > > (this=<optimized out>, __lock=..., __atime=...) at /usr/include/c++/14/condition_variable:113 2: #5 std::condition_variable::wait_until<std::chrono::_V2::steady_clock, std::chrono::duration<long, std::ratio<1l, 1000000000l> >, QTest::WatchDog::waitFor(std::unique_lock<std::mutex>&, QTest::WatchDog::Expectation)::{lambda()#1}>(std::unique_lock<std::mutex>&, std::chrono::time_point<std::chrono::_V2::steady_clock, std::chrono::duration<long, std::ratio<1l, 1000000000l> > > const&, QTest::WatchDog::waitFor(std::unique_lock<std::mutex>&, QTest::WatchDog::Expectation)::{lambda()#1}) (this=<optimized out>, __lock=..., __atime=..., __p=...) at /usr/include/c++/14/condition_variable:154 2: #6 std::condition_variable::wait_for<long, std::ratio<1l, 1000l>, QTest::WatchDog::waitFor(std::unique_lock<std::mutex>&, QTest::WatchDog::Expectation)::{lambda()#1}>(std::unique_lock<std::mutex>&, std::chrono::duration<long, std::ratio<1l, 1000l> > const&, QTest::WatchDog::waitFor(std::unique_lock<std::mutex>&, QTest::WatchDog::Expectation)::{lambda()#1}) (this=<optimized out>, __lock=..., __rtime=..., __p=...) at /usr/include/c++/14/condition_variable:177 2: #7 QTest::WatchDog::waitFor (this=<optimized out>, m=..., e=454) at ./src/testlib/qtestcase.cpp:1241 2: #8 QTest::WatchDog::run (this=<optimized out>) at ./src/testlib/qtestcase.cpp:1305 2: #9 0x0000ffffa9b9ec74 in operator() (__closure=<optimized out>) at ./src/corelib/thread/qthread_unix.cpp:324 2: #10 (anonymous namespace)::terminate_on_exception<QThreadPrivate::start(void*)::<lambda()> > (t=...) at ./src/corelib/thread/qthread_unix.cpp:260 2: #11 QThreadPrivate::start (arg=0xaaaad5a49570) at ./src/corelib/thread/qthread_unix.cpp:283 2: #12 0x0000ffffa94ffe84 in ?? () from /lib/aarch64-linux-gnu/libc.so.6 2: #13 0x0000ffffa956678c in ?? () from /lib/aarch64-linux-gnu/libc.so.6 2: 2: Thread 1 (Thread 0xffffa9ef1020 (LWP 2592644) "testbuiltins_ex"): 2: #0 0x0000ffffa95525f0 in wait4 () from /lib/aarch64-linux-gnu/libc.so.6 2: #1 0x0000ffffa9ea8d40 in generateStackTrace() [clone .part.0] [clone .lto_priv.0] () at ./src/testlib/qtestcase.cpp:411 2: #2 0x0000ffffa9ea2590 in generateStackTrace () at ./src/testlib/qtestcase.cpp:375 2: #3 (anonymous namespace)::FatalSignalHandler::actionHandler (signum=11, info=<optimized out>) at ./src/testlib/qtestcase.cpp:2179 2: #4 <signal handler called> 2: #5 (anonymous namespace)::clonePrivate (other=...) at ./src/corelib/kernel/qvariant.cpp:304 2: #6 QVariant::operator= (this=0xffffed46d648, variant=...) at ./src/corelib/kernel/qvariant.cpp:1067 2: #7 QVariant::operator= (this=0xffffed46d648, variant=...) at ./src/corelib/kernel/qvariant.cpp:1061 2: #8 0x0000ffffa9aa4154 in operator() (__closure=<synthetic pointer>, dataPtr=<optimized out>) at ./src/corelib/kernel/qsequentialiterable.cpp:203 2: #9 QIterablePrivate::retrieveElement<QSequentialConstIterator::operator*() const::<lambda(void*)> > (type=..., callback=...) at ./src/corelib/kernel/qiterable_p.h:34 2: #10 QSequentialConstIterator::operator* (this=this@entry=0xffffed46d548) at ./src/corelib/kernel/qsequentialiterable.cpp:204 2: #11 0x0000ffffa41e7504 in ForNode::render (this=0xaaaad5a971d0, stream=<optimized out>, c=<optimized out>) at ./src/defaulttags/for.cpp:159 2: #12 0x0000ffffa9f37550 in KTextTemplate::NodeList::render (this=this@entry=0xaaaad5a9e278, stream=stream@entry=0xffffed46d808, c=c@entry=0xffffed46d890) at ./src/lib/node.cpp:184 2: #13 0x0000ffffa9f4d044 in KTextTemplate::TemplateImpl::render (this=this@entry=0xaaaad5a99d80, stream=stream@entry=0xffffed46d808, c=c@entry=0xffffed46d890) at ./src/lib/template.cpp:84 2: #14 0x0000ffffa9f4d858 in KTextTemplate::TemplateImpl::render (this=0xaaaad5a99d80, c=c@entry=0xffffed46d890) at ./src/lib/template.cpp:71 2: #15 0x0000aaaabda17aec in TestBuiltinSyntax::doTest (this=<optimized out>) at /usr/include/aarch64-linux-gnu/qt6/QtCore/qsharedpointer_impl.h:271 2: #16 0x0000ffffa9a64e50 in QMetaMethodInvoker::invokeImpl (self=..., target=0xffffed46e280, connectionType=connectionType@entry=Qt::DirectConnection, paramCount=paramCount@entry=1, parameters=parameters@entry=0xffffed46dcf0, typeNames=typeNames@entry=0xffffed46dcf8, metaTypes=metaTypes@entry=0xffffed46dd00) at ./src/corelib/kernel/qmetaobject.cpp:2713 2: #17 0x0000ffffa9a6568c in QMetaMethod::invokeImpl (self=..., target=<optimized out>, connectionType=connectionType@entry=Qt::DirectConnection, paramCount=paramCount@entry=1, parameters=parameters@entry=0xffffed46dcf0, typeNames=typeNames@entry=0xffffed46dcf8, metaTypes=metaTypes@entry=0xffffed46dd00) at ./src/corelib/kernel/qmetaobject.cpp:2552 2: #18 0x0000ffffa9ec8418 in QMetaMethod::invoke<>(QObject*, Qt::ConnectionType, QMetaMethodReturnArgument) const (c=Qt::DirectConnection, this=<optimized out>, obj=<optimized out>, r=...) at ./src/corelib/kernel/qmetaobject.h:148 2: #19 QMetaMethod::invoke<>(QObject*, Qt::ConnectionType) const (c=Qt::DirectConnection, this=<optimized out>, obj=<optimized out>) at ./src/corelib/kernel/qmetaobject.h:160 2: #20 QTest::TestMethods::invokeTestOnData (this=<optimized out>, index=-1444447928) at ./src/testlib/qtestcase.cpp:1136 2: #21 QTest::TestMethods::invokeTest(int, QLatin1String, QTest::WatchDog*) const [clone .isra.0] (this=this@entry=0xffffed46e060, index=index@entry=4, tag=..., watchDog=watchDog@entry=0xaaaad5a49570) at ./src/testlib/qtestcase.cpp:1429 2: #22 0x0000ffffa9ea5f30 in QTest::TestMethods::invokeTests (this=0xffffed46e060, testObject=0xffffed46e280) at ./src/testlib/qtestcase.cpp:1767 2: #23 QTest::qRun () at ./src/testlib/qtestcase.cpp:2401 2: #24 0x0000ffffa9ea67b8 in QTest::qExec (testObject=testObject@entry=0xffffed46e280, argc=<optimized out>, argv=argv@entry=0xffffed46e458) at ./src/testlib/qtestcase.cpp:2287 2: #25 0x0000aaaabda160a0 in main (argc=<optimized out>, argv=0xffffed46e458) at ./autotests/testbuiltins.cpp:1952 2: [Inferior 1 (process 2592644) detached] 2: === End of stack trace === ####################################### ########## testloadertags SEGV ########## 3: [New LWP 2592653] 3: [Thread debugging using libthread_db enabled] 3: Using host libthread_db library "/lib/aarch64-linux-gnu/libthread_db.so.1". 3: 0x0000ffffba7125f0 in wait4 () from /lib/aarch64-linux-gnu/libc.so.6 3: 3: Thread 2 (Thread 0xffffb5c05d00 (LWP 2592653) "QtTest Watchdog"): 3: #0 0x0000ffffba6bc414 in ?? () from /lib/aarch64-linux-gnu/libc.so.6 3: #1 0x0000ffffba6bf0dc in pthread_cond_wait () from /lib/aarch64-linux-gnu/libc.so.6 3: #2 0x0000ffffbb06220c in std::condition_variable::wait<QTest::WatchDog::waitFor(std::unique_lock<std::mutex>&, QTest::WatchDog::Expectation)::{lambda()#1}>(std::unique_lock<std::mutex>&, QTest::WatchDog::waitFor(std::unique_lock<std::mutex>&, QTest::WatchDog::Expectation)::{lambda()#1}) (this=<optimized out>, __lock=..., __p=...) at /usr/include/c++/14/condition_variable:105 3: #3 QTest::WatchDog::waitFor (this=<optimized out>, m=..., e=33) at ./src/testlib/qtestcase.cpp:1245 3: #4 QTest::WatchDog::run (this=<optimized out>) at ./src/testlib/qtestcase.cpp:1305 3: #5 0x0000ffffbad5ec74 in operator() (__closure=<optimized out>) at ./src/corelib/thread/qthread_unix.cpp:324 3: #6 (anonymous namespace)::terminate_on_exception<QThreadPrivate::start(void*)::<lambda()> > (t=...) at ./src/corelib/thread/qthread_unix.cpp:260 3: #7 QThreadPrivate::start (arg=0xaaaaef843570) at ./src/corelib/thread/qthread_unix.cpp:283 3: #8 0x0000ffffba6bfe84 in ?? () from /lib/aarch64-linux-gnu/libc.so.6 3: #9 0x0000ffffba72678c in ?? () from /lib/aarch64-linux-gnu/libc.so.6 3: 3: Thread 1 (Thread 0xffffbb0b3020 (LWP 2592645) "testloadertags_"): 3: #0 0x0000ffffba7125f0 in wait4 () from /lib/aarch64-linux-gnu/libc.so.6 3: #1 0x0000ffffbb068d40 in generateStackTrace() [clone .part.0] [clone .lto_priv.0] () at ./src/testlib/qtestcase.cpp:411 3: #2 0x0000ffffbb062590 in generateStackTrace () at ./src/testlib/qtestcase.cpp:375 3: #3 (anonymous namespace)::FatalSignalHandler::actionHandler (signum=11, info=<optimized out>) at ./src/testlib/qtestcase.cpp:2179 3: #4 <signal handler called> 3: #5 (anonymous namespace)::clonePrivate (other=...) at ./src/corelib/kernel/qvariant.cpp:304 3: #6 QVariant::QVariant (this=<optimized out>, p=..., this=<optimized out>, p=...) at ./src/corelib/kernel/qvariant.cpp:542 3: #7 0x0000ffffb535c92c in QtPrivate::QGenericArrayOps<QVariant>::copyAppend (this=0xffffcc1e4f60, b=0x0, e=0x20) at /usr/include/aarch64-linux-gnu/qt6/QtCore/qarraydataops.h:341 3: #8 QArrayDataPointer<QVariant>::reallocateAndGrow (this=0xffffcc1e5050, where=<optimized out>, n=<optimized out>, old=0x0) at /usr/include/aarch64-linux-gnu/qt6/QtCore/qarraydatapointer.h:235 3: #9 0x0000ffffb535abac in QArrayDataPointer<QVariant>::detach (this=0xffffcc1e5050, old=0x0) at /usr/include/aarch64-linux-gnu/qt6/QtCore/qarraydatapointer.h:139 3: #10 QArrayDataPointer<QVariant>::detach (this=0xffffcc1e5050, old=0x0) at /usr/include/aarch64-linux-gnu/qt6/QtCore/qarraydatapointer.h:136 3: #11 QList<QVariant>::detach (this=0xffffcc1e5050) at /usr/include/aarch64-linux-gnu/qt6/QtCore/qlist.h:409 3: #12 QList<QVariant>::begin (this=0xffffcc1e5050) at /usr/include/aarch64-linux-gnu/qt6/QtCore/qlist.h:608 3: #13 BlockNodeFactory::getNode (this=<optimized out>, tagContent=..., p=0xffffcc1e5448) at ./src/loadertags/block.cpp:43 3: #14 0x0000ffffbb0fd994 in KTextTemplate::ParserPrivate::parse (this=0xaaaaef8ac050, parent=0xaaaaef8ab7c0, stopAt=...) at ./src/lib/parser.cpp:227 3: #15 0x0000ffffbb0febd4 in KTextTemplate::Parser::parse(KTextTemplate::TemplateImpl*, QList<QString> const&) () at ./src/lib/parser.cpp:154 3: #16 0x0000ffffbb10d354 in KTextTemplate::TemplatePrivate::compileString (this=this@entry=0xaaaaef8ad6b0, str=...) at ./src/lib/template.cpp:31 3: #17 0x0000ffffbb10d59c in KTextTemplate::TemplateImpl::setContent (this=<optimized out>, templateString=...) at ./src/lib/template.cpp:58 3: #18 0x0000ffffbb0e2df8 in KTextTemplate::Engine::newTemplate (this=0xaaaaef84d3c0, content=..., name=...) at /usr/include/aarch64-linux-gnu/qt6/QtCore/qsharedpointer_impl.h:271 3: #19 0x0000aaaadaee840c in TestLoaderTags::testExtendsTag_data (this=<optimized out>) at ./autotests/testloadertags.cpp:365 3: #20 0x0000ffffbac24e50 in QMetaMethodInvoker::invokeImpl (self=..., target=target@entry=0xffffcc1e6290, connectionType=connectionType@entry=Qt::DirectConnection, paramCount=paramCount@entry=1, parameters=parameters@entry=0xffffcc1e5b30, typeNames=typeNames@entry=0xffffcc1e5b38, metaTypes=metaTypes@entry=0xffffcc1e5b40) at ./src/corelib/kernel/qmetaobject.cpp:2713 3: #21 0x0000ffffbac2568c in QMetaMethod::invokeImpl (self=..., target=target@entry=0xffffcc1e6290, connectionType=connectionType@entry=Qt::DirectConnection, paramCount=paramCount@entry=1, parameters=parameters@entry=0xffffcc1e5b30, typeNames=typeNames@entry=0xffffcc1e5b38, metaTypes=metaTypes@entry=0xffffcc1e5b40) at ./src/corelib/kernel/qmetaobject.cpp:2552 3: #22 0x0000ffffbb05f91c in QMetaMethod::invoke<>(QObject*, Qt::ConnectionType, QMetaMethodReturnArgument) const (c=Qt::DirectConnection, this=<synthetic pointer>, obj=0xffffcc1e6290, r=...) at ./src/corelib/kernel/qmetaobject.h:148 3: #23 QMetaMethod::invoke<>(QObject*, Qt::ConnectionType) const (c=Qt::DirectConnection, this=<synthetic pointer>, obj=0xffffcc1e6290) at ./src/corelib/kernel/qmetaobject.h:160 3: #24 QTest::invokeMethod (obj=0xffffcc1e6290, methodName=<optimized out>) at ./src/testlib/qtestcase.cpp:548 3: #25 0x0000ffffbb087c2c in QTest::TestMethods::invokeTest(int, QLatin1String, QTest::WatchDog*) const [clone .isra.0] (this=this@entry=0xffffcc1e6070, index=index@entry=2, tag=..., watchDog=watchDog@entry=0xaaaaef843570) at ./src/testlib/qtestcase.cpp:1402 3: #26 0x0000ffffbb065f30 in QTest::TestMethods::invokeTests (this=0xffffcc1e6070, testObject=0xffffcc1e6290) at ./src/testlib/qtestcase.cpp:1767 3: #27 QTest::qRun () at ./src/testlib/qtestcase.cpp:2401 3: #28 0x0000ffffbb0667b8 in QTest::qExec (testObject=testObject@entry=0xffffcc1e6290, argc=<optimized out>, argv=argv@entry=0xffffcc1e6468) at ./src/testlib/qtestcase.cpp:2287 3: #29 0x0000aaaadaee3ba0 in main (argc=<optimized out>, argv=0xffffcc1e6468) at ./autotests/testloadertags.cpp:535 3: [Inferior 1 (process 2592645) detached] 3: === End of stack trace === ######################################### -- https://alioth-lists.debian.net/cgi-bin/mailman/listinfo/pkg-kde-talk