> LGTM. I do wonder if this could be documented somewhere if not
> already. Because I suspect there are other places which miss that if
> TYPE_PRECISION are equal, you might still need a cast for boolean
> types. Maybe a helper function might be useful too.

The knowledge is indeed encoded in useless_type_conversion_p, int_fits_type_p,
fits_to_tree_p (which ought to be called fits_to_type_p AFAICS) but I'm not 
sure how to factor it out in a predicate.  But we can certainly add a blurb in 
tree.def for BOOLEAN_TYPE, for example:

diff --git a/gcc/tree.def b/gcc/tree.def
index c4ad8d08f10..19533cfe77c 100644
--- a/gcc/tree.def
+++ b/gcc/tree.def
@@ -135,7 +135,9 @@ DEFTREECODE (OFFSET_TYPE, "offset_type", tcc_type, 0)
 DEFTREECODE (ENUMERAL_TYPE, "enumeral_type", tcc_type, 0)
 
 /* Boolean type (true or false are the only values).  Looks like an
-   INTEGRAL_TYPE.  */
+   INTEGER_TYPE, but must be dealt with specially because TYPE_PRECISION
+   may be arbitrary despite the restricted set of valid values (in other
+   words, boolean types with TYPE_PRECISION > 1 exist in some languages).
 DEFTREECODE (BOOLEAN_TYPE, "boolean_type", tcc_type, 0)
 
 /* Integer types in all languages, including char in C.

-- 
Eric Botcazou


Reply via email to