From d62995929b569efc43137168611d8fcd5aff6c0d Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?M=C3=A1t=C3=A9=20Tokodi?= Date: Fri, 17 May 2024 11:02:10 +0200 Subject: [PATCH] Fix CI for macos-latest MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Add a non-inlineable function for negating a number on macos, bacause due to a compiler bug `r = -r` was being optimized out, resulting in some modulo operations failing such as `-1 % -1` or `-1 % 1`. JerryScript-DCO-1.0-Signed-off-by: Máté Tokodi mate.tokodi@szteszoftver.hu --- jerry-core/ecma/base/ecma-helpers-number.c | 7 +++++++ jerry-core/ecma/base/ecma-helpers.c | 8 ++++++++ jerry-core/ecma/base/ecma-helpers.h | 3 +++ 3 files changed, 18 insertions(+) diff --git a/jerry-core/ecma/base/ecma-helpers-number.c b/jerry-core/ecma/base/ecma-helpers-number.c index ad11be1fd9..3a072b3e5f 100644 --- a/jerry-core/ecma/base/ecma-helpers-number.c +++ b/jerry-core/ecma/base/ecma-helpers-number.c @@ -18,6 +18,9 @@ #include #include "ecma-conversion.h" +#ifdef __APPLE__ +#include "ecma-helpers.h" +#endif /* __APPLE__ */ #include "lit-char-helpers.h" @@ -370,7 +373,11 @@ ecma_number_remainder (ecma_number_t left_num, /**< left operand */ if (ecma_number_is_zero (r) && ecma_number_is_negative (left_num)) { +#ifdef __APPLE__ + r = ecma_number_negate (r); +#else /* !__APPLE__ */ r = -r; +#endif /* __APPLE__ */ } return r; diff --git a/jerry-core/ecma/base/ecma-helpers.c b/jerry-core/ecma/base/ecma-helpers.c index 94f6ac39a6..02fb8e24d8 100644 --- a/jerry-core/ecma/base/ecma-helpers.c +++ b/jerry-core/ecma/base/ecma-helpers.c @@ -1795,6 +1795,14 @@ ecma_get_current_stack_usage (void) #endif /* (JERRY_STACK_LIMIT != 0) */ +#ifdef __APPLE__ +ecma_number_t JERRY_ATTR_CONST +ecma_number_negate (ecma_number_t num) +{ + return -num; +} /* ecma_number_negate */ +#endif /* __APPLE__ */ + /** * @} * @} diff --git a/jerry-core/ecma/base/ecma-helpers.h b/jerry-core/ecma/base/ecma-helpers.h index 0e98ea243b..7067dbc6e2 100644 --- a/jerry-core/ecma/base/ecma-helpers.h +++ b/jerry-core/ecma/base/ecma-helpers.h @@ -493,6 +493,9 @@ ecma_value_t ecma_get_source_name (const ecma_compiled_code_t *bytecode_p); #if (JERRY_STACK_LIMIT != 0) uintptr_t ecma_get_current_stack_usage (void); #endif /* (JERRY_STACK_LIMIT != 0) */ +#ifdef __APPLE__ +ecma_number_t ecma_number_negate (ecma_number_t num); +#endif /* __APPLE__ */ /* ecma-helpers-external-pointers.c */ bool ecma_create_native_pointer_property (ecma_object_t *obj_p,