Message ID | 20200504142630.12842-1-philmd@redhat.com |
---|---|
State | New |
Headers | show |
Series | tests/qht-bench: Fix Clang 'int-conversion' warning | expand |
On 5/4/20 4:26 PM, Philippe Mathieu-Daudé wrote: > When building with Clang 10 on Fedora 32, we get: > > tests/qht-bench.c:287:29: error: implicit conversion from 'unsigned long' to 'double' changes value from 18446744073709551615 to 18446744073709551616 [-Werror,-Wimplicit-int-float-conversion] > *threshold = rate * UINT64_MAX; > ~ ^~~~~~~~~~ > /usr/include/stdint.h:130:23: note: expanded from macro 'UINT64_MAX' > # define UINT64_MAX (__UINT64_C(18446744073709551615)) > ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ > /usr/include/stdint.h:107:25: note: expanded from macro '__UINT64_C' > # define __UINT64_C(c) c ## UL > ^~~~~~~ > <scratch space>:14:1: note: expanded from here > 18446744073709551615UL > ^~~~~~~~~~~~~~~~~~~~~~ > > Fix by using nextafter() from <math.h>: > > float nextafterf( float from, float to ); > > Returns the next representable value of 'from' > in the direction of 'to'. > > Signed-off-by: Philippe Mathieu-Daudé <philmd@redhat.com> > --- > Cc: Emilio G. Cota <cota@braap.org> > Cc: Alex Bennée <alex.bennee@linaro.org> > Cc: Richard Henderson <richard.henderson@linaro.org> > Cc: Alexander Bulekov <alxndr@bu.edu> > --- > tests/qht-bench.c | 3 ++- > 1 file changed, 2 insertions(+), 1 deletion(-) > > diff --git a/tests/qht-bench.c b/tests/qht-bench.c > index e3b512f26f..f93f8e0fe2 100644 > --- a/tests/qht-bench.c > +++ b/tests/qht-bench.c > @@ -10,6 +10,7 @@ > #include "qemu/qht.h" > #include "qemu/rcu.h" > #include "qemu/xxhash.h" > +#include <math.h> > > struct thread_stats { > size_t rd; > @@ -284,7 +285,7 @@ static void do_threshold(double rate, uint64_t *threshold) > if (rate == 1.0) { > *threshold = UINT64_MAX; > } else { > - *threshold = rate * UINT64_MAX; > + *threshold = rate * nextafterf(0x1p64, 0.0); NAck since of double type. Will send v2. > } > } > >
diff --git a/tests/qht-bench.c b/tests/qht-bench.c index e3b512f26f..f93f8e0fe2 100644 --- a/tests/qht-bench.c +++ b/tests/qht-bench.c @@ -10,6 +10,7 @@ #include "qemu/qht.h" #include "qemu/rcu.h" #include "qemu/xxhash.h" +#include <math.h> struct thread_stats { size_t rd; @@ -284,7 +285,7 @@ static void do_threshold(double rate, uint64_t *threshold) if (rate == 1.0) { *threshold = UINT64_MAX; } else { - *threshold = rate * UINT64_MAX; + *threshold = rate * nextafterf(0x1p64, 0.0); } }
When building with Clang 10 on Fedora 32, we get: tests/qht-bench.c:287:29: error: implicit conversion from 'unsigned long' to 'double' changes value from 18446744073709551615 to 18446744073709551616 [-Werror,-Wimplicit-int-float-conversion] *threshold = rate * UINT64_MAX; ~ ^~~~~~~~~~ /usr/include/stdint.h:130:23: note: expanded from macro 'UINT64_MAX' # define UINT64_MAX (__UINT64_C(18446744073709551615)) ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ /usr/include/stdint.h:107:25: note: expanded from macro '__UINT64_C' # define __UINT64_C(c) c ## UL ^~~~~~~ <scratch space>:14:1: note: expanded from here 18446744073709551615UL ^~~~~~~~~~~~~~~~~~~~~~ Fix by using nextafter() from <math.h>: float nextafterf( float from, float to ); Returns the next representable value of 'from' in the direction of 'to'. Signed-off-by: Philippe Mathieu-Daudé <philmd@redhat.com> --- Cc: Emilio G. Cota <cota@braap.org> Cc: Alex Bennée <alex.bennee@linaro.org> Cc: Richard Henderson <richard.henderson@linaro.org> Cc: Alexander Bulekov <alxndr@bu.edu> --- tests/qht-bench.c | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-)