[qt/qt/qtbase]: Summary of bulk changes made

KDE Git Services - Bulk Change <[email protected]>
Newsgroups gmane.comp.kde.cvs
Message-ID <[email protected]>
Git repository change summary for qt/qt/qtbase
Pushed by mirror-service into branch 'dev'.
Changed from 50cc08f278c6961d00b5b8bae408d4ccc2fbca4d to 7eeb08d217ca941260b759be388f6bbee423fbc7
Acknowledgement was received that this change introduces only existing code that has been pushed to another public open source repository.

This change contains the following new commits:

Git commit 7f10a899198034157b43181e946b10090283b081 by Laszlo Agocs on 30/07/2026 at 18:19..
rhi: d3d12: Bind texture and sampler arrays as one descriptor range

A QRhiShaderResourceBinding with an array of textures/samplers
(count > 1) was translated into count descriptor ranges of one
descriptor each, and for samplers into count separate root parameters.
D3D12 does not accept that as binding a shader-declared resource
array; pipeline creation fails with

  Root Signature doesn't match Pixel Shader: Shader sampler descriptor
  range (BaseShaderRegister=0, NumDescriptors=8, RegisterSpace=0) is
  not fully bound in root signature

and likewise for the SRV range.

This only happens with shaders that have SM 6.0 (or 5.1) bytecode. SM
5.0 DXBC has no descriptor ranges: there an array of textures is
declared as t0, t1, ... individually, and a series of one-descriptor
ranges covering the same registers matches that just fine. With DXIL
the array becomes a single shader-declared range of count descriptors,
and then the root signature has to cover it with one range as well.
Since practically all shaders shipped with Qt are built with --hlsl
50, this went unnoticed: the existing tst_qrhi test for an array of
combined image samplers passes with the D3D12 backend as-is, and only
starts failing once its fragment shader is rebuilt for SM 6.0.

Visit textures and samplers per binding instead of per array element,
and emit a single range with NumDescriptors == count. The SRV
descriptors already get copied into a consecutive block of the
shader-visible heap, so only the range construction changes there. The
per-sampler shader-visible descriptors are scattered around the
sampler heap, so an array of samplers now gets a dedicated run of
consecutive descriptors from QD3D12SamplerManager, cached by the list
of sampler descriptions (not by QRhiSampler objects, so unrelated srbs
with the same filtering and addressing modes share one run).

Bindings with a single texture/sampler, which is everything in
practice today, end up with the same root signature and the same
descriptors as before.

Add a tst_qrhi test that renders with an array of 8 sampled textures,
each filled with a single color and sampled into a column of its own,
so that the result also shows whether the array ended up in the right
order. Two different samplers alternate in the array, to get a run of
non-identical sampler descriptors. The shaders are built for SM 6.0 in
addition to 5.0, which is what makes the test exercise the descriptor
range path with D3D12.

Pick-to: 6.12 6.11 6.8
Change-Id: I37b38bb35fd2953cf52166255ac931a51cef819e
Reviewed-by: Andy Nichols <[email protected]>
https://invent.kde.org/qt/qt/qtbase/-/commit/7f10a899198034157b43181e946b10090283b081

Git commit 8dd64c5df599b56939602bad94f7ebef7652fe06 by Laszlo Agocs on 30/07/2026 at 18:19..
rhi: d3d12: Route debug layer warnings to qDebug, when possible

Try to behave like we do with Vulkan. There is a pre-existing
minor issue: this now makes some debug layer messages show up
with D3D12 for two test cases in tst_qrhi. Previously these
were only visible on the Windows debug output. Not handling
those here.

Pick-to: 6.12
Change-Id: Ibd4ddaec3cdb7f5df4f5a49a38047f568b60e8c4
Reviewed-by: Andy Nichols <[email protected]>
https://invent.kde.org/qt/qt/qtbase/-/commit/8dd64c5df599b56939602bad94f7ebef7652fe06

Git commit c13fd99f923c90c28e8cea23719bce119dd13fab by Laszlo Agocs on 30/07/2026 at 18:19..
rhi: d3d12: Discard resolve destination subresources when needed

