------- Additional Comments From pinskia at gcc dot gnu dot org 2005-04-12 14:49 ------- Note this is not fully a regression but really a progression. What is happening now is only partial optimizations is happen before the warning to happen.
>I was unable to reduce the test case further without making the warning >disappear. In particular, removing the increment of v1->count makes the >warning >disappear. This is because we would then jump thread he jump. Again this is because we are emitting the warning too soon, I might be able to come up with a testcase which shows that this is not really a regression but a progression in that we have warned in 3.4 and 4.0: struct {int count;} *v1; int c; int k; extern void baz(int); void foo(void) { int i; int r; if (k == 4) { i = 1; r = 1; } else r = 0; if (!r) { if (!c) return; v1->count++; } if (!c) { baz(i); } } There is no different from the case above and the functions you gave below. There has been some talking about moving where we warn about uninitialized variables but I feel that you can get around this in your code. -- What |Removed |Added ---------------------------------------------------------------------------- Component|c |middle-end Summary|[4.0/4.1 Regression] |Spurious "may be used |Spurious "may be used |uninitialized" warning |uninitialized" warning | http://gcc.gnu.org/bugzilla/show_bug.cgi?id=20968