Remove unnecessary const and volatile qualifiers from __fp_type_select()
Since https://github.com/llvm/llvm-project/commit/ca75ac5f04f2, clang 15 has a new warning about _Generic selection expressions, such as used in math.h: lib/libc/gdtoa/_ldtoa.c:82:10: error: due to lvalue conversion of the controlling expression, association of type 'volatile float' will never be selected because it is qualified [-Werror,-Wunreachable-code-generic-assoc] switch (fpclassify(u.e)) { ^ lib/msun/src/math.h:109:2: note: expanded from macro 'fpclassify' __fp_type_select(x, __fpclassifyf, __fpclassifyd, __fpclassifyl) ^ lib/msun/src/math.h:85:14: note: expanded from macro '__fp_type_select' volatile float: f(x), \ ^ This is because the controlling expression always undergoes lvalue conversion first, dropping any cv-qualifiers. The 'const', 'volatile', and 'volatile const' associations will therefore never be used. MFC after: 1 week Reviewed by: theraven Differential Revision: https://reviews.freebsd.org/D35815
This commit is contained in:
parent
01c58e7e4f
commit
e50027e38d
@ -81,16 +81,7 @@ extern const union __nan_un {
|
||||
#define __fp_type_select(x, f, d, ld) __extension__ _Generic((x), \
|
||||
float: f(x), \
|
||||
double: d(x), \
|
||||
long double: ld(x), \
|
||||
volatile float: f(x), \
|
||||
volatile double: d(x), \
|
||||
volatile long double: ld(x), \
|
||||
volatile const float: f(x), \
|
||||
volatile const double: d(x), \
|
||||
volatile const long double: ld(x), \
|
||||
const float: f(x), \
|
||||
const double: d(x), \
|
||||
const long double: ld(x))
|
||||
long double: ld(x))
|
||||
#elif __GNUC_PREREQ__(3, 1) && !defined(__cplusplus)
|
||||
#define __fp_type_select(x, f, d, ld) __builtin_choose_expr( \
|
||||
__builtin_types_compatible_p(__typeof(x), long double), ld(x), \
|
||||
|
Loading…
Reference in New Issue
Block a user