The subresources of a placed resource must be initialized with a
Discard, Clear, or Copy operation before they can be used for anything
else. ResolveSubresource is not one of those operations, so resolving
into a texture that was never rendered into makes the debug layer
complain.

Fix it by discarding upfront, but only the destination subresources
that are about to be overwritten by the resolve, and only once for
each of them.

This gets rid of the debug layer messages from the
renderToTextureArrayMultiView test case in tst_qrhi.

Pick-to: 6.12
Change-Id: I6add9447ff946257293e97864972b4f5be49e73f
Reviewed-by: Andy Nichols <[email protected]>
https://invent.kde.org/qt/qt/qtbase/-/commit/c13fd99f923c90c28e8cea23719bce119dd13fab

Git commit b96197efff3b5ac03d554df92c6fa444e64ef711 by Laszlo Agocs on 30/07/2026 at 18:19..
rhi autotest: Do not read back an uninitialized cubemap face

renderToTextureCubemapFace reads back not only the face it renders
into, but also another one, in order to verify that the layer
parameter is not ignored. That face was never written to, and so the
results of reading it back are undefined. With D3D12 it also makes the
debug layer complain, because the subresources of a placed resource
must be initialized with a Discard, Clear, or Copy operation before
they can be used for anything else.

Upload a known content to that face instead. This is a Copy, so it
initializes the subresource, and it makes the readback result
deterministic, which allows checking the uploaded color as well.

Pick-to: 6.12 6.11 6.8
Change-Id: Ia0b5e21a3d57e3c598903242a77acb92736f2b70
Reviewed-by: Andy Nichols <[email protected]>
https://invent.kde.org/qt/qt/qtbase/-/commit/b96197efff3b5ac03d554df92c6fa444e64ef711

Git commit a7f4d5bd760974b0591b35b9100da98897846656 by Laszlo Agocs on 30/07/2026 at 18:19..
rhi: d3d12: Fix descriptor aliasing in the CPU descriptor pool

In QD3D12CpuDescriptorPool::allocate() only marks the first descriptor
as used. This is incorrect when count > 1 since a later allocate() would
then hand out entries still marked as free that are in fact in use.

Then, allocate() hands out descriptors in two ways: while the last heap
has enough room at the end, it takes [head..head + count) via
QD3D12DescriptorHeap::get(), which advances head and never consults the
bitmap; when it does not, it scans the bitmaps of all heaps for a free
run instead and returns that via QD3D12DescriptorHeap::at(), which
leaves head untouched. The get() based path is only safe if heap.head is
advanced when hitting the other (at()-based) path. This is currently
missing, so add it.

None of these are a problem in practice atm, because every call site
passes count == 1, which hides the issues since a successful bump test
already implies head < capacity. Fix it nonetheless.

Pick-to: 6.12
Change-Id: Iedb7b5ab83b14545d518e58969b3ca2ba5576f90
Reviewed-by: Andy Nichols <[email protected]>
https://invent.kde.org/qt/qt/qtbase/-/commit/a7f4d5bd760974b0591b35b9100da98897846656

Git commit b6b81f00cd396c98f0f3492461a88559c27fcf46 by Laszlo Agocs on 30/07/2026 at 18:19..
rhi: d3d12: Cache the srb-to-binding translation

setShaderResources() ran QD3D12ShaderResourceVisitor over all bindings
for all stages on every call. With typical QRhi-based renderers, such as
Qt Quick, that in many cases mean once per draw call because consecutive
draws use different srbs, and so srbChanged is very often true.

Do this only once. The result of the binding visitors now lives in
QD3D12ShaderResourceBindings::bindingCache and is rebuilt only when the
srb or the pipeline it is used with changes. The callbacks that collect
it move from QD3D12CommandBuffer to the srb and are renamed to cache*,
so QD3D12CommandBuffer::VisitorData is gone altogether.

What is cached must not depend on the frame slot or on the dynamic
offsets, so the uniform buffer entries keep the QRhiBuffer and the
binding number, and both the per-frame-slot resource and the dynamic
offset are resolved when binding.

