René Scharfe [off-list ref] writes:
Ah, right, __builtin_types_compatible_p returns 0 in this case and an
assignment is silently allowed.
Thanks. There is another thing I forgot to mention. I think the
side that can use __builtin_types_compatible_p() can lose the
assignment check (what I wrote had the GCC extension in addition to
the assignment check instead), i.e. the assignment check from your
original patch can be considered as a fallback position for
compilers without the GCC extension.