From 59ab5b29b3b1701fd7cd6b0a0bd23a718e313486 Mon Sep 17 00:00:00 2001 From: Giuseppe D'Angelo Date: Fri, 26 Mar 2021 14:11:30 +0100 Subject: tst_qobject: fix the detection for GCC MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 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ø (cherry picked from commit 8b9c8d417b8ff2d4f60d83f9cc69c148632d1046) Reviewed-by: Qt Cherry-pick Bot --- tests/auto/corelib/kernel/qobject/tst_qobject.cpp | 18 ++++++++++++++---- 1 file changed, 14 insertions(+), 4 deletions(-) (limited to 'tests') 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() -- cgit v1.2.3