Skip to content

Commit 0babf9d

Browse files
committed
use memcpy
1 parent 6fa020d commit 0babf9d

2 files changed

Lines changed: 8 additions & 4 deletions

File tree

quaddtype/numpy_quaddtype/src/casts.cpp

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1245,8 +1245,8 @@ static inline int quad_to_numpy_same_value_check(quad_value x, QuadBackendType b
12451245
if(x.longdouble_value == roundtrip.longdouble_value)
12461246
return 1;
12471247
}
1248-
// Sleef_quad sleef_val = quad_to_sleef_quad(&x, backend);
1249-
Sleef_quad sleef_val = x.sleef_value;
1248+
Sleef_quad sleef_val = quad_to_sleef_quad(&x, backend);
1249+
// Sleef_quad sleef_val = x.sleef_value;
12501250
const char *val_str = quad_to_string_adaptive_cstr(&sleef_val, QUAD_STR_WIDTH);
12511251
if (val_str != NULL) {
12521252
PyErr_Format(PyExc_ValueError,

quaddtype/numpy_quaddtype/src/utilities.c

Lines changed: 6 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -262,9 +262,13 @@ Sleef_quad
262262
quad_to_sleef_quad(const quad_value *in_val, QuadBackendType backend)
263263
{
264264
if (backend == BACKEND_SLEEF) {
265-
return in_val->sleef_value;
265+
// can directly return but that causes union heisenbugs,
266+
// but this helper is rare to use, so acceptable
267+
Sleef_quad result;
268+
memcpy(&result, &in_val->sleef_value, sizeof(Sleef_quad));
269+
return result;
266270
}
267271
else {
268-
return Sleef_cast_from_doubleq1(in_val->longdouble_value);
272+
return Sleef_cast_from_doubleq1((double)(in_val->longdouble_value));
269273
}
270274
}

0 commit comments

Comments
 (0)