> Umm, did you look at ssa_name_has_boolean_range?  Isn't the problem that
> Ada's BOOLEAN_TYPE has a wider range than [0..1] and thus this is the
> wrong bit of code:
> 
>   /* Boolean types always have a range [0..1].  */
>   if (TREE_CODE (TREE_TYPE (op)) == BOOLEAN_TYPE)
>     return true;

You seem to be discovering that boolean types can have a precision > 1; that's 
the case in Ada and Fortran.  They are indeed a bit delicate to handle but the 
invariant is that the 0-or-1 value must be preserved for them too, i.e. you 
cannot create another value out of thin air.

> IIRC there are other places that have similar logic and rely on
> ssa_name_has_boolean_range to filter out anything undesirable.

The other places are more careful, i.e. they explicitly test for 0 or 1.

-- 
Eric Botcazou

Reply via email to