class Identifier;
struct LogicalResult;
class MLIRContext;
+class Operation;
class Type;
namespace detail {
Attribute,
Double,
Integer,
+ Operation,
String,
Type,
Unsigned,
return static_cast<int64_t>(opaqueVal);
}
+ /// Returns this argument as an operation.
+ Operation &getAsOperation() const {
+ assert(getKind() == DiagnosticArgumentKind::Operation);
+ return *reinterpret_cast<Operation *>(opaqueVal);
+ }
+
/// Returns this argument as a string.
StringRef getAsString() const {
assert(getKind() == DiagnosticArgumentKind::String);
sizeof(T) <= sizeof(uint64_t)>::type * = 0)
: kind(DiagnosticArgumentKind::Unsigned), opaqueVal(uint64_t(val)) {}
+ // Construct from an operation reference.
+ explicit DiagnosticArgument(Operation &val) : DiagnosticArgument(&val) {}
+ explicit DiagnosticArgument(Operation *val)
+ : kind(DiagnosticArgumentKind::Operation),
+ opaqueVal(reinterpret_cast<intptr_t>(val)) {
+ assert(val && "expected valid operation");
+ }
+
// Construct from a string reference.
explicit DiagnosticArgument(StringRef val)
: kind(DiagnosticArgumentKind::String), stringVal(val) {}
#include "mlir/IR/Identifier.h"
#include "mlir/IR/Location.h"
#include "mlir/IR/MLIRContext.h"
+#include "mlir/IR/Operation.h"
#include "mlir/IR/Types.h"
#include "llvm/ADT/SmallString.h"
#include "llvm/ADT/StringMap.h"
case DiagnosticArgumentKind::Integer:
os << getAsInteger();
break;
+ case DiagnosticArgumentKind::Operation:
+ os << getAsOperation();
+ break;
case DiagnosticArgumentKind::String:
os << getAsString();
break;