Hartmut Birr schrieb:
You are right, but I've still assumed that the pointer is zero or valid. The real problem is, that gcc doesn't stop to validate an expression if the result is determined and if the expression consist of simple expressions which are combined with OR.
Does this also happen when using something like the following?
if (p!=NULL && p->val==0) { }
I would assume that GCC's optimizer realizes that your (not mine above) sample code is just some kind of switch statement that can be heavily optimized. This kind of optimization (-> switch) is ok in this situation.
And I have to admit that the optimization is quite good because it avoids a conditional jump.
Regards, Mark