Skip to content

Commit

Permalink
QDecompressHelper: fix compilation with GCC 9
Browse files Browse the repository at this point in the history
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 5ae84d0.

Pick-to: 6.9
Change-Id: Iac1970219c98a1c26e450dfe6bad6583e4d32c29
Reviewed-by: Thiago Macieira <[email protected]>
  • Loading branch information
marcmutz committed Dec 22, 2024
1 parent 40501ff commit 7a7804d
Showing 1 changed file with 2 additions and 2 deletions.
4 changes: 2 additions & 2 deletions src/network/access/qdecompresshelper.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -594,7 +594,7 @@ qsizetype QDecompressHelper::readZLib(char *data, const qsizetype maxSize)
// also an error.
// in the case where we get Z_DATA_ERROR this could be because we received raw deflate
// compressed data.
if (ret == Z_DATA_ERROR && !triedRawDeflate) Q_UNLIKELY_BRANCH {
if (ret == Z_DATA_ERROR && !triedRawDeflate) { Q_UNLIKELY_BRANCH
inflateEnd(inflateStream);
triedRawDeflate = true;
inflateStream->zalloc = Z_NULL;
Expand Down Expand Up @@ -768,7 +768,7 @@ qsizetype QDecompressHelper::readZstandard(char *data, const qsizetype maxSize)
qsizetype bytesDecoded = 0;
while (outBuf.pos < outBuf.size && (inBuf.pos < inBuf.size || decoderHasData)) {
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")
.arg(QUtf8StringView{ZSTD_getErrorName(retValue)});
return -1;
Expand Down

0 comments on commit 7a7804d

Please sign in to comment.