Caching means a resource recreated (as in, the renderer calling
QRhiBuffer::create() again after setting a different size, for example)
without the srb itself being touched has to invalidate it. Follow the
D3D11 backend and track the id and generation of each bound resource,
checked in the loop that walks the bindings for the barriers anyway.
QD3D12Texture already had a generation that was never read; QD3D12Buffer
and QD3D12Sampler had none, so add and bump those.

lastUsedGraphicsPipeline and lastUsedComputePipeline now clear each
other, otherwise a graphics, compute, same-graphics sequence on one srb
reports no pipeline change on the third bind and would get the cache
built for the compute pipeline. And a new lastUsedPipelineGeneration
catches a pipeline recreated in place.

Also, copy the SRVs into the shader-visible heap with a single
CopyDescriptors instead of one CopyDescriptorsSimple per descriptor.

Results with a heavy qmlbench test scene on one particular machine:
changing_over_isolated_with_clip_rotated:
OpenGL       1176
Vulkan       1980
D3D11        1543
D3D12 before 1867
D3D12 after  2193

With QCanvasPainter's qcpainterbench, default window size,
item count set to 64:
OpenGL       54
Vulkan       78
D3D11        58
D3D12 before 67
D3D12 after  78

Pick-to: 6.12
Change-Id: I91c88b1e7d7cced5777b1306b5adfd7aa51a9bb9
Reviewed-by: Andy Nichols <[email protected]>
https://invent.kde.org/qt/qt/qtbase/-/commit/b6b81f00cd396c98f0f3492461a88559c27fcf46

Git commit d3e20737be0d3d2e6a287add51dc2a6d491a2dc9 by Laszlo Agocs on 30/07/2026 at 18:19..
rhi: d3d12: Batch the transition barriers in setShaderResources

QD3D12ResourceBarrierGenerator exists to collect transition barriers and
submit them as one ResourceBarrier() call, but the call site defeated
that: the enqueue sat inside the loop over the bindings, so N textures
needing a transition produced N calls with one barrier each instead of
one call with N. Barrier batching is worth real GPU time, on AMD and
Intel in particular. beginPass() already does it the right way.

Move the enqueue out of the loop. The reason for not doing this before
were probably the UAV barriers issues from within the loop, and
attempting to keep a strict ordering for all the barriers. But that is
not a problem in practice.

Pick-to: 6.12
Change-Id: Ia2ae09c89d9be9bf5676b214c525b161b16f5b7b
Reviewed-by: Andy Nichols <[email protected]>
https://invent.kde.org/qt/qt/qtbase/-/commit/d3e20737be0d3d2e6a287add51dc2a6d491a2dc9

Git commit 521a26d46140f43ffda28c21d65c2b23639cb587 by Laszlo Agocs on 30/07/2026 at 18:19..
rhi: d3d12: Use one MSAA buffer per frame slot, not per back buffer

Unlike the swapchain's own buffers, an MSAA buffer is written and then
resolved into the back buffer within a single frame, and its contents
never have to survive into the next one. A swapchain render target is
always cleared in beginPass() as well. Thus having FRAMES_IN_FLIGHT (2)
buffers (and render target views) is enough, there is no need to have
BUFFER_COUNT (3). Saves a third of what is typically the largest
allocation in the process. For a 4K window with 4x MSAA that is around
130MB.

Pick-to: 6.12
Change-Id: Ic056eeaae6adf8371f482d8284956d29dca7ae5c
Reviewed-by: Andy Nichols <[email protected]>
https://invent.kde.org/qt/qt/qtbase/-/commit/521a26d46140f43ffda28c21d65c2b23639cb587

Git commit 4a0aa935ae8463847d4b5aa98d61576f68baac49 by Laszlo Agocs on 30/07/2026 at 18:19..
rhi: d3d12: Size the per-frame staging area to what is used

QRhi::create() committed 16MB of upload heap per frame slot, so 32MB per
QRhi, allocated up front and never given back. Most applications do not
need this amount of staging area persistently: in the steady state a
typical Qt Quick scene stages very little, since what does get staged in
bulk tends to be textures uploaded once during startup or when changing
views.

