> During the development of a patch I encountered some strange behavior > and decided to investigate. The result of which is I think I found a bug > with 'wide_int_storage::set_len' in gcc/wide-int.h. > > The function reads: > inline void > wide_int_storage::set_len (unsigned int l, bool is_sign_extended) > { > len = l; > if (!is_sign_extended && len * HOST_BITS_PER_WIDE_INT > precision) > val[len - 1] = sext_hwi (val[len - 1], > precision % HOST_BITS_PER_WIDE_INT); > }
The code certainly lacks a comment explaining the apparent discrepancy. > Due to this, 'expand_expr' will expand a constant tree with unsigned > integer type and value MAX_UINT to a rtx node (const_int -1). As Jakub explained, that is as expected, even if a little surprising. -- Eric Botcazou