Index: clang/lib/Driver/ToolChains/Clang.cpp =================================================================== --- clang/lib/Driver/ToolChains/Clang.cpp +++ clang/lib/Driver/ToolChains/Clang.cpp @@ -3906,6 +3906,9 @@ if (isa(JA)) RenderAnalyzerOptions(Args, CmdArgs, Triple, Input); + if (isa(JA) && Args.hasArg(options::OPT__analyze, options::OPT__analyze_auto)) + CmdArgs.push_back("-D__clang_analyzer__"); + // Enable compatilibily mode to avoid analyzer-config related errors. // Since we can't access frontend flags through hasArg, let's manually iterate // through them. Index: clang/lib/Frontend/InitPreprocessor.cpp =================================================================== --- clang/lib/Frontend/InitPreprocessor.cpp +++ clang/lib/Frontend/InitPreprocessor.cpp @@ -992,7 +992,7 @@ // Define a macro that exists only when using the static analyzer. if (FEOpts.ProgramAction == frontend::RunAnalysis) - Builder.defineMacro("__clang_analyzer__"); + Builder.defineMacro("__clang_analyzer__"); /* BOOKMARK */ if (LangOpts.FastRelaxedMath) Builder.defineMacro("__FAST_RELAXED_MATH__"); Index: clang/test/Frontend/pp-only-with-analyze.c =================================================================== --- /dev/null +++ clang/test/Frontend/pp-only-with-analyze.c @@ -0,0 +1,8 @@ +// RUN: %clang -E --analyze %s | FileCheck %s +// expected-no-diagnostics + +#ifdef __clang_analyzer__ +int successfully_passed_the_macro; +// CHECK: successfully_passed_the_macro +#endif +int main() { return 42; }