The fallback for a request that does not fit is already there (the
dedicated, deferred-released staging area for that one upload). So we
for the "small" staging area we can start e.g. at 512KB per slot and
grow only once an application turns out to need more, with 16MB kept as
the upper bound.

Growing is reactive: record what each frame slot is asked for, then
resize in beginFrame(), which is where the area is rewound anyway. A
frame that outgrows the common, "small" area pays for a few dedicated
staging areas once, and the next frame on that slot has room. Shrink as
well when demand stays low for a number of (currently 60) frames,
halving down to the starting size, so that a one-off burst of texture
uploads does not keep the memory for the lifetime of the QRhi.

As an example, with this patch in place the lights example of Qt Quick
3D's memory usage goes ca. 118 MB -> 95 MB, using crude Task Manager
based measurement:
D3D11        56
OpenGL       97
Vulkan       144
D3D12 before 118
D3D12 after  95

Pick-to: 6.12
Change-Id: I63410eebc245ca545d37740430ebe2373b3a27c3
Reviewed-by: Andy Nichols <[email protected]>
https://invent.kde.org/qt/qt/qtbase/-/commit/4a0aa935ae8463847d4b5aa98d61576f68baac49

Git commit e1ff0baedb3ef1283f5070659d2b6c69470806f4 by Laszlo Agocs on 30/07/2026 at 18:19..
rhi: d3d12: Build the mipmap generator pipelines on first use

QRhi::create() built the root signature and compute pipeline for both
the 2D and the 3D mipmap generator, always. That is two serialized root
signatures and two driver-side compute shader compiles per QRhi, even
when mipmaps are never built by an application.

Do it lazily instead.

Pick-to: 6.12
Change-Id: Id366da22d10a84a53672f29a905c77dcc944153f
Reviewed-by: Andy Nichols <[email protected]>
https://invent.kde.org/qt/qt/qtbase/-/commit/e1ff0baedb3ef1283f5070659d2b6c69470806f4

Git commit 8909e6458566e6a5407f501d0f91968b785af7d8 by Laszlo Agocs on 30/07/2026 at 18:19..
QtOpenGL: add more trusted-content notes

QOpenGLShader and QOpenGLShaderProgram already carry this. Add a few
more for completeness.

Task-number: QTBUG-148531
Pick-to: 6.12 6.11 6.8
Change-Id: I34660aa7748bc67692c8243d4ed3b2da4917525a
Reviewed-by: Andy Nichols <[email protected]>
https://invent.kde.org/qt/qt/qtbase/-/commit/8909e6458566e6a5407f501d0f91968b785af7d8

Git commit 73d38519db4e0bb8815b44ce59ead3e35de67858 by Laszlo Agocs on 30/07/2026 at 18:19..
Gracefully handle broken VK_EXT_debug_utils

Fixes: QTBUG-148216
Pick-to: 6.12 6.11 6.8
Change-Id: I16180bb5b9a5bda9eb6b99167ecd61b5410ce07c
Reviewed-by: Andy Nichols <[email protected]>
https://invent.kde.org/qt/qt/qtbase/-/commit/73d38519db4e0bb8815b44ce59ead3e35de67858

Git commit 64d9407831aaf6004084ce796ef511b8d8c6333b by Marc Mutz (on behalf of Thiago Macieira) on 30/07/2026 at 21:22..
QStringBuilder: remove ASCII cast warning for char16_t

There is no ASCII cast here.

Amends commit 641e010cc7b52b6c3ac213e151781ffcbdd89145, which introduced
char16_t support. I'm guessing this was copy & paste mistake.

qqmltcpropertyutils_p.h:39:47:   required from here
   38 |         return (elementType->isReferenceType() ? u"QQmlListProperty<" : u"QList<")
      |                ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
   39 |                 + elementType->internalName() + u'>';
      |                 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^~~~~~
qstringbuilder.h:402:37: warning: ‘static void QConcatenable<const char16_t*>::appendTo(const char16_t*, QChar*&)’ is deprecated: Use fromUtf8, QStringLiteral, or QLatin1StringView [-Wdeprecated-declarations]
qstringbuilder.h:351:43: note: declared here
  351 |     QT_ASCII_CAST_WARN static inline void appendTo(const char16_t *a, QChar *&out)
      |                                           ^~~~~~~~

