You're right, JD.
If one of the variables is NaN the comparison will always fail. So if the uninitialized variable gets NaN the comparison fails and then it will never get updated.
At least that's the way I understand it. (Plugging NaN < 1.0 into firefox's console gives false)
"If your compiler produces a NaN, it has the unusual property that it is not equal to any value, including itself. For example, if a is NaN, then a == a is false. In fact, if a is NaN, then a will be neither less than, equal to, nor greater than any value including itself. In other words, regardless of the value of b, a < b, a <= b, a > b, a >= b, and a == b will all return false."
Also, if the uninitialized variable m_joystick_x1_time is large, the comparison (machine().time().as_double() >= m_joystick_x1_time) will not be true and it will never update the m_joystick_x1_time.