On Sat, Jun 24, 2017 at 10:08 AM Serge Pavlov <sepavl...@gmail.com> wrote:
> With CMAKE_EXPORT_COMPILE_COMMANDS the file compile_commands.json is > created in the directory > <build-dir>/tools/clang/tools/extra/test/clang-tidy/Output, but the tests > from <src-dir>/llvm/tools/clang/tools/extra/test/clang-tidy run in the > directory <build-dir>/tools/clang/tools/extra/test/clang-tidy, which does > not contain json files. So the test passes successfully. Ubuntu 16.04, > cmake 3.5.1. > At least with what I've got, the compile_commands.json ends up in the root of the build dir. That's using cmake 3.7.2 and Ninja 1.7.2. Are you using Ninja or the Makefiles build, perhaps that makes a difference (or the cmake version, perhaps)? > > Thanks, > --Serge > > 2017-06-24 9:42 GMT+07:00 David Blaikie <dblai...@gmail.com>: > >> Ping (+Manuel, perhaps he's got some ideas about this, given background >> in the tooling & compilation database work, or could point this to someone >> who does?) >> >> >> On Thu, Jun 15, 2017 at 10:40 AM David Blaikie <dblai...@gmail.com> >> wrote: >> >>> https://sarcasm.github.io/notes/dev/compilation-database.html#cmake >>> >>> If you enable the CMAKE_EXPORT_COMPILE_COMMANDS option in cmake (& have >>> a sufficiently recent cmake), then CMake will generate a >>> compile_commands.json in the root of the build tree. The test finds this & >>> fails, instead of finding no compilation database & succeeding. >>> >>> (to use this, you can then symlink from the root of the source tree to >>> point to this in your build tree - this is how I get YCM to work for my >>> LLVM builds & could work for other clang tools as well) >>> >>> On Thu, Jun 15, 2017 at 7:51 AM Serge Pavlov <sepavl...@gmail.com> >>> wrote: >>> >>>> 2017-06-15 2:43 GMT+07:00 David Blaikie <dblai...@gmail.com>: >>>> >>>>> >>>>> >>>>> On Wed, Jun 14, 2017, 8:17 AM Serge Pavlov <sepavl...@gmail.com> >>>>> wrote: >>>>> >>>>>> 2017-06-14 4:24 GMT+07:00 David Blaikie <dblai...@gmail.com>: >>>>>> >>>>>>> Ah, I find that the test passes if I remove the >>>>>>> compile_commands.json file from my build directory (I have Ninja >>>>>>> configured >>>>>>> to generate a compile_commands.json file). >>>>>>> >>>>>>> Looks like what happens is it finds the compilation database and >>>>>>> fails hard when the database doesn't contain a compile command for the >>>>>>> file >>>>>>> in question. If the database is not found, it falls back to some basic >>>>>>> command behavior, perhaps? >>>>>>> >>>>>>> >>>>>> You are right, constructor of `CommonOptionsParser` calls >>>>>> `autoDetectFromSource` or `autoDetectFromDirectory` prior to final >>>>>> construction of `FixedCompilationDatabase. >>>>>> >>>>>> Is there some way this test could be fixed to cope with this, >>>>>>> otherwise it seems to get in the way of people actually using clang >>>>>>> tools >>>>>>> in their LLVM/Clang build environment? >>>>>>> >>>>>>> >>>>>> IIUC, presence of stale compilation database file in test directory >>>>>> could break many tests. I don't understand why only diagnostic.cpp fails, >>>>>> probably there is something wrong with the clang-tidy application cleanup >>>>>> in this case? >>>>>> >>>>> >>>>> Except it's neither stale nor in the test directory. >>>>> >>>>> It's the up to date/useful/used compile_commands.json generated by >>>>> ninja in the root of the build tree. >>>>> >>>> >>>> I miss something. If I could reproduce the problem, I would investigate >>>> it. >>>> >>>> >>>>> >>>>> >>>>>> >>>>>>> On Tue, Jun 13, 2017 at 7:41 AM Serge Pavlov <sepavl...@gmail.com> >>>>>>> wrote: >>>>>>> >>>>>>>> I cannot reproduce such fail, so I can only guess how changes made >>>>>>>> in https://reviews.llvm.org/rL303756 and >>>>>>>> https://reviews.llvm.org/rL303741 could cause such problem. >>>>>>>> Behavior of `Driver::BuildCompilation` is changed so that it returns >>>>>>>> null >>>>>>>> pointer if errors occur during driver argument parse. It is called in >>>>>>>> `CompilationDatabase.cpp` from `stripPositionalArgs`. The call stack at >>>>>>>> this point is: >>>>>>>> stripPositionalArgs >>>>>>>> clang::tooling::FixedCompilationDatabase::loadFromCommandLine >>>>>>>> clang::tooling::CommonOptionsParser::CommonOptionsParser >>>>>>>> clang::tidy::clangTidyMain >>>>>>>> main >>>>>>>> `FixedCompilationDatabase::loadFromCommandLine` returns null and >>>>>>>> CommonOptionsParser uses another method to create compilation >>>>>>>> database. The >>>>>>>> output "Compile command not found" means that no input file were found >>>>>>>> in >>>>>>>> `ClangTool::run`. Maybe some file names are nulls? >>>>>>>> >>>>>>>> >>>>>>>> Thanks, >>>>>>>> --Serge >>>>>>>> >>>>>>>> 2017-06-13 3:42 GMT+07:00 David Blaikie <dblai...@gmail.com>: >>>>>>>> >>>>>>>>> I've been seeing errors from this test recently: >>>>>>>>> >>>>>>>>> Command Output (stderr): >>>>>>>>> -- >>>>>>>>> 1 error generated. >>>>>>>>> Error while processing >>>>>>>>> /usr/local/google/home/blaikie/dev/llvm/src/tools/clang/tools/extra/test/clang-tidy/diagnostic.cpp.nonexistent.cpp. >>>>>>>>> /usr/local/google/home/blaikie/dev/llvm/src/tools/clang/tools/extra/test/clang-tidy/diagnostic.cpp:10:12: >>>>>>>>> error: expected string not found in input >>>>>>>>> // CHECK2: :[[@LINE+2]]:9: warning: implicit conversion from >>>>>>>>> 'double' to 'int' changes value from 1.5 to 1 >>>>>>>>> [clang-diagnostic-literal-conversion] >>>>>>>>> ^ >>>>>>>>> <stdin>:2:1: note: scanning from here >>>>>>>>> Skipping >>>>>>>>> /usr/local/google/home/blaikie/dev/llvm/src/tools/clang/tools/extra/test/clang-tidy/diagnostic.cpp. >>>>>>>>> Compile command not found. >>>>>>>>> ^ >>>>>>>>> <stdin>:2:1: note: with expression "@LINE+2" equal to "12" >>>>>>>>> Skipping >>>>>>>>> /usr/local/google/home/blaikie/dev/llvm/src/tools/clang/tools/extra/test/clang-tidy/diagnostic.cpp. >>>>>>>>> Compile command not found. >>>>>>>>> ^ >>>>>>>>> >>>>>>>>> >>>>>>>>> Specifically, the output is: >>>>>>>>> $ ./bin/clang-tidy >>>>>>>>> -checks='-*,clang-diagnostic-*,google-explicit-constructor' >>>>>>>>> /usr/local/google/home/blaikie/dev/llvm/src/tools/clang/tools/extra/test/clang-tidy/diagnostic.cpp >>>>>>>>> -- -fan-unknown-option 2>&1 error: unknown >>>>>>>>> argument: '-fan-unknown-option' >>>>>>>>> Skipping >>>>>>>>> /usr/local/google/home/blaikie/dev/llvm/src/tools/clang/tools/extra/test/clang-tidy/diagnostic.cpp. >>>>>>>>> Compile command not found. >>>>>>>>> >>>>>>>>> >>>>>>>>> Does this look like it might be related to any of your changes in >>>>>>>>> this area? Perhaps the error due to unknown argument is causing >>>>>>>>> clang-tidy >>>>>>>>> not to continue on to run the check & report the warning? >>>>>>>>> >>>>>>>>> >>>>>>>>> On Wed, May 24, 2017 at 3:51 AM Serge Pavlov via cfe-commits < >>>>>>>>> cfe-commits@lists.llvm.org> wrote: >>>>>>>>> >>>>>>>>>> Author: sepavloff >>>>>>>>>> Date: Wed May 24 05:50:56 2017 >>>>>>>>>> New Revision: 303735 >>>>>>>>>> >>>>>>>>>> URL: http://llvm.org/viewvc/llvm-project?rev=303735&view=rev >>>>>>>>>> Log: >>>>>>>>>> Modify test so that it looks for patterns in stderr as well >>>>>>>>>> >>>>>>>>>> With the change https://reviews.llvm.org/D33013 driver will not >>>>>>>>>> build >>>>>>>>>> compilation object if command line is invalid, in particular, if >>>>>>>>>> unrecognized option is provided. In such cases it will prints >>>>>>>>>> diagnostics >>>>>>>>>> on stderr. The test 'clang-tidy/diagnostic.cpp' checks reaction on >>>>>>>>>> unrecognized option and will fail when D33013 is applied because >>>>>>>>>> it checks >>>>>>>>>> only stdout for test patterns and expects the name of diagnostic >>>>>>>>>> category >>>>>>>>>> prepared by clang-tidy. With this change the test makes more >>>>>>>>>> general check >>>>>>>>>> and must work in either case. >>>>>>>>>> >>>>>>>>>> Differential Revision: https://reviews.llvm.org/D33173 >>>>>>>>>> >>>>>>>>>> Modified: >>>>>>>>>> clang-tools-extra/trunk/test/clang-tidy/diagnostic.cpp >>>>>>>>>> >>>>>>>>>> Modified: clang-tools-extra/trunk/test/clang-tidy/diagnostic.cpp >>>>>>>>>> URL: >>>>>>>>>> http://llvm.org/viewvc/llvm-project/clang-tools-extra/trunk/test/clang-tidy/diagnostic.cpp?rev=303735&r1=303734&r2=303735&view=diff >>>>>>>>>> >>>>>>>>>> ============================================================================== >>>>>>>>>> --- clang-tools-extra/trunk/test/clang-tidy/diagnostic.cpp >>>>>>>>>> (original) >>>>>>>>>> +++ clang-tools-extra/trunk/test/clang-tidy/diagnostic.cpp Wed >>>>>>>>>> May 24 05:50:56 2017 >>>>>>>>>> @@ -1,11 +1,11 @@ >>>>>>>>>> // RUN: clang-tidy -checks='-*,modernize-use-override' >>>>>>>>>> %s.nonexistent.cpp -- | FileCheck -check-prefix=CHECK1 >>>>>>>>>> -implicit-check-not='{{warning:|error:}}' %s >>>>>>>>>> -// RUN: clang-tidy >>>>>>>>>> -checks='-*,clang-diagnostic-*,google-explicit-constructor' %s -- >>>>>>>>>> -fan-unknown-option | FileCheck -check-prefix=CHECK2 >>>>>>>>>> -implicit-check-not='{{warning:|error:}}' %s >>>>>>>>>> -// RUN: clang-tidy >>>>>>>>>> -checks='-*,google-explicit-constructor,clang-diagnostic-literal-conversion' >>>>>>>>>> %s -- -fan-unknown-option | FileCheck -check-prefix=CHECK3 >>>>>>>>>> -implicit-check-not='{{warning:|error:}}' %s >>>>>>>>>> +// RUN: clang-tidy >>>>>>>>>> -checks='-*,clang-diagnostic-*,google-explicit-constructor' %s -- >>>>>>>>>> -fan-unknown-option 2>&1 | FileCheck -check-prefix=CHECK2 >>>>>>>>>> -implicit-check-not='{{warning:|error:}}' %s >>>>>>>>>> +// RUN: clang-tidy >>>>>>>>>> -checks='-*,google-explicit-constructor,clang-diagnostic-literal-conversion' >>>>>>>>>> %s -- -fan-unknown-option 2>&1 | FileCheck -check-prefix=CHECK3 >>>>>>>>>> -implicit-check-not='{{warning:|error:}}' %s >>>>>>>>>> // RUN: clang-tidy >>>>>>>>>> -checks='-*,modernize-use-override,clang-diagnostic-macro-redefined' >>>>>>>>>> %s -- >>>>>>>>>> -DMACRO_FROM_COMMAND_LINE | FileCheck -check-prefix=CHECK4 >>>>>>>>>> -implicit-check-not='{{warning:|error:}}' %s >>>>>>>>>> >>>>>>>>>> // CHECK1: error: error reading '{{.*}}.nonexistent.cpp' >>>>>>>>>> [clang-diagnostic-error] >>>>>>>>>> -// CHECK2: error: unknown argument: '-fan-unknown-option' >>>>>>>>>> [clang-diagnostic-error] >>>>>>>>>> -// CHECK3: error: unknown argument: '-fan-unknown-option' >>>>>>>>>> [clang-diagnostic-error] >>>>>>>>>> +// CHECK2: error: unknown argument: '-fan-unknown-option' >>>>>>>>>> +// CHECK3: error: unknown argument: '-fan-unknown-option' >>>>>>>>>> >>>>>>>>>> // CHECK2: :[[@LINE+2]]:9: warning: implicit conversion from >>>>>>>>>> 'double' to 'int' changes value from 1.5 to 1 >>>>>>>>>> [clang-diagnostic-literal-conversion] >>>>>>>>>> // CHECK3: :[[@LINE+1]]:9: warning: implicit conversion from >>>>>>>>>> 'double' to 'int' changes value >>>>>>>>>> >>>>>>>>>> >>>>>>>>>> _______________________________________________ >>>>>>>>>> cfe-commits mailing list >>>>>>>>>> cfe-commits@lists.llvm.org >>>>>>>>>> http://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits >>>>>>>>>> >>>>>>>>> >>>>>>>> >
_______________________________________________ cfe-commits mailing list cfe-commits@lists.llvm.org http://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits