On Tue, 2005-11-01 at 10:32 -0800, Joe Buck wrote: > On Tue, Nov 01, 2005 at 11:17:52AM -0700, Jeffrey A Law wrote: > > On Tue, 2005-11-01 at 11:06 -0500, Diego Novillo wrote: > > > To prevent losing location information for the warning, I had modified > > > the > > > propagation engine to warn as it folded the expression away. > > Possibly a useful thing to have, but I don't think we want to put > > the burden of detecting uninitialized variables onto each > > optimizer :-) > > Just an off-the-wall idea: What if dereferencing an uninitialized variable > is considered a side effect? Then that side effect must be preserved > unless it is unreachable. Consider > > while (i > 0) > i--; > // no more uses of i. > > Instead of throwing everything away, this would become > > __check_initialized(i); > > and we would still get the warning. I think that solves a subset of the stuff we're discussing, but I don't think it's general enough. Consider a variable which is used in a statement and the result of that statement is never used. ie
foo(int a) { int i, x; x = a; x += i; } Or unreachable code issues: foo() { int i; if (0) i++; i = ... more code... } I think that picking one of the alternatives I outlined a few minutes ago will take us to a better place without resorting to these kind of tricks. In my mind it's more a matter of determining what behavior we want. Once we've selected the desired behavior, achieving that behavior with the basic framework we've already got is pretty straightforward (unless we are determined to try and solve the halting problem :-) Jeff