https://github.com/ChuanqiXu9 updated https://github.com/llvm/llvm-project/pull/145630
>From b54a054a957c7b7d59cd8783230a7683f997636d Mon Sep 17 00:00:00 2001 From: Chuanqi Xu <[email protected]> Date: Wed, 17 Jan 2024 13:22:10 +0800 Subject: [PATCH] [clang-tidy] [Modules] Skip checking decls in clang-tidy --- clang-tools-extra/clang-tidy/ClangTidy.cpp | 3 ++ .../infrastructure/cxx20-modules.cppm | 29 +++++++++++++++++++ clang-tools-extra/test/lit.cfg.py | 1 + .../clang/ASTMatchers/ASTMatchFinder.h | 2 ++ clang/lib/ASTMatchers/ASTMatchFinder.cpp | 4 +++ 5 files changed, 39 insertions(+) create mode 100644 clang-tools-extra/test/clang-tidy/infrastructure/cxx20-modules.cppm diff --git a/clang-tools-extra/clang-tidy/ClangTidy.cpp b/clang-tools-extra/clang-tidy/ClangTidy.cpp index 60f4823d930c1..0e5f8fbda631a 100644 --- a/clang-tools-extra/clang-tidy/ClangTidy.cpp +++ b/clang-tools-extra/clang-tidy/ClangTidy.cpp @@ -434,6 +434,9 @@ ClangTidyASTConsumerFactory::createASTConsumer(CompilerInstance &Compiler, ast_matchers::MatchFinder::MatchFinderOptions FinderOptions; + // We should always skip the declarations in modules. + FinderOptions.SkipDeclsInModules = true; + std::unique_ptr<ClangTidyProfiling> Profiling; if (Context.getEnableProfiling()) { Profiling = diff --git a/clang-tools-extra/test/clang-tidy/infrastructure/cxx20-modules.cppm b/clang-tools-extra/test/clang-tidy/infrastructure/cxx20-modules.cppm new file mode 100644 index 0000000000000..663df0104fd0a --- /dev/null +++ b/clang-tools-extra/test/clang-tidy/infrastructure/cxx20-modules.cppm @@ -0,0 +1,29 @@ +// RUN: rm -fr %t +// RUN: mkdir %t +// RUN: split-file %s %t +// RUN: mkdir %t/tmp +// +// RUN: %check_clang_tidy -std=c++20 -check-suffix=DEFAULT %t/a.cpp \ +// RUN: cppcoreguidelines-narrowing-conversions %t/a.cpp -- \ +// RUN: -config='{}' + +// RUN: clang -std=c++20 -x c++-module %t/a.cpp --precompile -o %t/a.pcm + +// RUN: %check_clang_tidy -std=c++20 -check-suffix=DEFAULT %t/use.cpp \ +// RUN: cppcoreguidelines-narrowing-conversions %t/a.cpp -- \ +// RUN: -config='{}' -- -fmodule-file=a=%t/a.pcm + +//--- a.cpp +export module a; +export void most_narrowing_is_not_ok() { + int i; + long long ui; + i = ui; + // CHECK-MESSAGES-DEFAULT: :[[@LINE-1]]:7: warning: narrowing conversion from 'long long' to signed type 'int' is implementation-defined [cppcoreguidelines-narrowing-conversions] +} + +//--- use.cpp +import a; +void use() { + most_narrowing_is_not_ok(); +} diff --git a/clang-tools-extra/test/lit.cfg.py b/clang-tools-extra/test/lit.cfg.py index c39ea29329674..c075650ff7a73 100644 --- a/clang-tools-extra/test/lit.cfg.py +++ b/clang-tools-extra/test/lit.cfg.py @@ -27,6 +27,7 @@ config.suffixes = [ ".c", ".cpp", + ".cppm", ".hpp", ".m", ".mm", diff --git a/clang/include/clang/ASTMatchers/ASTMatchFinder.h b/clang/include/clang/ASTMatchers/ASTMatchFinder.h index 2d36e8c4fae1c..b0ccbf22a4269 100644 --- a/clang/include/clang/ASTMatchers/ASTMatchFinder.h +++ b/clang/include/clang/ASTMatchers/ASTMatchFinder.h @@ -144,6 +144,8 @@ class MatchFinder { /// Avoids matching declarations in system headers. bool IgnoreSystemHeaders{false}; + + bool SkipDeclsInModules{false}; }; MatchFinder(MatchFinderOptions Options = MatchFinderOptions()); diff --git a/clang/lib/ASTMatchers/ASTMatchFinder.cpp b/clang/lib/ASTMatchers/ASTMatchFinder.cpp index 83ffae65c67d4..004a02c279099 100644 --- a/clang/lib/ASTMatchers/ASTMatchFinder.cpp +++ b/clang/lib/ASTMatchers/ASTMatchFinder.cpp @@ -20,6 +20,7 @@ #include "clang/AST/ASTContext.h" #include "clang/AST/DeclCXX.h" #include "clang/AST/RecursiveASTVisitor.h" +#include "clang/Basic/Module.h" #include "llvm/ADT/DenseMap.h" #include "llvm/ADT/SmallPtrSet.h" #include "llvm/ADT/StringMap.h" @@ -1511,6 +1512,9 @@ bool MatchASTVisitor::TraverseDecl(Decl *DeclNode) { if (shouldSkipNode(DeclNode)) return true; + if (Options.SkipDeclsInModules && DeclNode->isInAnotherModuleUnit()) + return true; + bool ScopedTraversal = TraversingASTNodeNotSpelledInSource || DeclNode->isImplicit(); bool ScopedChildren = TraversingASTChildrenNotSpelledInSource; _______________________________________________ cfe-commits mailing list [email protected] https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits
