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