>   /* Return true if the conversion from INNER_TYPE to OUTER_TYPE is a
> !    useless type conversion, otherwise return false.
> !    This function implicitly defines the middle-end type system.  The
> !    following invariants shall be fulfilled:
> !
> !      1) tree_ssa_useless_type_conversion_1 is transitive.  If
> !     a < b and b < c then a < c.
> !
> !      2) tree_ssa_useless_type_conversion_1 is not communtative.
> !     From a < b does not follow a > b.
> !
> !      3) Conversions are useless only if with the resulting type
> !     can be used in a subset of the operations the original type
> !     can be applied to.  For example casts to void* are useless,
> !     casts from void* not.  Casts to const T* are useless, casts
> !     from const T* to T* not.

My understanding is that it's a relation, not an operation, so the proper term 
for 2 would be "symmetric".  For the sake of completeness, you could also add 
that it's reflexive: a < a holds.

Which would suggest to find a better symbol than '<' for it. :-)

-- 
Eric Botcazou

Reply via email to