Index: lib/Driver/ToolChains/Clang.cpp =================================================================== --- lib/Driver/ToolChains/Clang.cpp +++ lib/Driver/ToolChains/Clang.cpp @@ -2360,9 +2360,6 @@ // Treat blocks as analysis entry points. CmdArgs.push_back("-analyzer-opt-analyze-nested-blocks"); - // Enable compatilibily mode to avoid analyzer-config related errors. - CmdArgs.push_back("-analyzer-config-compatibility-mode=true"); - // Add default argument set. if (!Args.hasArg(options::OPT__analyzer_no_default_checks)) { CmdArgs.push_back("-analyzer-checker=core"); @@ -3694,6 +3691,17 @@ if (isa(JA)) RenderAnalyzerOptions(Args, CmdArgs, Triple, Input); + { + auto AnalyzerConfigArg = + llvm::find_if(CmdArgs, [] (StringRef Arg) { + return Arg.contains("-analyzer-config"); + }); + + // Enable compatilibily mode to avoid analyzer-config related errors. + if (AnalyzerConfigArg != CmdArgs.end()) + CmdArgs.push_back("-analyzer-config-compatibility-mode=true"); + } + CheckCodeGenerationOptions(D, Args); unsigned FunctionAlignment = ParseFunctionAlignment(TC, Args); Index: test/Analysis/invalid-analyzer-config-value.c =================================================================== --- test/Analysis/invalid-analyzer-config-value.c +++ test/Analysis/invalid-analyzer-config-value.c @@ -66,6 +66,12 @@ // CHECK-NO-COMPAT: error: unknown analyzer-config 'no-false-positives' + +// Test the driver properly using "analyzer-config-compatibility-mode=true", +// even if -analyze isn't specified. +// RUN: %clang --analyze -Xclang -analyzer-config -Xclang remember=TheVasa %s + + // expected-no-diagnostics int main() {}