]> granicus.if.org Git - python/commitdiff
Issue #23517: Try to fix test_time on "x86 Ubuntu Shared 3.x" buildbot
authorVictor Stinner <victor.stinner@gmail.com>
Wed, 2 Sep 2015 09:58:56 +0000 (11:58 +0200)
committerVictor Stinner <victor.stinner@gmail.com>
Wed, 2 Sep 2015 09:58:56 +0000 (11:58 +0200)
Python/pytime.c

index 8a2579b7926e75a1854b8a02a9a8902b4656ab4c..ffb390afe56fe4c49485551fcba834e19ad722d1 100644 (file)
@@ -64,11 +64,13 @@ _PyLong_FromTime_t(time_t t)
 static double
 _PyTime_RoundHalfUp(double x)
 {
-    if (x >= 0.0)
-        x = floor(x + 0.5);
+    /* volatile avoids optimization changing how numbers are rounded */
+    volatile double d = x;
+    if (d >= 0.0)
+        d = floor(d + 0.5);
     else
-        x = ceil(x - 0.5);
-    return x;
+        d = ceil(d - 0.5);
+    return d;
 }
 
 
@@ -77,7 +79,7 @@ _PyTime_DoubleToDenominator(double d, time_t *sec, long *numerator,
                             double denominator, _PyTime_round_t round)
 {
     double intpart, err;
-    /* volatile avoids unsafe optimization on float enabled by gcc -O3 */
+    /* volatile avoids optimization changing how numbers are rounded */
     volatile double floatpart;
 
     floatpart = modf(d, &intpart);
@@ -134,7 +136,8 @@ int
 _PyTime_ObjectToTime_t(PyObject *obj, time_t *sec, _PyTime_round_t round)
 {
     if (PyFloat_Check(obj)) {
-        double d, intpart, err;
+        /* volatile avoids optimization changing how numbers are rounded */
+        volatile double d, intpart, err;
 
         d = PyFloat_AsDouble(obj);
         if (round == _PyTime_ROUND_HALF_UP)
@@ -255,7 +258,7 @@ static int
 _PyTime_FromFloatObject(_PyTime_t *t, double value, _PyTime_round_t round,
                         long to_nanoseconds)
 {
-    /* volatile avoids unsafe optimization on float enabled by gcc -O3 */
+    /* volatile avoids optimization changing how numbers are rounded */
     volatile double d, err;
 
     /* convert to a number of nanoseconds */