> I don't think you need a warning in this particular case, perhaps a > better way would be for the compiler to enforce a rule that forbids > access of function pointers of inner functions that referencing local > variables of its parent function. Yes, this is better. For now, when this happend, there's only a segfault and it's diffcult to dig out. > > For example, both: > > void *foo(int x) > { > int a; > void foo2(int i) > { > // I want warning for the below code. > if (i == a){} > x += i; > a += i; > } > foo2(a); > > return foo2; > } > > and: > > void *bar; > > void foo(int x) > { > int a; > void foo2(int i) > { > // I want warning for the below code. > if (i == a){} > x += i; > a += i; > } > foo2(a); > > bar = foo2; > } > > > should return an error.