Pick-to: 6.12 6.11 6.8
Change-Id: Iddfa44f640511c61f636fffdaa7418b53f40169e
Reviewed-by: Marc Mutz <[email protected]>
https://invent.kde.org/qt/qt/qtbase/-/commit/64d9407831aaf6004084ce796ef511b8d8c6333b

Git commit dc93a3b1c6654bf29c53ee448c3c1ffe6a859958 by Marc Mutz on 30/07/2026 at 21:22..
QDecompressHelper: mark isSupportedEncoding() noexcept

It conceptually should be, and the implementation actually calls only
noexcept functions, so it's safe to commit to the no-fail label.

Amends 07b008425acb1f550c3e6e96e2bd6033fe86976a (6.0), the addition of
the class.

Pick-to: 6.12 6.11 6.8
Change-Id: I648b9cb1de4ccbc315f5f2ece8985632f58b74f5
Reviewed-by: Thiago Macieira <[email protected]>
Reviewed-by: Dennis Oberst <[email protected]>
https://invent.kde.org/qt/qt/qtbase/-/commit/dc93a3b1c6654bf29c53ee448c3c1ffe6a859958

Git commit 55df5ccd997446760364f55aa041efc7c80d6fdd by Marc Mutz on 30/07/2026 at 21:22..
QBasicAtomic: fix UB (signed overflow) in some operators

The underlying atomic operations are fine (required by the standard,
cf. Note in ¹), but our adjustments of the return value were not, and
could overflow.

Fix by using unsigned arithmetic to do the calculation as required by
the standard:

¹ https://eel.is/c++draft/atomics.types.generic#atomics.types.int-8

Found by ubsan complaining about signed overflow in
tst_qatomicinteger_<signed int> tests.

Amends 19c70982517e76d89bb3da931e1390a6386603da (5.3).

[ChangeLog][QtCore][QAtomicInt/QAtomicInteger] Fixed signed arithmetic
in prefix increment and decrement and in += and -= to be in two's
complement, matching std::atomic's behavior, rather than overflowing
(causing undefined behavior).

Pick-to: 6.12 6.11 6.8 6.5 5.15
Change-Id: Ic1aa41a803bca9a2d873d7ada8343d0ca01e3fe4
Reviewed-by: Giuseppe D'Angelo <[email protected]>
Reviewed-by: Thiago Macieira <[email protected]>
https://invent.kde.org/qt/qt/qtbase/-/commit/55df5ccd997446760364f55aa041efc7c80d6fdd

Git commit 3efb5cbfa27b79ce2411b5860ab6ee7bce633390 by Alexandru Croitor on 30/07/2026 at 21:22..
CMake: Pass QT_ADDITIONAL_HOST_PACKAGES_PREFIX_PATH to EP examples

External project examples should inherit the
QT_ADDITIONAL_HOST_PACKAGES_PREFIX_PATH variable if it is set by
the caller.

Pick-to: 6.12
Task-number: QTBUG-90820
Task-number: QTBUG-96232
Change-Id: Ie1a9ebb2b5ed57a2449979a3fd5446a0361bf719
Reviewed-by: Orkun Tokdemir <[email protected]>
https://invent.kde.org/qt/qt/qtbase/-/commit/3efb5cbfa27b79ce2411b5860ab6ee7bce633390

Git commit 48233d8ccd3c80dfdbe18442bf291fb4cb44862d by Alexandru Croitor on 30/07/2026 at 21:22..
CMake: Pass vcpkg related vars to external project examples

External project examples need to be able to find the same host and
target tools / libraries as the main build when vcpkg is used.

Make sure to pass those along when set.

Also make sure to pass -DVCPKG_MANIFEST_INSTALL=OFF unless opted out,
to ensure we don't download, build and install packages into each
example build dir when a vcpkg.json manifest file is present.

