diff options
author | Giuseppe D'Angelo <giuseppe.dangelo@kdab.com> | 2021-03-26 14:11:30 +0100 |
---|---|---|
committer | Qt Cherry-pick Bot <cherrypick_bot@qt-project.org> | 2021-03-26 17:16:43 +0000 |
commit | 59ab5b29b3b1701fd7cd6b0a0bd23a718e313486 (patch) | |
tree | dcef817cc2df02c22a86c7478ec2e8d049b84afe /tests | |
parent | e2a7381641136bc0e347e59aa27050e359f32045 (diff) |
tst_qobject: fix the detection for GCC
Q_CC_GNU is defined on compilers that masquerade as GCC (Clang, ICC),
so using it to work around GCC-specific bugs is wrong. Introduce a
local define for _only_ GCC and use it in place of Q_CC_GNU.
Drive by: version-fence a test we now know it's been fixed upstream,
and correct the link to the corresponding bug report.
Change-Id: I9059d6e6bf86157aca71590ac22afb1a1c114313
Reviewed-by: Tor Arne Vestbø <tor.arne.vestbo@qt.io>
(cherry picked from commit 8b9c8d417b8ff2d4f60d83f9cc69c148632d1046)
Reviewed-by: Qt Cherry-pick Bot <cherrypick_bot@qt-project.org>
Diffstat (limited to 'tests')
-rw-r--r-- | tests/auto/corelib/kernel/qobject/tst_qobject.cpp | 18 |
1 files changed, 14 insertions, 4 deletions
diff --git a/tests/auto/corelib/kernel/qobject/tst_qobject.cpp b/tests/auto/corelib/kernel/qobject/tst_qobject.cpp index 68d90987e1..c17947fb68 100644 --- a/tests/auto/corelib/kernel/qobject/tst_qobject.cpp +++ b/tests/auto/corelib/kernel/qobject/tst_qobject.cpp @@ -7047,6 +7047,12 @@ void tst_QObject::mutableFunctor() void tst_QObject::checkArgumentsForNarrowing() { + // Clang and ICC masquerade as GCC, so introduce a more strict define + // for exactly GCC (to exclude/include it from some tests). +#if defined(Q_CC_GNU) && !defined(Q_CC_CLANG) && !defined(Q_CC_INTEL) +#define Q_CC_EXACTLY_GCC Q_CC_GNU +#endif + enum UnscopedEnum { UnscopedEnumV1 = INT_MAX, UnscopedEnumV2 }; enum SignedUnscopedEnum { SignedUnscopedEnumV1 = INT_MIN, SignedUnscopedEnumV2 = INT_MAX }; @@ -7064,7 +7070,7 @@ void tst_QObject::checkArgumentsForNarrowing() // GCC < 9 does not consider floating point to bool to be narrowing, // https://gcc.gnu.org/bugzilla/show_bug.cgi?id=65043 -#if !defined(Q_CC_GNU) || Q_CC_GNU >= 900 +#if !defined(Q_CC_EXACTLY_GCC) || Q_CC_EXACTLY_GCC >= 900 NARROWS(float, bool); NARROWS(double, bool); NARROWS(long double, bool); @@ -7097,10 +7103,10 @@ void tst_QObject::checkArgumentsForNarrowing() FITS(float, double); FITS(float, long double); - // GCC thinks this is narrowing only on architectures where + // GCC < 11 thinks this is narrowing only on architectures where // sizeof(long double) > sizeof(double) - // https://gcc.gnu.org/bugzilla/show_bug.cgi?id=92856 -#if defined(Q_CC_GNU) + // https://gcc.gnu.org/bugzilla/show_bug.cgi?id=94590 +#if defined(Q_CC_EXACTLY_GCC) && (Q_CC_EXACTLY_GCC < 1100) NARROWS_IF(long double, double, sizeof(long double) > sizeof(double)); #else NARROWS(long double, double); @@ -7374,6 +7380,10 @@ void tst_QObject::checkArgumentsForNarrowing() #undef FITS_IF #undef NARROWS #undef FITS + +#ifdef Q_CC_EXACTLY_GCC +#undef Q_CC_EXACTLY_GCC +#endif } void tst_QObject::nullReceiver() |