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

Serge Pavlov via cfe-commits cfe-commits at lists.llvm.org
Wed Jun 14 08:17:29 PDT 2017


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?


> 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-co
>>>> nstructor,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-co
>>>> nstructor,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-over
>>>> ride,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-conv
>>>> ersion]
>>>>  // 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/62a570bc/attachment-0001.html>


More information about the cfe-commits mailing list