[clang-tools-extra] r269923 - [include-fixer] Don't insert #includes if a fatal error occurred.

Benjamin Kramer via cfe-commits cfe-commits at lists.llvm.org
Wed May 18 06:32:39 PDT 2016


Author: d0k
Date: Wed May 18 08:32:38 2016
New Revision: 269923

URL: http://llvm.org/viewvc/llvm-project?rev=269923&view=rev
Log:
[include-fixer] Don't insert #includes if a fatal error occurred.

This typically happens when the user didn't setup include paths correctly
and the fixer starts adding garbage includes. Avoid that. Disable the error
limit though, as we might hit that easily with missing includes and still
want to fix those cases.

Added:
    clang-tools-extra/trunk/test/include-fixer/exit_on_fatal.cpp
Modified:
    clang-tools-extra/trunk/include-fixer/IncludeFixer.cpp
    clang-tools-extra/trunk/include-fixer/tool/ClangIncludeFixer.cpp

Modified: clang-tools-extra/trunk/include-fixer/IncludeFixer.cpp
URL: http://llvm.org/viewvc/llvm-project/clang-tools-extra/trunk/include-fixer/IncludeFixer.cpp?rev=269923&r1=269922&r2=269923&view=diff
==============================================================================
--- clang-tools-extra/trunk/include-fixer/IncludeFixer.cpp (original)
+++ clang-tools-extra/trunk/include-fixer/IncludeFixer.cpp Wed May 18 08:32:38 2016
@@ -390,6 +390,10 @@ bool IncludeFixerActionFactory::runInvoc
                              /*ShouldOwnClient=*/true);
   Compiler.createSourceManager(*Files);
 
+  // We abort on fatal errors so don't let a large number of errors become
+  // fatal. A missing #include can cause thousands of errors.
+  Compiler.getDiagnostics().setErrorLimit(0);
+
   // Run the parser, gather missing includes.
   auto ScopedToolAction =
       llvm::make_unique<Action>(SymbolIndexMgr, MinimizeIncludePaths);
@@ -401,8 +405,9 @@ bool IncludeFixerActionFactory::runInvoc
                             Replacements);
 
   // Technically this should only return true if we're sure that we have a
-  // parseable file. We don't know that though.
-  return true;
+  // parseable file. We don't know that though. Only inform users of fatal
+  // errors.
+  return !Compiler.getDiagnostics().hasFatalErrorOccurred();
 }
 
 } // namespace include_fixer

Modified: clang-tools-extra/trunk/include-fixer/tool/ClangIncludeFixer.cpp
URL: http://llvm.org/viewvc/llvm-project/clang-tools-extra/trunk/include-fixer/tool/ClangIncludeFixer.cpp?rev=269923&r1=269922&r2=269923&view=diff
==============================================================================
--- clang-tools-extra/trunk/include-fixer/tool/ClangIncludeFixer.cpp (original)
+++ clang-tools-extra/trunk/include-fixer/tool/ClangIncludeFixer.cpp Wed May 18 08:32:38 2016
@@ -108,7 +108,11 @@ int includeFixerMain(int argc, const cha
   include_fixer::IncludeFixerActionFactory Factory(
       *SymbolIndexMgr, Replacements, MinimizeIncludePaths);
 
-  tool.run(&Factory); // Always succeeds.
+  if (tool.run(&Factory) != 0) {
+    llvm::errs()
+        << "Clang died with a fatal error! (incorrect include paths?)\n";
+    return 1;
+  }
 
   if (!Quiet)
     for (const tooling::Replacement &Replacement : Replacements)

Added: clang-tools-extra/trunk/test/include-fixer/exit_on_fatal.cpp
URL: http://llvm.org/viewvc/llvm-project/clang-tools-extra/trunk/test/include-fixer/exit_on_fatal.cpp?rev=269923&view=auto
==============================================================================
--- clang-tools-extra/trunk/test/include-fixer/exit_on_fatal.cpp (added)
+++ clang-tools-extra/trunk/test/include-fixer/exit_on_fatal.cpp Wed May 18 08:32:38 2016
@@ -0,0 +1,11 @@
+// REQUIRES: shell
+// RUN: sed -e 's#//.*$##' %s > %t.cpp
+// RUN: not clang-include-fixer -db=fixed -input='foo= "foo.h"' %t.cpp --
+// RUN: FileCheck %s -input-file=%t.cpp
+
+// CHECK-NOT: #include
+// CHECK: #include "doesnotexist.h"
+// CHECK-NEXT: foo f;
+
+#include "doesnotexist.h"
+foo f;




More information about the cfe-commits mailing list