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.
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