Al Viro wrote:- > But that means a fsckload of extra nodes allocated on pretty much any > program - use of arrays is not rare and indices tend to be int, so we > hit an extra allocated node on each such place. > > Another possible solution is to add a primitive for combined conversion > and multiplication - basically, convert the first argument to the type of > the second one and multiply. We would actually need it only for ptrdiff_t; > sizeof(*p) is going to fit into the range anyway (it has to - the difference > between (char *)(p+1) and (char *)p must fit into it, or we couldn't do any > arithmetics on that pointer type at all; as soon as product overflows > ptrdiff_t we are free to do whatever the hell we like, since that's an > undefined behaviour and "multiply as ptrdiff_t values" gives an reasonable > result even in such cases). Perhaps not overloading the "+" node; reserve that for arithmetic types. Have a ptr_add, (maybe) ptr_sub, and ptr_diff operations. GCC's moved to having at least a ptr_add recently. Neil. - To unsubscribe from this list: send the line "unsubscribe linux-sparse" in the body of a message to majordomo@xxxxxxxxxxxxxxx More majordomo info at http://vger.kernel.org/majordomo-info.html