hctim created this revision. hctim added reviewers: morehouse, Dor1s. Herald added a project: clang. Herald added a subscriber: cfe-commits.
Probably a useful feature for checking whether a file was built with -fsanitize=fuzzer or -fsanitize=fuzzer-no-link. N.B. __has_feature(fuzzing_coverage) doesn't cover instances where users manually specify -fsanitize-coverage=... (even if the flags are identical to ToT -fsanitize=fuzzer-no-link). IMHO this is WAI - -fsanitize=fuzzer-no-link is not a stable set of flags and people that want sancov for fuzzing should use fuzzer-no-link. Repository: rG LLVM Github Monorepo https://reviews.llvm.org/D82926 Files: clang/include/clang/Basic/Features.def clang/test/Lexer/has_feature_libfuzzer.cpp Index: clang/test/Lexer/has_feature_libfuzzer.cpp =================================================================== --- /dev/null +++ clang/test/Lexer/has_feature_libfuzzer.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: FuzzingCoverageEnabled +// CHECK-ENABLED: FuzzingCoverageDisabled Index: clang/include/clang/Basic/Features.def =================================================================== --- clang/include/clang/Basic/Features.def +++ 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)
Index: clang/test/Lexer/has_feature_libfuzzer.cpp =================================================================== --- /dev/null +++ clang/test/Lexer/has_feature_libfuzzer.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: FuzzingCoverageEnabled +// CHECK-ENABLED: FuzzingCoverageDisabled Index: clang/include/clang/Basic/Features.def =================================================================== --- clang/include/clang/Basic/Features.def +++ 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)
_______________________________________________ cfe-commits mailing list cfe-commits@lists.llvm.org https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits