Info node (gcc)Warning Options mentions that gcc warns about
int save_y;
if (change_y) save_y = y, y = new_y;
...
if (change_y) y = save_y;
However that's not always true, so it looks like gcc does have
the smarts to drop the warning. Could that be improved?
gcc -W -O does not warn about this snippet, but it does warn with
-DMACRO or -O2. So it looks like the information that this code
is safe is available but not used.
#define foo(x) (x < 3 ? 0 : x)
#ifndef MACRO
int (foo)(int x) { return foo(x); }
#undef foo
#endif
int bar(int y, const int change_y)
{
int save_y;
if (change_y) save_y = y, y = -y;
y = foo(y);
if (change_y) y = save_y;
return y;
}
gcc 4.3.2 on x86_64-unknown-linux-gnu.
--
Hallvard