diff --git a/mlir/include/mlir/IR/DialectInterface.h b/mlir/include/mlir/IR/DialectInterface.h --- a/mlir/include/mlir/IR/DialectInterface.h +++ b/mlir/include/mlir/IR/DialectInterface.h @@ -97,7 +97,8 @@ using InterfaceVectorT = std::vector; public: - DialectInterfaceCollectionBase(MLIRContext *ctx, TypeID interfaceKind); + DialectInterfaceCollectionBase(MLIRContext *ctx, TypeID interfaceKind, + StringRef interfaceName); virtual ~DialectInterfaceCollectionBase(); protected: @@ -159,7 +160,8 @@ /// Collect the registered dialect interfaces within the provided context. DialectInterfaceCollection(MLIRContext *ctx) : detail::DialectInterfaceCollectionBase( - ctx, InterfaceType::getInterfaceID()) {} + ctx, InterfaceType::getInterfaceID(), + llvm::getTypeName()) {} /// Get the interface for a given object, or null if one is not registered. /// The object may be a dialect or an operation instance. diff --git a/mlir/lib/IR/Dialect.cpp b/mlir/lib/IR/Dialect.cpp --- a/mlir/lib/IR/Dialect.cpp +++ b/mlir/lib/IR/Dialect.cpp @@ -122,8 +122,11 @@ } DialectInterfaceCollectionBase::DialectInterfaceCollectionBase( - MLIRContext *ctx, TypeID interfaceKind) { + MLIRContext *ctx, TypeID interfaceKind, StringRef interfaceName) { for (auto *dialect : ctx->getLoadedDialects()) { +#ifndef NDEBUG + dialect->handleUseOfUndefinedPromisedInterface(interfaceKind, interfaceName); +#endif if (auto *interface = dialect->getRegisteredInterface(interfaceKind)) { interfaces.insert(interface); orderedInterfaces.push_back(interface);