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.