From eca5758bf9b10b003c261f1e1924f75f09534347 Mon Sep 17 00:00:00 2001 From: Yuval Tassa Date: Mon, 16 Mar 2026 08:17:27 -0700 Subject: [PATCH] Define `ADDRESS_SANITIZER` portably using standard compiler macros Use `__SANITIZE_ADDRESS__` (GCC) and `__has_feature(address_sanitizer)` (Clang) to define ADDRESS_SANITIZER when the toolchain doesn't provide it natively. Fixes #3160 PiperOrigin-RevId: 884447485 Change-Id: I48ef51bca8f5c5f15f62089e73cd8fa649723636 --- include/mujoco/mjsan.h | 7 +++++++ src/engine/engine_crossplatform.h | 7 +++++++ src/engine/engine_memory.h | 2 ++ unity/Runtime/Bindings/MjBindings.cs | 1 + 4 files changed, 17 insertions(+) diff --git a/include/mujoco/mjsan.h b/include/mujoco/mjsan.h index 4d45997b..db00fb91 100644 --- a/include/mujoco/mjsan.h +++ b/include/mujoco/mjsan.h @@ -15,6 +15,13 @@ #ifndef MUJOCO_INCLUDE_MJSAN_H_ #define MUJOCO_INCLUDE_MJSAN_H_ +// Define ADDRESS_SANITIZER if implied by other macros. +#if !defined(ADDRESS_SANITIZER) + #if defined(__SANITIZE_ADDRESS__) || (defined(__has_feature) && __has_feature(address_sanitizer)) + #define ADDRESS_SANITIZER + #endif +#endif + // Include asan interface header, or provide stubs for poison/unpoison macros when not using asan. #ifdef ADDRESS_SANITIZER #include diff --git a/src/engine/engine_crossplatform.h b/src/engine/engine_crossplatform.h index 2cbaad8c..2fcebefc 100644 --- a/src/engine/engine_crossplatform.h +++ b/src/engine/engine_crossplatform.h @@ -58,6 +58,13 @@ #define mjUNLIKELY(x) (x) #endif +// Define ADDRESS_SANITIZER if implied by other macros. +#if !defined(ADDRESS_SANITIZER) + #if defined(__SANITIZE_ADDRESS__) || (defined(__has_feature) && __has_feature(address_sanitizer)) + #define ADDRESS_SANITIZER + #endif +#endif + #ifdef __cplusplus extern "C" { #endif diff --git a/src/engine/engine_memory.h b/src/engine/engine_memory.h index 3202353d..6c408e5b 100644 --- a/src/engine/engine_memory.h +++ b/src/engine/engine_memory.h @@ -17,6 +17,8 @@ #include #include +#include +#include // IWYU pragma: keep #include #ifdef __cplusplus diff --git a/unity/Runtime/Bindings/MjBindings.cs b/unity/Runtime/Bindings/MjBindings.cs index dbdbd276..2cad9def 100644 --- a/unity/Runtime/Bindings/MjBindings.cs +++ b/unity/Runtime/Bindings/MjBindings.cs @@ -60,6 +60,7 @@ public const int mjNAUX = 10; public const int mjMAXTEXTURE = 1000; public const int mjMAXMATERIAL = 1000; public const bool THIRD_PARTY_MUJOCO_INCLUDE_MJSAN_H_ = true; +public const bool ADDRESS_SANITIZER = true; public const bool THIRD_PARTY_MUJOCO_INCLUDE_MJSPEC_H_ = true; public const bool THIRD_PARTY_MUJOCO_INCLUDE_MJTHREAD_H_ = true; public const int mjMAXTHREAD = 128;