[Development] QNX and Dinkumware support for constexpr and nullptr
Thiago Macieira
thiago.macieira at intel.com
Wed Oct 28 02:30:29 CET 2015
On Tuesday 27 October 2015 18:03:22 Thiago Macieira wrote:
> On Tuesday 27 October 2015 17:52:38 Thiago Macieira wrote:
> > A3) if not (if the constexpr methods in the Standard Library are missing)
> > but the toolchain supports <atomic> with its constexpr methods, I can fix
> > the header. Constexpr is not a mandatory feature outside of
> > QAtomicInteger.
>
> BTW, the <atomic> header is documented in the QNX 6.6 site:
>
> http://www.qnx.com/developers/docs/660/index.jsp?topic=/com.qnx.doc.dinkum/t
> opic/cpp11/index.html
>
> So I've gone ahead and implemented the above solution in
>
> https://codereview.qt-project.org/139149
>
> I've self-approved and staged it just so we get a report on whether this
> works or whether there are more breakages. We should get the reply in about
> 3 hours from now.
Or sooner.
http://testresults.qt.io/logs/qt/qtbase/f37b972295a6d204414c39367e0b537fa3369e04/LinuxRHEL_6_6x86_64QNXQNX_660armv5GCCRelease_DisableTests_OpenGLES2/da39a3ee5e6b4b0d3255bfef95601890afd80709/buildlog.txt.gz
/opt/qnx660/target/qnx6/usr/include/cpp/xxatomic: In instantiation of
'std::atomic<_Ty*>::atomic(_Ty*) [with _Ty = void(QtMsgType, const char*)]':
/opt/qnx660/target/qnx6/usr/include/cpp/xxatomic:336:3: error: invalid
conversion from 'void (*)(QtMsgType, const char*)' to 'void*' [-fpermissive]
/opt/qnx660/target/qnx6/usr/include/cpp/xxatomic:394:27: error: invalid
static_cast from type 'void*' to type 'void (*)(QtMsgType, const
QMessageLogContext&, const QString&)'
This is caused by making the same mistake that the Intel Compiler's
stdatomic.h header makes: failing to cast pointers to void* [1]. Note that it
needs to be a C-style cast or a reinterpret_cast.
Since this is an easy fix, can we count on the DW headers being fixed?
If not, we should detect the mistake in the configure script and print the
patch people should apply to their toolchains.
[1] "What are you talking about? All pointers cast implicitly to void*!" Not
all pointers do: function pointers and member pointers don't. That's why
QLibrary::resolve() returns a QFunctionPointer instead of void*.
--
Thiago Macieira - thiago.macieira (AT) intel.com
Software Architect - Intel Open Source Technology Center
More information about the Development
mailing list