[clang-tools-extra] r303735 - Modify test so that it looks for patterns in stderr as well

David Blaikie via cfe-commits cfe-commits at lists.llvm.org
Fri Jun 23 19:42:35 PDT 2017


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 <dblaikie at 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 <sepavloff at gmail.com> wrote:
>
>> 2017-06-15 2:43 GMT+07:00 David Blaikie <dblaikie at gmail.com>:
>>
>>>
>>>
>>> On Wed, Jun 14, 2017, 8:17 AM Serge Pavlov <sepavloff at gmail.com> wrote:
>>>
>>>> 2017-06-14 4:24 GMT+07:00 David Blaikie <dblaikie at 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 <sepavloff at 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 <dblaikie at 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 at 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 at lists.llvm.org
>>>>>>>> http://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits
>>>>>>>>
>>>>>>>
>>>>>>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.llvm.org/pipermail/cfe-commits/attachments/20170624/bd1420ee/attachment.html>


More information about the cfe-commits mailing list