Skip to content

Commit

Permalink
tst_qobject: fix the detection for GCC
Browse files Browse the repository at this point in the history
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ø <[email protected]>
(cherry picked from commit 8b9c8d4)
Reviewed-by: Qt Cherry-pick Bot <[email protected]>
  • Loading branch information
dangelog authored and Qt Cherry-pick Bot committed Mar 26, 2021
1 parent 9c12d8e commit 4e62499
Showing 1 changed file with 14 additions and 4 deletions.
18 changes: 14 additions & 4 deletions tests/auto/corelib/kernel/qobject/tst_qobject.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -7050,6 +7050,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 };

Expand All @@ -7067,7 +7073,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);
Expand Down Expand Up @@ -7100,10 +7106,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);
Expand Down Expand Up @@ -7377,6 +7383,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()
Expand Down

0 comments on commit 4e62499

Please sign in to comment.