René Scharfe <l.s.r@xxxxxx> writes: > On second thought, what do we gain by using __builtin_types_compatible_p > here? Does it catch cases that the assignment check plus the element > size check wouldn't? I was reacting to this part of an earlier message in the thread: Presumably we cannot catch int *ip; unsigned *up; (0 ? (*(ip) = *(up), 0) : 0); (0 ? (*(up) = *(ip), 0) : 0); with the approach? i.e. *ip and *up are of the same size. Would the assignment check trigger? > We actually need to compare the types of the elements here, because > otherwise we'd disallow copies between arrays (int arr[7]) and pointers > (int *p), which would be unnecessarily strict. Yup. Thanks for inferring what I meant to give, despite the two typoes (the other one is ", 0").