Am Montag, den 20.04.2015, 21:35 -0400 schrieb Rich Felker: > On Tue, Apr 21, 2015 at 02:56:27AM +0300, Alexander Monakov wrote: > > > When building without --enable-warnings, there are many false positives from > > > -Wpointer-to-int-cast about x32 __scc(); at least from 4.5 onwards GCC enables > > > this warning by default, so perhaps if musl really wants to silence it, it > > > should test the corresponding -Wno-... flag outside of x$warnings == xyes > > > test? > > > > Could it be possible that implementation of __scc() can be adjusted to avoid > > triggering the warning? I hoped the following would achieve that: > > > > // Cast X to signed integral type of corresponding size > > #define __scc1(X) (__typeof__((X)-(__typeof__(1?(X):0))0)) (X) > > #define __scc(X) sizeof(1?(X):0ULL) < 8 ? (unsigned long) __scc1(X) : (long long) __scc1(X) > > > > .... but unfortunately it doesn't work with -Werror=pointer-arith when type of > > X is 'void *'. > > Indeed, introducing invalid C to make a warning go away is not a nice > tradeoff. Since such a solution would use a gcc'ish extension __typeof__, anyhow, perhaps it would be preferable to use another one, namely __builtin_choose_expr: #define __scc(X) __builtin_choose_expr(sizeof(1?(X):0ULL) < 8, (unsigned long) (X), (long long) (X)) if that helps to quiencen the warning? (and in any case __scc for x32 should get some () around, just to be complete) Jens -- :: INRIA Nancy Grand Est ::: Camus ::::::: ICube/ICPS ::: :: ::::::::::::::: office Strasbourg : +33 368854536 :: :: :::::::::::::::::::::: gsm France : +33 651400183 :: :: ::::::::::::::: gsm international : +49 15737185122 :: :: http://icube-icps.unistra.fr/index.php/Jens_Gustedt ::