Author: alexfh
Date: Mon Apr  8 07:18:26 2019
New Revision: 357915

URL: http://llvm.org/viewvc/llvm-project?rev=357915&view=rev
Log:
Remove a useless assertion in clang-check.

The assertion prevents it from applying fixes when used along with compilation
databases with relative paths. Added a test that demonstrates the assertion
failure.

An example of the assertion:
input.cpp:11:14: error: expected ';' after top level declarator
typedef int T
             ^
             ;
input.cpp:11:14: note: FIX-IT applied suggested code changes
clang-check: clang/tools/clang-check/ClangCheck.cpp:94: virtual std::string 
(anonymous namespace)::FixItOptions::RewriteFilename(const std::string &, int 
&): Assertion `llvm::sys::path::is_absolute(filename) && "clang-fixit expects 
absolute paths only."' failed.
  #0 llvm::sys::PrintStackTrace(llvm::raw_ostream&) 
llvm/lib/Support/Unix/Signals.inc:494:13
  #1 llvm::sys::RunSignalHandlers() llvm/lib/Support/Signals.cpp:69:18
  #2 SignalHandler(int) llvm/lib/Support/Unix/Signals.inc:357:1
  #3 __restore_rt (/lib/x86_64-linux-gnu/libpthread.so.0+0x110c0)
  #4 raise (/lib/x86_64-linux-gnu/libc.so.6+0x32fcf)
  #5 abort (/lib/x86_64-linux-gnu/libc.so.6+0x343fa)
  #6 (/lib/x86_64-linux-gnu/libc.so.6+0x2be37)
  #7 (/lib/x86_64-linux-gnu/libc.so.6+0x2bee2)
  #8 void std::__cxx11::basic_string<char, std::char_traits<char>, 
std::allocator<char> >::_M_construct<char*>(char*, char*, 
std::forward_iterator_tag)
  #9 void std::__cxx11::basic_string<char, std::char_traits<char>, 
std::allocator<char> >::_M_construct_aux<char*>(char*, char*, std::__false_type)
 #10 void std::__cxx11::basic_string<char, std::char_traits<char>, 
std::allocator<char> >::_M_construct<char*>(char*, char*)
 #11 std::__cxx11::basic_string<char, std::char_traits<char>, 
std::allocator<char> >::basic_string(std::__cxx11::basic_string<char, 
std::char_traits<char>, std::allocator<char> > const&)
 #12 (anonymous 
namespace)::FixItOptions::RewriteFilename(std::__cxx11::basic_string<char, 
std::char_traits<char>, std::allocator<char> > const&, int&) 
clang/tools/clang-check/ClangCheck.cpp:101:0
 #13 std::__cxx11::basic_string<char, std::char_traits<char>, 
std::allocator<char> >::_M_data() const
 #14 std::__cxx11::basic_string<char, std::char_traits<char>, 
std::allocator<char> >::_M_is_local() const
 #15 std::__cxx11::basic_string<char, std::char_traits<char>, 
std::allocator<char> >::_M_dispose()
 #16 std::__cxx11::basic_string<char, std::char_traits<char>, 
std::allocator<char> >::~basic_string()
 #17 
clang::FixItRewriter::WriteFixedFiles(std::vector<std::pair<std::__cxx11::basic_string<char,
 std::char_traits<char>, std::allocator<char> >, 
std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > 
>, std::allocator<std::pair<std::__cxx11::basic_string<char, 
std::char_traits<char>, std::allocator<char> >, 
std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > 
> > >*) clang/lib/Frontend/Rewrite/FixItRewriter.cpp:98:0
 #18 std::__shared_ptr<clang::CompilerInvocation, 
(__gnu_cxx::_Lock_policy)2>::get() const
 #19 std::__shared_ptr_access<clang::CompilerInvocation, 
(__gnu_cxx::_Lock_policy)2, false, false>::_M_get() const
 #20 std::__shared_ptr_access<clang::CompilerInvocation, 
(__gnu_cxx::_Lock_policy)2, false, false>::operator->() const
 #21 clang::CompilerInstance::getFrontendOpts() 
clang/include/clang/Frontend/CompilerInstance.h:290:0
 #22 clang::FrontendAction::EndSourceFile() 
clang/lib/Frontend/FrontendAction.cpp:966:0
 #23 __gnu_cxx::__normal_iterator<clang::FrontendInputFile*, 
std::vector<clang::FrontendInputFile, std::allocator<clang::FrontendInputFile> 
> >::operator++()
 #24 clang::CompilerInstance::ExecuteAction(clang::FrontendAction&) 
clang/lib/Frontend/CompilerInstance.cpp:943:0
 #25 
clang::tooling::FrontendActionFactory::runInvocation(std::shared_ptr<clang::CompilerInvocation>,
 clang::FileManager*, std::shared_ptr<clang::PCHContainerOperations>, 
clang::DiagnosticConsumer*) clang/lib/Tooling/Tooling.cpp:369:33
 #26 clang::tooling::ToolInvocation::runInvocation(char const*, 
clang::driver::Compilation*, std::shared_ptr<clang::CompilerInvocation>, 
std::shared_ptr<clang::PCHContainerOperations>) 
clang/lib/Tooling/Tooling.cpp:344:18
 #27 clang::tooling::ToolInvocation::run() clang/lib/Tooling/Tooling.cpp:329:10
 #28 clang::tooling::ClangTool::run(clang::tooling::ToolAction*) 
clang/lib/Tooling/Tooling.cpp:518:11
 #29 main clang/tools/clang-check/ClangCheck.cpp:187:15

Added:
    cfe/trunk/test/Tooling/clang-check-fixit.cpp
Modified:
    cfe/trunk/tools/clang-check/ClangCheck.cpp

Added: cfe/trunk/test/Tooling/clang-check-fixit.cpp
URL: 
http://llvm.org/viewvc/llvm-project/cfe/trunk/test/Tooling/clang-check-fixit.cpp?rev=357915&view=auto
==============================================================================
--- cfe/trunk/test/Tooling/clang-check-fixit.cpp (added)
+++ cfe/trunk/test/Tooling/clang-check-fixit.cpp Mon Apr  8 07:18:26 2019
@@ -0,0 +1,25 @@
+// RUN: rm -rf %t
+// RUN: mkdir %t
+//
+// RUN: sed -s 's,^//.*,//,' %s > %t/absolute-fixed.cpp
+// RUN: sed -s 's,^//.*,//,' %s > %t/absolute-json.cpp
+// RUN: sed -s 's,^//.*,//,' %s > %t/relative-fixed.cpp
+// RUN: sed -s 's,^//.*,//,' %s > %t/relative-json.cpp
+//
+// RUN: clang-check %t/absolute-fixed.cpp -fixit -- 2>&1 | FileCheck %s
+//
+// RUN: echo '[{ "directory": "%t", \
+// RUN:   "command": "/path/to/clang -c %t/absolute-json.cpp", \
+// RUN:   "file": "%t/absolute-json.cpp" }]' > %t/compile_commands.json
+// RUN: clang-check %t/absolute-json.cpp -fixit 2>&1 | FileCheck %s
+//
+// RUN: cd %t
+// RUN: clang-check relative-fixed.cpp -fixit -- 2>&1 | FileCheck %s
+//
+// RUN: echo '[{ "directory": "%t", \
+// RUN:   "command": "/path/to/clang -c relative-json.cpp", \
+// RUN:   "file": "relative-json.cpp" }]' > %t/compile_commands.json
+// RUN: clang-check relative-json.cpp -fixit 2>&1 | FileCheck %s
+typedef int T
+// CHECK: .cpp:[[@LINE-1]]:14: error: expected ';' after top level declarator
+// CHECK: .cpp:[[@LINE-2]]:14: note: FIX-IT applied suggested code changes

Modified: cfe/trunk/tools/clang-check/ClangCheck.cpp
URL: 
http://llvm.org/viewvc/llvm-project/cfe/trunk/tools/clang-check/ClangCheck.cpp?rev=357915&r1=357914&r2=357915&view=diff
==============================================================================
--- cfe/trunk/tools/clang-check/ClangCheck.cpp (original)
+++ cfe/trunk/tools/clang-check/ClangCheck.cpp Mon Apr  8 07:18:26 2019
@@ -90,9 +90,6 @@ public:
   }
 
   std::string RewriteFilename(const std::string& filename, int &fd) override {
-    assert(llvm::sys::path::is_absolute(filename) &&
-           "clang-fixit expects absolute paths only.");
-
     // We don't need to do permission checking here since clang will diagnose
     // any I/O errors itself.
 


_______________________________________________
cfe-commits mailing list
cfe-commits@lists.llvm.org
https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits

Reply via email to