[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
Wed Jun 14 12:43:54 PDT 2017


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.


>
>> 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/20170614/e3c86f57/attachment.html>


More information about the cfe-commits mailing list