Thanks!

On 04/19/2018 03:39 PM, Haojian Wu wrote:
Thanks! I didn't see this warning when running check-clang-tools on my machine. Fixed in r330327.

On Thu, Apr 19, 2018 at 7:39 AM, Mikael Holmén <mikael.hol...@ericsson.com <mailto:mikael.hol...@ericsson.com>> wrote:

    Hi,


    On 04/18/2018 10:54 AM, Haojian Wu via cfe-commits wrote:

        Author: hokein
        Date: Wed Apr 18 01:54:28 2018
        New Revision: 330245

        URL: http://llvm.org/viewvc/llvm-project?rev=330245&view=rev
        <http://llvm.org/viewvc/llvm-project?rev=330245&view=rev>
        Log:
        [clang-tidy] Fix clang-tidy doesn't read .clangtidy
        configuration file.

        Summary: Fix https://bugs.llvm.org/show_bug.cgi?id=34900
        <https://bugs.llvm.org/show_bug.cgi?id=34900>.

        Reviewers: alexfh

        Reviewed By: alexfh

        Subscribers: JonasToth, klimek, xazax.hun, cfe-commits

        Differential Revision: https://reviews.llvm.org/D45697
        <https://reviews.llvm.org/D45697>

        Added:
              clang-tools-extra/trunk/test/clang-tidy/read_file_config.cpp
        Modified:
              clang-tools-extra/trunk/clang-tidy/ClangTidyOptions.cpp
              clang-tools-extra/trunk/clang-tidy/ClangTidyOptions.h
              clang-tools-extra/trunk/clang-tidy/tool/ClangTidyMain.cpp

        Modified: clang-tools-extra/trunk/clang-tidy/ClangTidyOptions.cpp
        URL:
        
http://llvm.org/viewvc/llvm-project/clang-tools-extra/trunk/clang-tidy/ClangTidyOptions.cpp?rev=330245&r1=330244&r2=330245&view=diff
        
<http://llvm.org/viewvc/llvm-project/clang-tools-extra/trunk/clang-tidy/ClangTidyOptions.cpp?rev=330245&r1=330244&r2=330245&view=diff>
        
