On 05/15/2013 04:57 AM, Eric Blake wrote: > Does clang support push/pop of pragmas?
Yes. Unfortunately they don't work here, even with _Pragma. > Can it be silenced by adding a > cast to void instead of globally turning off this normally-useful warning? Unfortunately no. >> +# elif 3 < __GNUC__ + (4 <= __GNUC_MINOR__) >> +# undef fwrite >> +# define fwrite(a, b, c, d) ({size_t __r = fwrite (a, b, c, d); __r; }) > > Here, we were just inlining the gcc version if "ignore-value.h" (so that > our replacement <stdio.h> doesn't have to drag in the actual > ignore-value.h header); but the non-gcc counterpart is a cast to void, > and clang doesn't seem to be issuing unused result warnings for other > uses of ignore_value(). I think that's because in other places we simply do a (void) fwrite (...), which pacifies 'clang'. But here we can't do that, since the replacement fwrite must return a value. None of the obvious workarounds worked for me. But I did think of a workaround that wasn't obvious (at least, not to me), and installed it. I'll follow up with a message "[PATCH 1/4] stdio: use __REDIRECT for fwrite, fwrite_unlocked" about that. Three other clang-related patches will follow.