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