As I noted in <http://gcc.gnu.org/ml/gcc-patches/2008-11/msg00105.html>: excess precision is removed as part of evaluating an expression statement. There are two minor problems associated with this: * If in future GCC preserves such conversions when needed for floating-point exceptions, the conversions (that are not part of the C99 semantics for excess precision) will cause spurious exceptions. * Statement expressions have no excess precision; it would be more natural for them to have whatever excess precision their last contained expressions have.
Confirmed.