[Development] Two source incompatibilities in Qt 5.5 with Clang
Stephen Kelly
steveire at gmail.com
Thu Mar 5 13:59:01 CET 2015
Hello,
After commit ebef2ad1 (Make the empty Q_ASSERT still check its
argument for validity, 2014-09-11), there are two source
incompatibilities compared to Qt 5.4. I understand the message in the
commit.
The following code fails to compile with -DQT_NO_DEBUG:
sic.cpp:10:14: error: use of undeclared identifier 'checkInvariant'
Q_ASSERT(checkInvariant());
^
qglobal.h:663:52: note: expanded from macro 'Q_ASSERT'
# define Q_ASSERT(cond) do { } while (false && (cond))
^
1 error generated.
$ cat sic.cpp
#include <QtCore/QObject>
#ifndef QT_NO_DEBUG
static bool checkInvariant() { return true; }
#endif
void foo()
{
Q_ASSERT(checkInvariant());
}
If compiled with ccache, there is a second problem if used with
-Werror=unreachable-code:
sic.cpp:10:29: error: code will never be executed [-Werror,-Wunreachable-code]
do { } while (false && (checkInvariant()));
^~~~~~~~~~~~~~
sic.cpp:10:19: note: silence by adding parentheses to mark code as
explicitly dead
do { } while (false && (checkInvariant()));
^
/* DISABLES CODE */ ( )
1 error generated.
In this case, adding
run_second_cpp = true
to
~/.ccache/ccache.conf
makes it compile without changing the macro.
If we want this source compatibility, both of these issues should be
mentioned in the release notes.
Thanks,
Steve.
More information about the Development
mailing list