summaryrefslogtreecommitdiffstats
path: root/tests/auto/corelib/global/qglobal
diff options
context:
space:
mode:
authorGiuseppe D'Angelo <giuseppe.dangelo@kdab.com>2024-03-21 10:48:05 +0100
committerGiuseppe D'Angelo <giuseppe.dangelo@kdab.com>2024-03-22 02:54:15 +0100
commitf4bac3ca173be9f219099c04e76d6d62c4d0e19e (patch)
tree8ba8377414f0a65195cdd74f6d4f0bf2b9e9577c /tests/auto/corelib/global/qglobal
parentb20da0ba2844b1ecbb7b128f3075f7285673b604 (diff)
QTypeInfo: add detection for Clang's __is_trivially_relocatable
Types marked with [[clang::trivial_abi]] are considered to be trivially relocatable for Clang. This is ABI compatible, since in Qt 6 we can change the value of QTypeInfo::IsRelocatable "after the fact" -- it simply means that code that doesn't get recompiled is pessimized. Change-Id: I32e52bfb212c7919b2ebcf7832ede4404358330f Reviewed-by: Thiago Macieira <thiago.macieira@intel.com>
Diffstat (limited to 'tests/auto/corelib/global/qglobal')
-rw-r--r--tests/auto/corelib/global/qglobal/tst_qglobal.cpp14
1 files changed, 14 insertions, 0 deletions
diff --git a/tests/auto/corelib/global/qglobal/tst_qglobal.cpp b/tests/auto/corelib/global/qglobal/tst_qglobal.cpp
index 1a19048bbe..524212e933 100644
--- a/tests/auto/corelib/global/qglobal/tst_qglobal.cpp
+++ b/tests/auto/corelib/global/qglobal/tst_qglobal.cpp
@@ -930,6 +930,20 @@ struct Trivial1
static_assert(!QTypeInfo<Trivial1>::isComplex);
static_assert(QTypeInfo<Trivial1>::isRelocatable);
+#if defined(__has_builtin)
+#if __has_builtin(__is_trivially_relocatable) && __has_attribute(trivial_abi)
+struct [[clang::trivial_abi]] TrivialAbi1
+{
+ ~TrivialAbi1();
+ TrivialAbi1(TrivialAbi1 &&);
+};
+static_assert(__has_builtin(__is_trivially_relocatable));
+static_assert(__is_trivially_relocatable(TrivialAbi1));
+static_assert(QTypeInfo<TrivialAbi1>::isComplex);
+static_assert(QTypeInfo<TrivialAbi1>::isRelocatable);
+#endif
+#endif
+
QT_END_NAMESPACE
QTEST_APPLESS_MAIN(tst_QGlobal)