[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