Promised interfaces allow for a dialect to "promise" the implementation of an interface, i.e., declare that it supports an interface, but have the interface defined in an extension in a library separate from the dialect itself. A promised interface is powerful in that it alerts the user when the interface is attempted to be used (e.g. via cast/dyn_cast/etc.) and the implementation has not yet been provided. This makes the system much more robust against misconfiguration, and ensures that we do not lose the benefit we currently have of defining the interface in the dialect library.
All external model registrations in InitAllDialects.h are marked as "promised" in the respective dialects. An exception is BufferizableOpInterface: this interface cannot be marked as promised because it is in the Bufferization dialect and has dependencies on other dialects. Only interfaces located in mlir/Interfaces can be marked as "promised".
Note: This revision was copied and is a subset of D120368.