Index: libunwind/src/libunwind.cpp =================================================================== --- libunwind/src/libunwind.cpp +++ libunwind/src/libunwind.cpp @@ -16,15 +16,13 @@ #include -#if defined(__has_feature) -#define has_asan_portable __has_feature(address_sanitizer) -#elif defined(__SANITIZE_ADDRESS__) -#define has_asan_portable __SANITIZE_ADDRESS__ -#else -#define has_asan_portable 0 +// Define the __has_feature extension for compilers that do not support it so that +// we can later check for the presence of ASan in a compiler-neutral way. +#if !defined(__has_feature) +#define __has_feature(feature) 0 #endif -#if has_asan_portable +#if __has__feature(address_sanitizer) || defined(__SANITIZE_ADDRESS__) #include #endif @@ -195,7 +193,7 @@ /// Resume execution at cursor position (aka longjump). _LIBUNWIND_HIDDEN int __unw_resume(unw_cursor_t *cursor) { _LIBUNWIND_TRACE_API("__unw_resume(cursor=%p)", static_cast(cursor)); -#if has_asan_portable +#if __has__feature(address_sanitizer) || defined(__SANITIZE_ADDRESS__) // Inform the ASan runtime that now might be a good time to clean stuff up. __asan_handle_no_return(); #endif