Avoid -pedantic warnings about using _Generic in __fp_type_select

When compiling parts of math.h with clang using a C standard before C11,
and using -pedantic, it will result in warnings similar to:

bug254714.c:5:11: warning: '_Generic' is a C11 extension [-Wc11-extensions]
  return !isfinite(1.0);
          ^
/usr/include/math.h:111:21: note: expanded from macro 'isfinite'
                    ^
/usr/include/math.h:82:39: note: expanded from macro '__fp_type_select'
                                      ^

This is because the block that enables use of _Generic is conditional
not only on C11, but also on whether the compiler advertises support for
C generic selections via __has_extension(c_generic_selections).

To work around the warning without having to pessimize the code, use the
__extension__ keyword, which is supported by both clang and gcc. While
here, remove the check for __clang__, as _Generic has been supported for
a long time by gcc too now.

Reported by:	yuri
PR:		254714
MFC after:	1 week
This commit is contained in:
Dimitry Andric 2021-04-08 13:13:15 +02:00
parent f2ecc0d1b7
commit 7702d940ec

View File

@ -77,9 +77,8 @@ extern const union __nan_un {
#define FP_SUBNORMAL 0x08 #define FP_SUBNORMAL 0x08
#define FP_ZERO 0x10 #define FP_ZERO 0x10
#if (__STDC_VERSION__ >= 201112L && defined(__clang__)) || \ #if __STDC_VERSION__ >= 201112L || __has_extension(c_generic_selections)
__has_extension(c_generic_selections) #define __fp_type_select(x, f, d, ld) __extension__ _Generic((x), \
#define __fp_type_select(x, f, d, ld) _Generic((x), \
float: f(x), \ float: f(x), \
double: d(x), \ double: d(x), \
long double: ld(x), \ long double: ld(x), \