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 > #endif > #if __has_feature(address_sanitizer) || defined(__SANITIZE_ADDRESS__)
I don't care much. Would #if (defined(__has_feature) && __has_feature(address_sanitizer)) \ || defined(__SANITIZE_ADDRESS__) 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 > __has_feature? Not for GCC 4.8, that is a new feature, so certainly too late for that. Jakub