[Fuzzer] Guard no_sanitize_memory attributes behind __has_feature.
authorBenjamin Kramer <benny.kra@googlemail.com>
Fri, 18 Mar 2016 14:19:19 +0000 (14:19 +0000)
committerBenjamin Kramer <benny.kra@googlemail.com>
Fri, 18 Mar 2016 14:19:19 +0000 (14:19 +0000)
Otherwise GCC fails to build it because it doesn't know the attribute.

llvm-svn: 263787

llvm/lib/Fuzzer/FuzzerLoop.cpp

index 3bc5f93..7f3ffd0 100644 (file)
 #endif
 #endif
 
+#define NO_SANITIZE_MEMORY
+#if defined(__has_feature)
+#if __has_feature(memory_sanitizer)
+#undef NO_SANITIZE_MEMORY
+#define NO_SANITIZE_MEMORY __attribute__((no_sanitize_memory))
+#endif
+#endif
+
 extern "C" {
 // Re-declare some of the sanitizer functions as "weak" so that
 // libFuzzer can be linked w/o the sanitizers and sanitizer-coverage
@@ -92,7 +100,7 @@ void Fuzzer::DumpCurrentUnit(const char *Prefix) {
       {CurrentUnitData, CurrentUnitData + CurrentUnitSize}, Prefix);
 }
 
-__attribute__((no_sanitize_memory))
+NO_SANITIZE_MEMORY
 void Fuzzer::DeathCallback() {
   if (!CurrentUnitSize) return;
   Printf("DEATH:\n");
@@ -134,7 +142,7 @@ void Fuzzer::InterruptCallback() {
   _Exit(0);  // Stop right now, don't perform any at-exit actions.
 }
 
-__attribute__((no_sanitize_memory))
+NO_SANITIZE_MEMORY
 void Fuzzer::AlarmCallback() {
   assert(Options.UnitTimeoutSec > 0);
   if (!CurrentUnitSize)