Pick-to: 6.12
Task-number: QTBUG-90820
Task-number: QTBUG-96232
Change-Id: I1d6f3b3d1226a27343c2526ac40d6824ae1c792a
Reviewed-by: Orkun Tokdemir <[email protected]>
https://invent.kde.org/qt/qt/qtbase/-/commit/48233d8ccd3c80dfdbe18442bf291fb4cb44862d

Git commit fccf972ac5b4d50aa98275c89dd27b3372a15f41 by Alexandru Croitor on 30/07/2026 at 21:22..
coin: Enable vcpkg usage for cross-compiled standalone examples

Set vcpkg-related variables when cross-compiling standalone examples,
and not only the standalone tests and the main build.

This ensures examples as external projects can find the same vcpkg
third party tools and libraries as the main build.

Amends 49c3cda61cfd486aa67d69b1e3f9d26bb6a06619

Pick-to: 6.12
Task-number: QTBUG-90820
Task-number: QTBUG-96232
Change-Id: I65f562d1417090656c2b3827d689b62d46aa9180
Reviewed-by: Orkun Tokdemir <[email protected]>
https://invent.kde.org/qt/qt/qtbase/-/commit/fccf972ac5b4d50aa98275c89dd27b3372a15f41

Git commit 9b98839e826d52d17eebcda0bce73200f9f6dfc0 by Alexandru Croitor on 30/07/2026 at 21:22..
coin: Set QEMU_LD_PREFIX for examples built as external projects

In a cross-built Qt that has QT_FORCE_BUILD_TOOLS_ON, examples
built as 'external projects' find the /target platform/ tools.
This caused issues when trying to invoke the target tool during the
example build, leading to an error like:

 qemu-arm: Could not open '/lib/ld-linux-armhf.so.3': No such file
 or directory

To be specific, it happens for the qttools arrowpad example in the CI
for the yocto platform configurations.

The find_package(Qt6 COMPONENTS LinguistTools) call finds the
Qt6LinguistToolsConfig.cmake file in the target sysroot, which refers
to the target 'lupdate'. This is called during the example build, and
fails.

When building cmake or qmake tests, this doesn't happen because we set
the QEMU_LD_PREFIX env var to ensure the target tools can run on the
host.

Do the same for the standalone example builds.

Pick-to: 6.12
Task-number: QTBUG-90820
Task-number: QTBUG-96232
Change-Id: Id2a577d0f29d78371099bafd4971db9590fd720a
Reviewed-by: Orkun Tokdemir <[email protected]>
https://invent.kde.org/qt/qt/qtbase/-/commit/9b98839e826d52d17eebcda0bce73200f9f6dfc0

Git commit 71ccc59fb8a24de085d2284a4ae094c9b43efb06 by Marc Mutz on 30/07/2026 at 22:39..
tst_QLogging: fix -Wunused-result in race_helper

... using the std::ignore trick.

Also treat poll(), even though GCC doesn't warn about it, to keep
indentation consistent, and to record intent.

Amends 6e37cd4176368bee838161f5353038027bcdbe50 (picked to 6.5).

Pick-to: 6.12 6.11 6.8
Change-Id: Ia4ba0967eece28ed7c35fe15b04c8b7d938ac029
Reviewed-by: Thiago Macieira <[email protected]>
https://invent.kde.org/qt/qt/qtbase/-/commit/71ccc59fb8a24de085d2284a4ae094c9b43efb06

Git commit c3231cd78597207902d517b6032e5c4ac27100d0 by Marc Mutz on 30/07/2026 at 22:39..
tst_QKeyCombination: suppress deprecation warning emitted by API under test

Amends 1f77e8566f71d98f4bc6bbf5092594e67a32f268 (picked to 6.2).

Pick-to: 6.12 6.11 6.8
Change-Id: I2b396154057985ff9cca71192f0d67e62bd83451
Reviewed-by: Thiago Macieira <[email protected]>
https://invent.kde.org/qt/qt/qtbase/-/commit/c3231cd78597207902d517b6032e5c4ac27100d0

Git commit 1c285d07760b5b0b6f8c7f8dde47fd4b922a94e7 by Marc Mutz on 30/07/2026 at 22:39..
QString: remove unused qthreadstorage.h

