[PATCH] D80651: Harden MLIR detection of misconfiguration when missing dialect registration
Mehdi AMINI via Phabricator via llvm-commits
llvm-commits at lists.llvm.org
Wed May 27 20:11:56 PDT 2020
mehdi_amini updated this revision to Diff 266721.
mehdi_amini added a comment.
Add unreachable for the cast<OpTy>
Repository:
rG LLVM Github Monorepo
CHANGES SINCE LAST ACTION
https://reviews.llvm.org/D80651/new/
https://reviews.llvm.org/D80651
Files:
mlir/include/mlir/IR/Builders.h
mlir/include/mlir/IR/OpDefinition.h
mlir/lib/IR/MLIRContext.cpp
Index: mlir/lib/IR/MLIRContext.cpp
===================================================================
--- mlir/lib/IR/MLIRContext.cpp
+++ mlir/lib/IR/MLIRContext.cpp
@@ -621,8 +621,9 @@
static Dialect &lookupDialectForSymbol(MLIRContext *ctx, TypeID typeID) {
auto &impl = ctx->getImpl();
auto it = impl.registeredDialectSymbols.find(typeID);
- assert(it != impl.registeredDialectSymbols.end() &&
- "symbol is not registered.");
+ if (it == impl.registeredDialectSymbols.end())
+ llvm::report_fatal_error(
+ "Trying to create a type that was not registered in this MLIRContext.");
return *it->second;
}
Index: mlir/include/mlir/IR/OpDefinition.h
===================================================================
--- mlir/include/mlir/IR/OpDefinition.h
+++ mlir/include/mlir/IR/OpDefinition.h
@@ -1235,7 +1235,9 @@
static bool classof(Operation *op) {
if (auto *abstractOp = op->getAbstractOperation())
return TypeID::get<ConcreteType>() == abstractOp->typeID;
- return op->getName().getStringRef() == ConcreteType::getOperationName();
+ llvm_unreachable(Twine("Can't cast to unregistered operation") +
+ ConcreteType::getOperationName());
+ return false;
}
/// This is the hook used by the AsmParser to parse the custom form of this
Index: mlir/include/mlir/IR/Builders.h
===================================================================
--- mlir/include/mlir/IR/Builders.h
+++ mlir/include/mlir/IR/Builders.h
@@ -374,6 +374,10 @@
template <typename OpTy, typename... Args>
OpTy create(Location location, Args &&... args) {
OperationState state(location, OpTy::getOperationName());
+ if (!state.name.getAbstractOperation())
+ llvm::report_fatal_error("Building op `" +
+ state.name.getStringRef().str() +
+ "` but it isn't registered in this MLIRContext");
OpTy::build(*this, state, std::forward<Args>(args)...);
auto *op = createOperation(state);
auto result = dyn_cast<OpTy>(op);
@@ -390,6 +394,10 @@
// Create the operation without using 'createOperation' as we don't want to
// insert it yet.
OperationState state(location, OpTy::getOperationName());
+ if (!state.name.getAbstractOperation())
+ llvm::report_fatal_error("Building op `" +
+ state.name.getStringRef().str() +
+ "` but it isn't registered in this MLIRContext");
OpTy::build(*this, state, std::forward<Args>(args)...);
Operation *op = Operation::create(state);
-------------- next part --------------
A non-text attachment was scrubbed...
Name: D80651.266721.patch
Type: text/x-patch
Size: 2607 bytes
Desc: not available
URL: <http://lists.llvm.org/pipermail/llvm-commits/attachments/20200528/7fa19dfb/attachment.bin>
More information about the llvm-commits
mailing list