On 9/14/23 22:07, Jiufu Guo wrote:

undefined is a perfectly acceptable range.  It can be used to
represent either values which has not been initialized, or more
frequently it identifies values that cannot occur due to
conflicting/unreachable code.  VARYING means it can be any range,
UNDEFINED means this is unusable, so treat it accordingly.  Its
propagated like any other range.
"undefined" means the ranger is unusable. So, for this ranger, it
seems only "undefined_p ()" can be checked, and it seems no other
functions of this ranger can be called.

not at all. It means ranger has determined that there is no valid range for the item you are asking about probably due to conflicting conditions, which imparts important information about the range.. or lack of range :-)

Quite frequently it means you are looking at a block of code that ranger knows is unreachable, but a pass of the compiler which removes such blocks has not been called yet.. so the awareness imparted is that there isn't much point in doing optimizations on it because its probably going to get thrown away by a following pass.


I'm thinking that it may be ok to let "range_of_expr" return false
if the "vr" is "undefined_p".  I know this may change the meaning
of "range_of_expr" slightly :)

No.  That would be like saying NULL is not a valid value for a pointer.  undefined_p has very specific meaning that we use.. it just has no type.

Andrew

Reply via email to