Kaydet (Commit) 24b822e2 authored tarafından Victor Stinner's avatar Victor Stinner

Issue #23517: Try to fix test_time on "x86 Ubuntu Shared 3.x" buildbot

üst ead144c1
...@@ -64,11 +64,13 @@ _PyLong_FromTime_t(time_t t) ...@@ -64,11 +64,13 @@ _PyLong_FromTime_t(time_t t)
static double static double
_PyTime_RoundHalfUp(double x) _PyTime_RoundHalfUp(double x)
{ {
if (x >= 0.0) /* volatile avoids optimization changing how numbers are rounded */
x = floor(x + 0.5); volatile double d = x;
if (d >= 0.0)
d = floor(d + 0.5);
else else
x = ceil(x - 0.5); d = ceil(d - 0.5);
return x; return d;
} }
...@@ -77,7 +79,7 @@ _PyTime_DoubleToDenominator(double d, time_t *sec, long *numerator, ...@@ -77,7 +79,7 @@ _PyTime_DoubleToDenominator(double d, time_t *sec, long *numerator,
double denominator, _PyTime_round_t round) double denominator, _PyTime_round_t round)
{ {
double intpart, err; double intpart, err;
/* volatile avoids unsafe optimization on float enabled by gcc -O3 */ /* volatile avoids optimization changing how numbers are rounded */
volatile double floatpart; volatile double floatpart;
floatpart = modf(d, &intpart); floatpart = modf(d, &intpart);
...@@ -134,7 +136,8 @@ int ...@@ -134,7 +136,8 @@ int
_PyTime_ObjectToTime_t(PyObject *obj, time_t *sec, _PyTime_round_t round) _PyTime_ObjectToTime_t(PyObject *obj, time_t *sec, _PyTime_round_t round)
{ {
if (PyFloat_Check(obj)) { 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); d = PyFloat_AsDouble(obj);
if (round == _PyTime_ROUND_HALF_UP) if (round == _PyTime_ROUND_HALF_UP)
...@@ -255,7 +258,7 @@ static int ...@@ -255,7 +258,7 @@ static int
_PyTime_FromFloatObject(_PyTime_t *t, double value, _PyTime_round_t round, _PyTime_FromFloatObject(_PyTime_t *t, double value, _PyTime_round_t round,
long to_nanoseconds) 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; volatile double d, err;
/* convert to a number of nanoseconds */ /* convert to a number of nanoseconds */
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment