qt6-bb10/tests/auto/corelib/kernel
Volker Hilsheimer 0be9ebcc22 JNI: replace va_arg helper with variadic template
Android 15 (at least) seems to have changed how float arguments are
passed to native functions, breaking our (conceptually correct) code for
processing the va_arg list into a list of static argument types of the
function implementation.

To fix this, we have to move away from using a va_arg function, and
register a function with statically typed arguments instead.

Use a template function that we instantiate with variadic arguments
deduced from the actual function, using a factory-helper that generates
a JNINativeMethod struct with that template instantiation as the
function pointer. Move all of that into a struct where we can also
declare the signature string as compile-time constant without cluttering
the namespace with static objects.

We can now remove the helpers that took care of type promotion in va_arg
functions, and of the tuple-construction from a va_list.

As a drive-by, don't cast function pointers to void *; it's strictly
speaking undefined behavior in C and should have generated a compiler
warning, if not a hard error [1]. We must initialize the
JNINativeMethod::fnPtr member with the address of the function pointer
instead.

[1] https://port70.net/~nsz/c/c11/n1570.html#6.3.2.3p8

Also, declare the native method as the JNICALL calling convention. That
is only defined on Windows, so makes no difference in practice, but it's
the correct thing to do anyway.

Fixes: QTBUG-132410
Change-Id: I190b95fcbcd07cf99c6765fa426c3c351f91994a
Reviewed-by: Volker Krause <vkrause@kde.org>
(cherry picked from commit e91a17873ee4ae58d369b8eb70029cf895b31d03)
Reviewed-by: Qt Cherry-pick Bot <cherrypick_bot@qt-project.org>
(cherry picked from commit 103aa5afb2d95f883daea41715c97455550285b2)
2025-01-13 14:52:09 +01:00
..
qapplicationstatic Change license for tests files 2024-02-04 09:56:42 +01:00
qchronotimer QChronoTimer: remove static singleShot() functions 2024-08-29 20:41:50 +00:00
qcoreapplication QThread/Unix: do clean up the QAdoptedThread for the main thread 2024-11-15 03:17:29 -07:00
qdeadlinetimer tst_QDeadlineTimer: fix format-string in toString() implementation 2024-07-22 21:00:13 +00:00
qelapsedtimer QElapsedTimer: use new comparison helper macros 2024-05-14 00:32:34 +02:00
qeventdispatcher tst_QEventDispatcher: port to QTEST_THROW_ON_FAIL 2024-06-18 08:09:13 +00:00
qeventloop Change license for tests files 2024-02-04 09:56:42 +01:00
qjniarray JNI: Constrain QJniArray::toContainer to compatible target containers 2024-07-20 01:13:40 +00:00
qjnienvironment Change license for tests files 2024-02-04 09:56:42 +01:00
qjniobject JNI: replace va_arg helper with variadic template 2025-01-13 14:52:09 +01:00
qjnitypes JNI: replace va_arg helper with variadic template 2025-01-13 14:52:09 +01:00
qmath Change license for tests files 2024-02-04 09:56:42 +01:00
qmetacontainer QMetaSequence and QMetaAssociation: use new comparison helper macros 2024-04-29 22:28:51 +02:00
qmetaenum QDebug: cast the QFlags value to the right-sized unsigned type (2/2) 2024-08-12 09:43:38 +00:00
qmetamethod QMetaMethod: use new comparison helper macros 2024-04-30 00:11:33 +02:00
qmetaobject Fix test compilation issues with QtLite configuration 2024-05-06 14:29:02 +00:00
qmetaobjectbuilder QMetaMethodBuilder: limit the bits of attribute()/setAttribute() 2024-10-29 20:51:12 +00:00
qmetaproperty Fix QFlag properties built by QMetaObjectBuilder 2024-10-29 20:51:12 +00:00
qmetatype QMetaType: use modern comparisons 2024-05-10 21:54:54 +02:00
qmimedata QMimeData: fix setData on URI list without ending CRLF 2024-04-22 13:57:38 -07:00
qobject tst_QObject: don't leak QtDeclarative::theData 2024-11-07 01:13:51 +00:00
qpermission Change license for tests files 2024-02-04 09:56:42 +01:00
qpointer QPointer: Use new comparison helper macros 2024-05-30 20:51:46 +02:00
qproperty Avoid referring to invalidated observer during binding evaluation 2024-10-07 17:26:50 +00:00
qsignalblocker Change license for tests files 2024-02-04 09:56:42 +01:00
qsignalmapper Change license for tests files 2024-02-04 09:56:42 +01:00
qsocketnotifier Change license for tests files 2024-02-04 09:56:42 +01:00
qtimer Timers: add Qt::TimerId enum class 2024-03-03 19:56:55 +02:00
qtranslator QTranslator: work around uiLanguages not including lang_Terr variants 2024-10-31 23:15:29 +02:00
qvariant qtypeinfo.h: move QTypeTraits part to qttypetraits.h 2024-06-04 13:42:16 +00:00
qwineventnotifier Change license for tests files 2024-02-04 09:56:42 +01:00
qwinregistrykey Replace QWinRegistryKey::dwordValue with QWinRegistryKey::value<T> 2024-11-09 20:00:08 +00:00
CMakeLists.txt Add QChronoTimer, a timer with nanoseconds precision 2024-03-03 19:56:55 +02:00