[clang-tools-extra] [clang-tidy][mlir] Make rewrite more conservative. (PR #150757)

Jacques Pienaar via cfe-commits cfe-commits at lists.llvm.org
Sat Jul 26 06:25:02 PDT 2025


================
@@ -111,17 +111,24 @@ 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 to rewrite with a concrete builder.
+       makeRule(cxxMemberCallExpr(unless(on(cxxTemporaryObjectExpr())), base),
+                rewrite(node("call"), node("builder"), callArgs("call")),
+                message),
+       // Warn on calls on temporary objects only.
----------------
jpienaar wrote:

Yes this is meant as "Warn only" on temporary as in, don't attempt rewrite. I can perhaps combine both comments to one as you wrote.

https://github.com/llvm/llvm-project/pull/150757


More information about the cfe-commits mailing list