diff options
Diffstat (limited to 'clang-tools-extra/clang-tidy/llvm')
-rw-r--r-- | clang-tools-extra/clang-tidy/llvm/CMakeLists.txt | 2 | ||||
-rw-r--r-- | clang-tools-extra/clang-tidy/llvm/UseNewMLIROpBuilderCheck.cpp | 16 |
2 files changed, 12 insertions, 6 deletions
diff --git a/clang-tools-extra/clang-tidy/llvm/CMakeLists.txt b/clang-tools-extra/clang-tidy/llvm/CMakeLists.txt index 4f1da43..41386cd 100644 --- a/clang-tools-extra/clang-tidy/llvm/CMakeLists.txt +++ b/clang-tools-extra/clang-tidy/llvm/CMakeLists.txt @@ -17,7 +17,6 @@ add_clang_library(clangTidyLLVMModule STATIC clangTidy clangTidyReadabilityModule clangTidyUtils - clangTransformer DEPENDS omp_gen @@ -31,4 +30,5 @@ clang_target_link_libraries(clangTidyLLVMModule clangBasic clangLex clangTooling + clangTransformer ) diff --git a/clang-tools-extra/clang-tidy/llvm/UseNewMLIROpBuilderCheck.cpp b/clang-tools-extra/clang-tidy/llvm/UseNewMLIROpBuilderCheck.cpp index 0b28ea2..4722199 100644 --- a/clang-tools-extra/clang-tidy/llvm/UseNewMLIROpBuilderCheck.cpp +++ b/clang-tools-extra/clang-tidy/llvm/UseNewMLIROpBuilderCheck.cpp @@ -111,17 +111,23 @@ EditGenerator rewrite(RangeSelector Call, RangeSelector Builder, } RewriteRuleWith<std::string> useNewMlirOpBuilderCheckRule() { - return makeRule( + Stencil message = cat("use 'OpType::create(builder, ...)' instead of " + "'builder.create<OpType>(...)'"); + // Match a create call on an OpBuilder. + ast_matchers::internal::Matcher<Stmt> base = cxxMemberCallExpr( on(expr(hasType( cxxRecordDecl(isSameOrDerivedFrom("::mlir::OpBuilder")))) .bind("builder")), callee(cxxMethodDecl(hasTemplateArgument(0, templateArgument()))), callee(cxxMethodDecl(hasName("create")))) - .bind("call"), - rewrite(node("call"), node("builder"), callArgs("call")), - cat("use 'OpType::create(builder, ...)' instead of " - "'builder.create<OpType>(...)'")); + .bind("call"); + return applyFirst( + // Attempt rewrite given an lvalue builder, else just warn. + {makeRule(cxxMemberCallExpr(unless(on(cxxTemporaryObjectExpr())), base), + rewrite(node("call"), node("builder"), callArgs("call")), + message), + makeRule(base, noopEdit(node("call")), message)}); } } // namespace |