Change PyFPE_END_PROTECT to PyFPE_END_PROTECT(v). v should be the
last variable to which a floating point expression is assigned. The macro passes its address to a dummy function so that the optimizer can't delay calculating its value until after the macro.
This commit is contained in:
parent
efd3a3a843
commit
1f06beeedd
|
@ -131,7 +131,7 @@ extern "C" {
|
|||
#include <math.h>
|
||||
extern jmp_buf PyFPE_jbuf;
|
||||
extern int PyFPE_counter;
|
||||
extern double PyFPE_dummy(void);
|
||||
extern double PyFPE_dummy();
|
||||
|
||||
#define PyFPE_START_PROTECT(err_string, leave_stmt) \
|
||||
if (!PyFPE_counter++ && setjmp(PyFPE_jbuf)) { \
|
||||
|
@ -149,12 +149,12 @@ if (!PyFPE_counter++ && setjmp(PyFPE_jbuf)) { \
|
|||
* which counts down PyFPE_counter, and thereby monkey wrench the overeager
|
||||
* optimizer. Better solutions are welcomed....
|
||||
*/
|
||||
#define PyFPE_END_PROTECT PyFPE_counter -= (int)PyFPE_dummy();
|
||||
#define PyFPE_END_PROTECT(v) PyFPE_counter -= (int)PyFPE_dummy(&(v));
|
||||
|
||||
#else
|
||||
|
||||
#define PyFPE_START_PROTECT(err_string, leave_stmt)
|
||||
#define PyFPE_END_PROTECT
|
||||
#define PyFPE_END_PROTECT(v)
|
||||
|
||||
#endif
|
||||
|
||||
|
|
Loading…
Reference in New Issue