[Development] QNX and Dinkumware support for constexpr and nullptr

Thiago Macieira thiago.macieira at intel.com
Wed Oct 28 01:52:38 CET 2015


On Tuesday 27 October 2015 16:40:07 Thiago Macieira wrote:
> The check for certain defines indicates that there are versions of DW with
> the  necessary support. Are those available for QNX 6.6 toolchains?
> 
> If so, how soon can the CI be upgraded to those toolchains?
> 
> If not, we'll have to make some hard decisions.

Ground rule: if there's no information from QNX experts and cooperation in 
timely fashion to *fix* the issues, the CI will disable QNX testing. Fixing 
the breakages becomes a problem assigned to people interested in supporting 
Dinkumware (I'm not). If all else fails, our QNX support can advise people to 
drop DW and use libstdc++.

Note especially that the C++11 support requirements were extensively discussed 
in June, so this is not news. Anyone with a vested interest in a platform 
should have tested against those requirements soon after QtCS and reported any 
issues in the thread. Silence was consent.

Decision tree:

1) if there is a toolchain with support for nullptr, constexpr, and <atomic>, 
the CI will be upgraded to use it and that will become the minimum toolchain 
release for QNX 6.6.

2) if not but QNX is able to release an update in the next couple of months, 
we should disable QNX in the CI now and reenable it after the toolchain is 
released, requiring it from everyone.

On <atomic>:

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.

A4) if there's no QNX toolchain that supports <atomic> anytime soon, but the 
GCC compiler backend is GCC 4.7 or later, I can bring back qatomic_gcc.h and 
upgrade it with the atomic primitive intrinsics so that we get std::atomic 
level of support.

A5) if not, then I can bring back qatomic_gcc.h as it is in Qt 5.6, which uses 
the old __sync intrinsics. This will have the side-effect of always using full 
barriers/fence on both ARM and x86 (and that's totally unnecessary for x86), 
thus introducing a performance impact. This impact serves as an added 
incentive for QNX to provide a C++11 compliant Standard Library soon. There's 
no option to keep the current assembly.

On nullptr:

N3) if there's no Dinkumware version that defines std::nullptr_t but the GCC 
compiler backend is GCC 4.6 or later, we can easily do:
	namespace std { typedef decltype(nullptr) nullptr_t; }
and attempt to survive: we can probably live with the Standard Library missing 
std::nullptr_t overloads.

N4) if the compiler backend is too old, then QNX support needs to be dropped 
until the upgrade comes along.

<rant>
Qt 5.7 will be released 5 years after the C++11 standard was ratified and 8½ 
years after the paper introducing introducing <atomic> was published (N2427). 
It's bad enough that we need to support one major implementation that fails to 
have proper support in the compiler they released in 2015 (Microsoft) and they 
really, really should be ashamed. Please don't make another platform level 
itself down to the worst of the compilers we have to support.

Especially when the problems are the result out of a choice: the choice to 
remove libstdc++ that came with the compiler and use an inferior solution.
</rant>

PS: dinkumware.com says "The makers of the STL library included in Microsoft's 
VC.". Yeah, I guess that explains a lot.
-- 
Thiago Macieira - thiago.macieira (AT) intel.com
  Software Architect - Intel Open Source Technology Center




More information about the Development mailing list