diff options
author | Zachary Turner <zturner@google.com> | 2017-10-20 23:00:51 +0000 |
---|---|---|
committer | Zachary Turner <zturner@google.com> | 2017-10-20 23:00:51 +0000 |
commit | fbdca1daec33d715a1bdde9c5708d86c80112c1f (patch) | |
tree | 1737011f249fe4590d537829788dcf9f7efd0b3d | |
parent | 6f4f0f1865756c531c121b0a57b3e05f52152e05 (diff) | |
download | bcm5719-llvm-fbdca1daec33d715a1bdde9c5708d86c80112c1f.tar.gz bcm5719-llvm-fbdca1daec33d715a1bdde9c5708d86c80112c1f.zip |
[clang-tidy] Don't error on MS-style inline assembly.
To get MS-style inline assembly, we need to link in the various
backends. Some other clang tools already do this, and this issue
has been raised with clang-tidy several times, indicating there
is sufficient desire to make this work.
Differential Revision: https://reviews.llvm.org/D38549
llvm-svn: 316246
4 files changed, 22 insertions, 0 deletions
diff --git a/clang-tools-extra/clang-tidy/CMakeLists.txt b/clang-tools-extra/clang-tidy/CMakeLists.txt index 9d6fc7f035a..7efc63b00bd 100644 --- a/clang-tools-extra/clang-tidy/CMakeLists.txt +++ b/clang-tools-extra/clang-tidy/CMakeLists.txt @@ -1,4 +1,7 @@ set(LLVM_LINK_COMPONENTS + AllTargetsAsmParsers + AllTargetsDescs + AllTargetsInfos Support ) diff --git a/clang-tools-extra/clang-tidy/tool/ClangTidyMain.cpp b/clang-tools-extra/clang-tidy/tool/ClangTidyMain.cpp index a57fde87b04..79c0d0b3b38 100644 --- a/clang-tools-extra/clang-tidy/tool/ClangTidyMain.cpp +++ b/clang-tools-extra/clang-tidy/tool/ClangTidyMain.cpp @@ -18,6 +18,7 @@ #include "../ClangTidy.h" #include "clang/Tooling/CommonOptionsParser.h" #include "llvm/Support/Process.h" +#include "llvm/Support/TargetSelect.h" using namespace clang::ast_matchers; using namespace clang::driver; @@ -403,6 +404,10 @@ static int clangTidyMain(int argc, const char **argv) { ProfileData Profile; + llvm::InitializeAllTargetInfos(); + llvm::InitializeAllTargetMCs(); + llvm::InitializeAllAsmParsers(); + ClangTidyContext Context(std::move(OwningOptionsProvider)); runClangTidy(Context, OptionsParser.getCompilations(), PathList, EnableCheckProfile ? &Profile : nullptr); diff --git a/clang-tools-extra/test/clang-tidy/hicpp-no-assembler-msvc.cpp b/clang-tools-extra/test/clang-tidy/hicpp-no-assembler-msvc.cpp new file mode 100644 index 00000000000..f89e92bfcf5 --- /dev/null +++ b/clang-tools-extra/test/clang-tidy/hicpp-no-assembler-msvc.cpp @@ -0,0 +1,9 @@ +// REQUIRES: system-windows +// RUN: %check_clang_tidy %s hicpp-no-assembler %t + +void f() { + _asm { + mov al, 2; + // CHECK-MESSAGES: :[[@LINE-2]]:3: warning: do not use inline assembler in safety-critical code [hicpp-no-assembler] + } +} diff --git a/clang-tools-extra/test/clang-tidy/hicpp-no-assembler.cpp b/clang-tools-extra/test/clang-tidy/hicpp-no-assembler.cpp index d08ea74f6cd..9017331221f 100644 --- a/clang-tools-extra/test/clang-tidy/hicpp-no-assembler.cpp +++ b/clang-tools-extra/test/clang-tidy/hicpp-no-assembler.cpp @@ -9,4 +9,9 @@ static int s asm("spam"); void f() { __asm("mov al, 2"); // CHECK-MESSAGES: :[[@LINE-1]]:3: warning: do not use inline assembler in safety-critical code [hicpp-no-assembler] + + _asm { + mov al, 2; + // CHECK-MESSAGES: :[[@LINE-2]]:3: warning: do not use inline assembler in safety-critical code [hicpp-no-assembler] + } } |