libsanitizer merge from upstream r175042
Fri Feb 15 09:37:00 GMT 2013
On Fri, Feb 15, 2013 at 01:30:18PM +0400, Konstantin Serebryany wrote:
> > OT, unrelated thing, in include/asan_interface.h there is one
> > #if __has_feature(address_sanitizer)
> > which for GCC should better be:
> > #if (defined __has_feature && __has_feature(address_sanitizer)) \
> > || defined(__SANITIZE_ADDRESS__)
> > (and similarly in asan_internal.h).
> z.c:1:44: error: missing binary operator before token "("
> #if (defined __has_feature && __has_feature(address_sanitizer)) \
> This should be more like the code below
> #if !defined(__has_feature)
> #define __has_feature(x) 0
> #if __has_feature(address_sanitizer) || defined(__SANITIZE_ADDRESS__)
I don't care much. Would
#if (defined(__has_feature) && __has_feature(address_sanitizer)) \
work? In any case, that looks like clang bug, if you have something that
behaves like a function-like macro, #if defined macro or #ifdef macro
or #if defined macro || 1 and similar should work just fine, only if
the macro is followed by ( it should behave differently.
> [hopefully not starting a holly war] Any chance to teach gcc/cpp about
Not for GCC 4.8, that is a new feature, so certainly too late for that.
More information about the Gcc-patches