Interesting problem! I found this page discussing the topic, and it says that adding
#pragma STDC FENV_ACCESS ON
will do the proper thing on a C99 conforming compiler...which does not include gcc. You appear to be right on with the volatile workaround, though.
That page points to a couple of gcc bugs, one of which has a test program that demonstrates the issue.