]> granicus.if.org Git - clang/commitdiff
[driver] [analyzer] Fix --analyze -Xanalyzer after r349863.
authorArtem Dergachev <artem.dergachev@gmail.com>
Fri, 21 Dec 2018 01:11:21 +0000 (01:11 +0000)
committerArtem Dergachev <artem.dergachev@gmail.com>
Fri, 21 Dec 2018 01:11:21 +0000 (01:11 +0000)
If an -analyzer-config is passed through -Xanalyzer, it is not found while
looking for -Xclang.

Additionally, don't emit -analyzer-config-compatibility-mode for *every*
-analyzer-config flag we encounter; one is enough.

https://reviews.llvm.org/D55823

rdar://problem/46504165

git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@349866 91177308-0d34-0410-b5e6-96231b3b80d8

lib/Driver/ToolChains/Clang.cpp
test/Analysis/invalid-a-na-ly-zer-con-fig-value.c
test/Analysis/invalid-analyzer-config-value.c

index 87f9e818cc39d5c5ac2d5eee1df56ae799d3782a..ec4fdd2e6d78cd0541910f0b24ffbe4e26be496e 100644 (file)
@@ -3738,9 +3738,20 @@ void Clang::ConstructJob(Compilation &C, const JobAction &JA,
   // Enable compatilibily mode to avoid analyzer-config related errors.
   // Since we can't access frontend flags through hasArg, let's manually iterate
   // through them.
+  bool FoundAnalyzerConfig = false;
   for (auto Arg : Args.filtered(options::OPT_Xclang))
-    if (StringRef(Arg->getValue()) == "-analyzer-config")
-      CmdArgs.push_back("-analyzer-config-compatibility-mode=true");
+    if (StringRef(Arg->getValue()) == "-analyzer-config") {
+      FoundAnalyzerConfig = true;
+      break;
+    }
+  if (!FoundAnalyzerConfig)
+    for (auto Arg : Args.filtered(options::OPT_Xanalyzer))
+      if (StringRef(Arg->getValue()) == "-analyzer-config") {
+        FoundAnalyzerConfig = true;
+        break;
+      }
+  if (FoundAnalyzerConfig)
+    CmdArgs.push_back("-analyzer-config-compatibility-mode=true");
 
   CheckCodeGenerationOptions(D, Args);
 
index 1b6c97ad1ea107e6fe14265bbb12854c7bb8ba29..ec967d3c47c29a275174db44abf52adaf36e7090 100644 (file)
 // even if -analyze isn't specified.
 // RUN: %clang -fsyntax-only -Xclang -analyzer-config\
 // RUN:                      -Xclang remember=TheVasa %s
+// RUN: %clang -fsyntax-only -Xanalyzer -analyzer-config\
+// RUN:                      -Xanalyzer remember=TheVasa %s
+// RUN: %clang --analyze -Xanalyzer -analyzer-config\
+// RUN:                  -Xanalyzer remember=TheVasa %s
 
 // expected-no-diagnostics
 
index 4ddcfe820723415ac5b6884e7969bd83fe3594e4..f942dd3e6226658f4b51cbff901a1fafdcd4ce21 100644 (file)
 // even if -analyze isn't specified.
 // RUN: %clang -fsyntax-only -Xclang -analyzer-config\
 // RUN:                      -Xclang remember=TheVasa %s
+// RUN: %clang -fsyntax-only -Xanalyzer -analyzer-config\
+// RUN:                      -Xanalyzer remember=TheVasa %s
+// RUN: %clang --analyze -Xanalyzer -analyzer-config\
+// RUN:                  -Xanalyzer remember=TheVasa %s
 
 // expected-no-diagnostics