The last user of QThreadStorage in this TU was moved to qcollator.cpp
in a9d8794cf0be617d9eedbf9bb0d6d5401735d6f2 (6.3).

Pick-to: 6.12 6.11 6.8
Change-Id: I951b024c6a8e069c1cb9eb12c0e71094bdedcd40
Reviewed-by: Thiago Macieira <[email protected]>
https://invent.kde.org/qt/qt/qtbase/-/commit/1c285d07760b5b0b6f8c7f8dde47fd4b922a94e7

Git commit 5919760e3283bb609d9d9f534c02344ae264839e by Marc Mutz on 30/07/2026 at 22:39..
tst_QDateTime: extend the tests for msec over/underflow to the argument

The old tests set the extreme values on the QDateTime (LHS), and then
added or subtracted one (1) (addMSecs() argument, RHS). What was not
tested was to start with the ±1 on LHS and then add or subtract the
extreme values.

Add those tests. Lucky for us, they pass (incl. in ubsan builds).

Amends 2a6f2fe9ef9a5d0755443ba94183d97b2fac1a28 (6.0).

Pick-to: 6.12 6.11 6.8 6.5
Change-Id: Ie3076b845944a6890fa7423f03d850681beeb0a0
Reviewed-by: Thiago Macieira <[email protected]>
https://invent.kde.org/qt/qt/qtbase/-/commit/5919760e3283bb609d9d9f534c02344ae264839e

Git commit 19810242a1661191a577ee599747e374f89faa91 by Marc Mutz on 30/07/2026 at 22:39..
tst_QStorageInfo: fix GCC -Wformat-truncation

GCC 15 (in ubsan/asan mode) warned:

  In function ‘int vsnprintf(char*, size_t, const char*, __va_list_tag*)’,
    inlined from ‘int qInfoPrinter(const char*, ...)’ at tst_qstorageinfo.cpp:78:33:
  /usr/include/x86_64-linux-gnu/bits/stdio2.h:80:36: warning: null format string [-Wformat-truncation=]
   80 |   return __builtin___vsnprintf_chk (__s, __n, __USE_FORTIFY_LEVEL - 1,
      |          ~~~~~~~~~~~~~~~~~~~~~~~~~~^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
   81 |                                     __bos (__s), __fmt, __ap);
      |                                     ~~~~~~~~~~~~~~~~~~~~~~~~~

But all callers (through the function pointer in printVolumes()) pass
non-nullptr string literals, so it's a False Positive. Claude confirms
it's a known problem of the GCC warning, but its fix
(__attribute__((format))) didn't work, so I tried Q_PRESUME, and that
fixed it.

Amends a26435d65ceac5d714d5cc7d5af2326e162d7a41 (5.7).

Picking to all active non-ESM branches, knowing that in 6.8, we'll
need to use Q_ASSUME (Q_PRESUME is \since 6.11).

Pick-to: 6.12 6.11 6.8
Change-Id: Ib91b26d2f75c7d3618e14c8a222e3a4d15c08c6c
Reviewed-by: Thiago Macieira <[email protected]>
https://invent.kde.org/qt/qt/qtbase/-/commit/19810242a1661191a577ee599747e374f89faa91

Git commit 7eeb08d217ca941260b759be388f6bbee423fbc7 by Marc Mutz on 30/07/2026 at 22:39..
QOCICols: don't pattern-init 64KiB of stack memory

Another performance regression caused by
9ff1e6d80bbd5b44b9ec4c0a837d9a4c962698e4.

Found by the function being rejected while trying to build qtbase with
-Wframe-larger-than=20KiB.

Pick-to: 6.12 6.11 6.8
Change-Id: I26d1e85db8d6eaf58d29b2e05da8cad90a195ad3
Reviewed-by: Giuseppe D'Angelo <[email protected]>
https://invent.kde.org/qt/qt/qtbase/-/commit/7eeb08d217ca941260b759be388f6bbee423fbc7
lmpx.com only provides a reader for public news (NNTP) servers. It is not affiliated with the servers or forums shown here and is not responsible for the content of articles, which is written by their respective authors.