diff --git a/clang/include/clang/Basic/Features.def b/clang/include/clang/Basic/Features.def --- a/clang/include/clang/Basic/Features.def +++ b/clang/include/clang/Basic/Features.def @@ -49,6 +49,9 @@ FEATURE(xray_instrument, LangOpts.XRayInstrument) FEATURE(undefined_behavior_sanitizer, LangOpts.Sanitize.hasOneOf(SanitizerKind::Undefined)) +FEATURE(fuzzing_coverage, + LangOpts.Sanitize.hasOneOf(SanitizerKind::Fuzzer | + SanitizerKind::FuzzerNoLink)) FEATURE(assume_nonnull, true) FEATURE(attribute_analyzer_noreturn, true) FEATURE(attribute_availability, true) diff --git a/clang/test/Lexer/has_feature_fuzzing_coverage.cpp b/clang/test/Lexer/has_feature_fuzzing_coverage.cpp new file mode 100644 --- /dev/null +++ b/clang/test/Lexer/has_feature_fuzzing_coverage.cpp @@ -0,0 +1,14 @@ +// RUN: %clang_cc1 -E %s -o - | FileCheck --check-prefix=CHECK-NONE %s +// RUN: %clang_cc1 -E -fsanitize=fuzzer %s -o - \ +// RUN: | FileCheck --check-prefix=CHECK-ENABLED %s +// RUN: %clang_cc1 -E -fsanitize=fuzzer-no-link %s -o - \ +// RUN: | FileCheck --check-prefix=CHECK-ENABLED %s + +#if __has_feature(fuzzing_coverage) +int FuzzingCoverageEnabled(); +#else +int FuzzingCoverageDisabled(); +#endif + +// CHECK-NONE: FuzzingCoverageDisabled +// CHECK-ENABLED: FuzzingCoverageEnabled