llvmbot wrote:

<!--LLVM PR SUMMARY COMMENT-->

@llvm/pr-subscribers-clang-tools-extra

Author: Jacques Pienaar (jpienaar)

<details>
<summary>Changes</summary>

Don't create a fix where object invoked on is a temporary object as create 
method requires a reference.

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


2 Files Affected:

- (modified) clang-tools-extra/clang-tidy/llvm/UseNewMLIROpBuilderCheck.cpp 
(+12-5) 
- (modified) 
clang-tools-extra/test/clang-tidy/checkers/llvm/use-new-mlir-op-builder.cpp 
(+3) 


``````````diff
diff --git a/clang-tools-extra/clang-tidy/llvm/UseNewMLIROpBuilderCheck.cpp 
b/clang-tools-extra/clang-tidy/llvm/UseNewMLIROpBuilderCheck.cpp
index 0b28ea2508977..131c5c32eb780 100644
--- a/clang-tools-extra/clang-tidy/llvm/UseNewMLIROpBuilderCheck.cpp
+++ b/clang-tools-extra/clang-tidy/llvm/UseNewMLIROpBuilderCheck.cpp
@@ -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.
+       makeRule(base, noopEdit(node("call")), message)});
 }
 } // namespace
 
diff --git 
a/clang-tools-extra/test/clang-tidy/checkers/llvm/use-new-mlir-op-builder.cpp 
b/clang-tools-extra/test/clang-tidy/checkers/llvm/use-new-mlir-op-builder.cpp
index 57e026c10bf53..3b8d5da968f7f 100644
--- 
a/clang-tools-extra/test/clang-tidy/checkers/llvm/use-new-mlir-op-builder.cpp
+++ 
b/clang-tools-extra/test/clang-tidy/checkers/llvm/use-new-mlir-op-builder.cpp
@@ -69,4 +69,7 @@ void f() {
   // CHECK-MESSAGES: :[[@LINE+2]]:3: warning: use 'OpType::create(builder, 
...)' instead of 'builder.create<OpType>(...)' [llvm-use-new-mlir-op-builder]
   // CHECK-FIXES: mlir::ModuleOp::create(ib)
   ib.create<mlir::ModuleOp>(   );
+
+  // CHECK-MESSAGES: :[[@LINE+1]]:3: warning: use 'OpType::create(builder, 
...)' instead of 'builder.create<OpType>(...)' [llvm-use-new-mlir-op-builder]
+  mlir::OpBuilder().create<mlir::ModuleOp>(builder.getUnknownLoc());
 }

``````````

</details>


https://github.com/llvm/llvm-project/pull/150757
_______________________________________________
cfe-commits mailing list
cfe-commits@lists.llvm.org
https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits

Reply via email to