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