On Tuesday 21 March 2006 21:59, Jeffrey A Law wrote: > On Tue, 2006-03-21 at 10:14 +0100, Duncan Sands wrote: > > > Hi Jeff, on the subject of seeing through typecasts, I was playing around > > with VRP and noticed that the following "if" statement is not eliminated: > > > > int u (unsigned char c) { > > int i = c; > > > > if (i < 0 || i > 255) > > return -1; /* never taken */ > > else > > return 0; > > } > > > > Is it supposed to be? > Fixed thusly. Bootstrapped and regression tested on i686-pc-linux-gnu.
Hi Jeff, this seems to work nicely - thanks again. I still see a bunch of suboptimal range calculations in the Ada code I'm looking at, but these now just coming from having everything initialised to VR_VARYING rather than [TYPE_MIN, TYPE_MAX]. Do you know of any way of getting variables with non-trivial TYPE_MIN/TYPE_MAX values in C? I ask because I'd rather produce test cases in C than Ada, since everyone has access to a C compiler :) All the best, Duncan.