==============================================================================
        --- clang-tools-extra/trunk/clang-tidy/ClangTidyOptions.cpp
        (original)
        +++ clang-tools-extra/trunk/clang-tidy/ClangTidyOptions.cpp Wed
        Apr 18 01:54:28 2018
        @@ -204,9 +204,12 @@ ConfigOptionsProvider::getRawOptions(llv
           FileOptionsProvider::FileOptionsProvider(
               const ClangTidyGlobalOptions &GlobalOptions,
               const ClangTidyOptions &DefaultOptions,
        -    const ClangTidyOptions &OverrideOptions)
        +    const ClangTidyOptions &OverrideOptions,
        +    llvm::IntrusiveRefCntPtr<vfs::FileSystem> VFS)
               : DefaultOptionsProvider(GlobalOptions, DefaultOptions),
        -      OverrideOptions(OverrideOptions) {
        +      OverrideOptions(OverrideOptions), FS(std::move(VFS)) {
        +  if (!FS)
        +    FS = vfs::getRealFileSystem();
             ConfigHandlers.emplace_back(".clang-tidy", parseConfiguration);
           }
           @@ -224,14 +227,19 @@ FileOptionsProvider::FileOptionsProvider
           std::vector<OptionsSource>
           FileOptionsProvider::getRawOptions(StringRef FileName) {
             DEBUG(llvm::dbgs() << "Getting options for file " <<
        FileName << "...\n");
        +  assert(FS && "FS must be set.");
        +
        +  llvm::SmallString<128> AbsoluteFilePath(FileName);
        +  if (std::error_code ec = FS->makeAbsolute(AbsoluteFilePath))
        +    return {};


    This causes a compilation warning:

    ../tools/clang/tools/extra/clang-tidy/ClangTidyOptions.cpp:233:23:
    error: unused variable 'ec' [-Werror,-Wunused-variable]
       if (std::error_code ec = FS->makeAbsolute(AbsoluteFilePath))
                           ^
    1 error generated.

    Regards,
    Mikael



             std::vector<OptionsSource> RawOptions =
        -      DefaultOptionsProvider::getRawOptions(FileName);
+ DefaultOptionsProvider::getRawOptions(AbsoluteFilePath.str());
             OptionsSource CommandLineOptions(OverrideOptions,
        OptionsSourceTypeCheckCommandLineOption);
             // Look for a suitable configuration file in all parent
        directories of the
             // file. Start with the immediate parent directory and move up.
        -  StringRef Path = llvm::sys::path::parent_path(FileName);
        +  StringRef Path =
        llvm::sys::path::parent_path(AbsoluteFilePath.str());
             for (StringRef CurrentPath = Path; !CurrentPath.empty();
                  CurrentPath = llvm::sys::path::parent_path(CurrentPath)) {
               llvm::Optional<OptionsSource> Result;

        Modified: clang-tools-extra/trunk/clang-tidy/ClangTidyOptions.h
        URL:
        
http://llvm.org/viewvc/llvm-project/clang-tools-extra/trunk/clang-tidy/ClangTidyOptions.h?rev=330245&r1=330244&r2=330245&view=diff
        
<http://llvm.org/viewvc/llvm-project/clang-tools-extra/trunk/clang-tidy/ClangTidyOptions.h?rev=330245&r1=330244&r2=330245&view=diff>
        
==============================================================================
        --- clang-tools-extra/trunk/clang-tidy/ClangTidyOptions.h (original)
        +++ clang-tools-extra/trunk/clang-tidy/ClangTidyOptions.h Wed
        Apr 18 01:54:28 2018
        @@ -13,7 +13,9 @@
           #include "llvm/ADT/Optional.h"
           #include "llvm/ADT/StringMap.h"
           #include "llvm/ADT/StringRef.h"
        +#include "llvm/ADT/IntrusiveRefCntPtr.h"
           #include "llvm/Support/ErrorOr.h"
        +#include "clang/Basic/VirtualFileSystem.h"
           #include <functional>
           #include <map>
           #include <string>
        @@ -221,7 +223,8 @@ public:
             /// whatever options are read from the configuration file.
             FileOptionsProvider(const ClangTidyGlobalOptions
        &GlobalOptions,
                                 const ClangTidyOptions &DefaultOptions,
        -                      const ClangTidyOptions &OverrideOptions);
        +                      const ClangTidyOptions &OverrideOptions,
        +                      llvm::IntrusiveRefCntPtr<vfs::FileSystem>
        FS = nullptr);
               /// \brief Initializes the \c FileOptionsProvider
        instance with a custom set
             /// of configuration file handlers.
        @@ -255,6 +258,7 @@ protected:
             llvm::StringMap<OptionsSource> CachedOptions;
             ClangTidyOptions OverrideOptions;
             ConfigFileHandlers ConfigHandlers;
        +  llvm::IntrusiveRefCntPtr<vfs::FileSystem> FS;
           };
             /// \brief Parses LineFilter from JSON and stores it to the
        \p Options.

        Modified: clang-tools-extra/trunk/clang-tidy/tool/ClangTidyMain.cpp
        URL:
        
http://llvm.org/viewvc/llvm-project/clang-tools-extra/trunk/clang-tidy/tool/ClangTidyMain.cpp?rev=330245&r1=330244&r2=330245&view=diff
        
<http://llvm.org/viewvc/llvm-project/clang-tools-extra/trunk/clang-tidy/tool/ClangTidyMain.cpp?rev=330245&r1=330244&r2=330245&view=diff>
        
==============================================================================
        --- clang-tools-extra/trunk/clang-tidy/tool/ClangTidyMain.cpp
        (original)
        +++ clang-tools-extra/trunk/clang-tidy/tool/ClangTidyMain.cpp
        Wed Apr 18 01:54:28 2018
        @@ -286,7 +286,8 @@ static void printProfileData(const Profi
             OS.flush();
           }
           -static std::unique_ptr<ClangTidyOptionsProvider>
        createOptionsProvider() {
        +static std::unique_ptr<ClangTidyOptionsProvider>
        createOptionsProvider(
        +   llvm::IntrusiveRefCntPtr<vfs::FileSystem> FS) {
             ClangTidyGlobalOptions GlobalOptions;
             if (std::error_code Err = parseLineFilter(LineFilter,
        GlobalOptions)) {
               llvm::errs() << "Invalid LineFilter: " << Err.message()
        << "\n\nUsage:\n";
        @@ -334,7 +335,7 @@ static std::unique_ptr<ClangTidyOptionsP
               }
             }
             return
        llvm::make_unique<FileOptionsProvider>(GlobalOptions,
        DefaultOptions,
        -                                                OverrideOptions);
+ OverrideOptions, std::move(FS));
           }
             llvm::IntrusiveRefCntPtr<vfs::FileSystem>
        @@ -364,8 +365,13 @@ getVfsOverlayFromFile(const std::string
           static int clangTidyMain(int argc, const char **argv) {
             CommonOptionsParser OptionsParser(argc, argv,
        ClangTidyCategory,
                                               cl::ZeroOrMore);
        +  llvm::IntrusiveRefCntPtr<vfs::FileSystem> BaseFS(
        +      VfsOverlay.empty() ? vfs::getRealFileSystem()
        +                         : getVfsOverlayFromFile(VfsOverlay));
        +  if (!BaseFS)
        +    return 1;
           -  auto OwningOptionsProvider = createOptionsProvider();
        +  auto OwningOptionsProvider = createOptionsProvider(BaseFS);
             auto *OptionsProvider = OwningOptionsProvider.get();
             if (!OptionsProvider)
               return 1;
        @@ -432,12 +438,6 @@ static int clangTidyMain(int argc, const
               llvm::cl::PrintHelpMessage(/*Hidden=*/false,
        /*Categorized=*/true);
               return 1;
             }
        -  llvm::IntrusiveRefCntPtr<vfs::FileSystem> BaseFS(
        -      VfsOverlay.empty() ? vfs::getRealFileSystem()
        -                         : getVfsOverlayFromFile(VfsOverlay));
        -  if (!BaseFS)
        -    return 1;
        -
             ProfileData Profile;
               llvm::InitializeAllTargetInfos();

        Added: clang-tools-extra/trunk/test/clang-tidy/read_file_config.cpp
        URL:
        
http://llvm.org/viewvc/llvm-project/clang-tools-extra/trunk/test/clang-tidy/read_file_config.cpp?rev=330245&view=auto
        
<http://llvm.org/viewvc/llvm-project/clang-tools-extra/trunk/test/clang-tidy/read_file_config.cpp?rev=330245&view=auto>
        
==============================================================================
        --- clang-tools-extra/trunk/test/clang-tidy/read_file_config.cpp
        (added)
        +++ clang-tools-extra/trunk/test/clang-tidy/read_file_config.cpp
        Wed Apr 18 01:54:28 2018
        @@ -0,0 +1,12 @@
        +// RUN: mkdir -p %T/read-file-config/
        +// RUN: cp %s %T/read-file-config/test.cpp
        +// RUN: echo 'Checks: "-*,modernize-use-nullptr"' >
        %T/read-file-config/.clang-tidy
        +// RUN: echo '[{"command": "cc -c -o test.o test.cpp",
        "directory": "%T/read-file-config", "file":
        "%T/read-file-config/test.cpp"}]' >
        %T/read-file-config/compile_commands.json
        +// RUN: clang-tidy %T/read-file-config/test.cpp | not grep
        "warning: .*\[clang-analyzer-deadcode.DeadStores\]$"
        +// RUN: clang-tidy -checks="-*,clang-analyzer-*"
        %T/read-file-config/test.cpp | grep "warning:
        .*\[clang-analyzer-deadcode.DeadStores\]$"
        +
        +void f() {
        +  int x;
        +  x = 1;
        +  x = 2;
        +}


        _______________________________________________
        cfe-commits mailing list
        cfe-commits@lists.llvm.org <mailto:cfe-commits@lists.llvm.org>
        http://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits
        <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

Reply via email to