https://gcc.gnu.org/bugzilla/show_bug.cgi?id=116122

Adrian Bunk <bunk at stusta dot de> changed:

           What    |Removed                     |Added
----------------------------------------------------------------------------
                 CC|                            |bunk at stusta dot de

--- Comment #3 from Adrian Bunk <bunk at stusta dot de> ---
This change was apparently intentional in Bug#109504 and I can understand the
rationale there, but it can break existing compile time detection of _Float16
support (as Qt does).

The relevant part in the Qt sources is:
#if defined(__STDCPP_FLOAT16_T__)
#  define QFLOAT16_IS_NATIVE        1 
using NativeFloat16Type = std::float16_t;
#elif defined(Q_CC_CLANG) && defined(__FLT16_MAX__) && 0
// disabled due to https://github.com/llvm/llvm-project/issues/56963
#  define QFLOAT16_IS_NATIVE        1
using NativeFloat16Type = decltype(__FLT16_MAX__);
#elif defined(Q_CC_GNU_ONLY) && defined(__FLT16_MAX__)
#  define QFLOAT16_IS_NATIVE        1
#  ifdef __ARM_FP16_FORMAT_IEEE
using NativeFloat16Type = __fp16;
#  else
using NativeFloat16Type = _Float16;
#  endif
#else
#  define QFLOAT16_IS_NATIVE        0
using NativeFloat16Type = void;
#endif

With gcc 14 this needs
-#elif defined(Q_CC_GNU_ONLY) && defined(__FLT16_MAX__)
+#elif defined(Q_CC_GNU_ONLY) && defined(__FLT16_MAX__) && (!defined(__i386__)
|| defined(__SSE2__))
or some other similar change to check for SSE2.

If this gcc change will not be reverted, it should be documented as a change in
the gcc 14 "Changes" and "Porting to" documentation.

Reply via email to