QDecompressHelper: fix compilation with GCC 9

GCC 9 doesn't accept [[unlikely]] between the (condition) and the
compound-statement of an if, in both C++17 and C++20 modes:

  qdecompresshelper.cpp: In member function ‘qsizetype QDecompressHelper::readZLib(char*, qsizetype)’:
  qcompilerdetection.h:1048:31: error: attributes at the beginning of statement are ignored [-Werror=attributes]
   1048 | #    define Q_UNLIKELY_BRANCH [[unlikely]]
        |                               ^~~~~~~~~~~~
  qdecompresshelper.cpp:597:54: note: in expansion of macro ‘Q_UNLIKELY_BRANCH’
    597 |         if (ret == Z_DATA_ERROR && !triedRawDeflate) Q_UNLIKELY_BRANCH {
        |                                                      ^~~~~~~~~~~~~~~~~

See also https://stackoverflow.com/questions/51797959/how-to-use-c20s-likely-unlikely-attribute-in-if-else-statement

Put it into the compound-statement instead, then GCC 9 accepts it. The
two are equivalent, because [[likely]] marks a path, and there is no
selection statement between the two positions.

Amends 5ae84d0afbd3690a2c003d06d920566a5d56dc8c.

Pick-to: 6.9
Change-Id: Iac1970219c98a1c26e450dfe6bad6583e4d32c29
Reviewed-by: Thiago Macieira <thiago.macieira@intel.com>
This commit is contained in:
Marc Mutz 2024-12-20 20:11:31 +01:00
parent 40501ffbb4
commit 7a7804d4b4

View File

@ -594,7 +594,7 @@ qsizetype QDecompressHelper::readZLib(char *data, const qsizetype maxSize)
// also an error. // also an error.
// in the case where we get Z_DATA_ERROR this could be because we received raw deflate // in the case where we get Z_DATA_ERROR this could be because we received raw deflate
// compressed data. // compressed data.
if (ret == Z_DATA_ERROR && !triedRawDeflate) Q_UNLIKELY_BRANCH { if (ret == Z_DATA_ERROR && !triedRawDeflate) { Q_UNLIKELY_BRANCH
inflateEnd(inflateStream); inflateEnd(inflateStream);
triedRawDeflate = true; triedRawDeflate = true;
inflateStream->zalloc = Z_NULL; inflateStream->zalloc = Z_NULL;
@ -768,7 +768,7 @@ qsizetype QDecompressHelper::readZstandard(char *data, const qsizetype maxSize)
qsizetype bytesDecoded = 0; qsizetype bytesDecoded = 0;
while (outBuf.pos < outBuf.size && (inBuf.pos < inBuf.size || decoderHasData)) { while (outBuf.pos < outBuf.size && (inBuf.pos < inBuf.size || decoderHasData)) {
size_t retValue = ZSTD_decompressStream(zstdStream, &outBuf, &inBuf); size_t retValue = ZSTD_decompressStream(zstdStream, &outBuf, &inBuf);
if (ZSTD_isError(retValue)) Q_UNLIKELY_BRANCH { if (ZSTD_isError(retValue)) { Q_UNLIKELY_BRANCH
errorStr = QCoreApplication::translate("QHttp", "ZStandard error: %1") errorStr = QCoreApplication::translate("QHttp", "ZStandard error: %1")
.arg(QUtf8StringView{ZSTD_getErrorName(retValue)}); .arg(QUtf8StringView{ZSTD_getErrorName(retValue)});
return -1; return -1;