From 1392843aedb49908e3f46370b705528fc042b06d Mon Sep 17 00:00:00 2001 From: Nimrod Gileadi Date: Sun, 17 Jul 2022 07:51:08 -0700 Subject: [PATCH] Fix the use of __has_builtin for GCC < 10. The breakage was introduced in af12322e9d6fe1b5a7b59fe6eb4dc3f790f35580. __has_builtin was introduced to GCC in version 10, and the arithmetic overflow builtins were available since version 5. Fixes deepmind/mujoco#386. Tested with GCC 9. PiperOrigin-RevId: 461463027 Change-Id: I76627539a5c0e7f5617b56a2c9ada9251bceb0f6 --- src/engine/engine_io.c | 8 ++++++-- 1 file changed, 6 insertions(+), 2 deletions(-) diff --git a/src/engine/engine_io.c b/src/engine/engine_io.c index aa79e105..019b09d5 100644 --- a/src/engine/engine_io.c +++ b/src/engine/engine_io.c @@ -45,6 +45,10 @@ #pragma warning (disable: 4305) // disable MSVC warning: truncation from 'double' to 'float' #endif +#ifndef __has_builtin +#define __has_builtin(x) 0 +#endif + #define PTRDIFF(x, y) ((void*)(x) - (void*)(y)) @@ -357,8 +361,8 @@ static void mj_setPtrModel(mjModel* m) { // *nbuffer += SKIP(*offset) + type_size*nr*nc; // *offset += SKIP(*offset) + type_size*nr*nc; static int safeAddToBufferSize(intptr_t* offset, int* nbuffer, size_t type_size, int nr, int nc) { -#if defined(__has_builtin) \ - && __has_builtin(__builtin_add_overflow) && __has_builtin(__builtin_mul_overflow) +#if (__has_builtin(__builtin_add_overflow) && __has_builtin(__builtin_mul_overflow)) \ + || (defined(__GNUC__) && __GNUC__ >= 5) // supported by GCC and Clang int to_add = 0; if (__builtin_mul_overflow(nc, nr, &to_add)) return 0;