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? > 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-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@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