https://gcc.gnu.org/bugzilla/show_bug.cgi?id=98188
Richard Biener <rguenth at gcc dot gnu.org> changed:
What |Removed |Added
----------------------------------------------------------------------------
Status|UNCONFIRMED |NEW
Ever confirmed|0 |1
Target Milestone|--- |11.0
Last reconfirmed| |2020-12-08
--- Comment #2 from Richard Biener <rguenth at gcc dot gnu.org> ---
wide_int min, max;
if (TREE_CODE (TREE_TYPE (lhs)) == BOOLEAN_TYPE)
{
min = wi::to_wide (boolean_false_node);
max = wi::to_wide (boolean_true_node);
}
this is problematic - the BOOLEAN_TYPE of Ada has precision 8 but here
you're using the (LTO) middle-end boolean_*_node with precision 1 so
you'll get mismatched precision for min/max vs. lhs/rhs.
I'd suggest to do
min = wi::zero (TYPE_PRECISION (TREE_TYPE (lhs));
max = wi::one (TYPE_PRECISION (TREE_TYPE (lhs));
max should be appropriately sign/zero extended then.
Confirmed by code inspection.