2017-06-25 0:52 GMT+07:00 David Blaikie <dblai...@gmail.com>:

>
>
> 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,
>>
>>
>
> I'd be really surprised if this is the case - why would
> cmake/ninja/makefiles put the compile commands for the whole LLVM
> project/build in that somewhat random subdirectory?
>

I was wrong, these json files were not created by cmake run but appear
during test run. The file created by cmake is in the build root.


>
>
>> 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.
>>
>
> Ah, perhaps you found a compile_commands for one of the test cases, not
> the one generated by CMake. CMake 3.5.1 doesn't support
> CMAKE_EXPORT_COMPILE_COMMANDS.
>
> It was added in 3.5.2, according to the documentation: https://cmake.
> org/cmake/help/v3.5/variable/CMAKE_EXPORT_COMPILE_COMMANDS.html
>
>

It was added in 2.8.5 according to documentation (
http://clang.llvm.org/docs/JSONCompilationDatabase.html#supported-systems),
at least the version 3.5.1 creates compilation databases.

clang-tidy tries to create compilation database from source path, looking
for compile_commands.json in the directory where provided source file
resides and in all its parent directories. If source tree is in a
subdirectory of build tree, then compile_commands.json in the build
directory would be found and the test would fail. Is it your case?


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

Reply via email to