> This indicates that:
> - two apparently useless implicit casts are generated;
The innercast is from the lvalue-to-rvalue conversion, which strips qualifiers (C99 220.127.116.11p2). The outer cast adjusts the type of the right-hand side to match that of the left-hand side. I don't like the fact that we have an "unknown" conversion there, but otherwise this looks fine.
> - the BinaryOperator node's type has lost the restrict qualifier.
The result of assignment is the unqualified type of the left-hand side (C99 6.5.16p3), so this is also correct.