Add support for streaming an OperationName into a Diagnostic.
authorRiver Riddle <riverriddle@google.com>
Mon, 20 May 2019 05:35:01 +0000 (22:35 -0700)
committerMehdi Amini <joker.eph@gmail.com>
Mon, 20 May 2019 20:48:28 +0000 (13:48 -0700)
--

PiperOrigin-RevId: 248987646

mlir/include/mlir/IR/Diagnostics.h
mlir/lib/IR/Diagnostics.cpp
mlir/lib/IR/Operation.cpp
mlir/lib/Target/LLVMIR/ModuleTranslation.cpp

index e580130..32b4241 100644 (file)
@@ -38,6 +38,7 @@ class Identifier;
 struct LogicalResult;
 class MLIRContext;
 class Operation;
+class OperationName;
 class Type;
 
 namespace detail {
@@ -234,6 +235,9 @@ public:
   /// Stream in an Identifier.
   Diagnostic &operator<<(Identifier val);
 
+  /// Stream in an OperationName.
+  Diagnostic &operator<<(OperationName val);
+
   /// Stream in a range.
   template <typename T> Diagnostic &operator<<(llvm::iterator_range<T> range) {
     return appendRange(range);
index 194f427..e509de2 100644 (file)
@@ -123,6 +123,14 @@ Diagnostic &Diagnostic::operator<<(Identifier val) {
   return *this;
 }
 
+/// Stream in an OperationName.
+Diagnostic &Diagnostic::operator<<(OperationName val) {
+  // An OperationName is stored in the context, so we don't need to worry about
+  // the lifetime of its data.
+  arguments.push_back(DiagnosticArgument(val.getStringRef()));
+  return *this;
+}
+
 /// Outputs this diagnostic to a stream.
 void Diagnostic::print(raw_ostream &os) const {
   for (auto &arg : getArguments())
index 47f9b11..0d93acb 100644 (file)
@@ -549,7 +549,7 @@ LogicalResult Operation::fold(ArrayRef<Attribute> operands,
 /// Emit an error with the op name prefixed, like "'dim' op " which is
 /// convenient for verifiers.
 InFlightDiagnostic Operation::emitOpError(const Twine &message) {
-  return emitError() << "'" << getName().getStringRef() << "' op " << message;
+  return emitError() << "'" << getName() << "' op " << message;
 }
 
 //===----------------------------------------------------------------------===//
index 631005b..6f46945 100644 (file)
@@ -210,8 +210,7 @@ bool ModuleTranslation::convertOperation(Operation &opInst,
     return false;
   }
 
-  opInst.emitError("unsupported or non-LLVM operation: " +
-                   opInst.getName().getStringRef());
+  opInst.emitError("unsupported or non-LLVM operation: ") << opInst.getName();
   return true;
 }