diff options
| author | Mehdi Amini <joker.eph@gmail.com> | 2021-06-08 18:28:39 +0000 |
|---|---|---|
| committer | Mehdi Amini <joker.eph@gmail.com> | 2021-06-08 18:38:18 +0000 |
| commit | c0edcec630eb26e12d66dae2f0e1fbf5258cb6ac (patch) | |
| tree | 63bb7b87fddabbcc6354d5c28fa6974ae11475e2 | |
| parent | 9197bac297f73552882820ba25d245115e29e7af (diff) | |
| download | llvm-c0edcec630eb26e12d66dae2f0e1fbf5258cb6ac.zip llvm-c0edcec630eb26e12d66dae2f0e1fbf5258cb6ac.tar.gz llvm-c0edcec630eb26e12d66dae2f0e1fbf5258cb6ac.tar.bz2 | |
Add a static assertions for custom Op<> to not defined data members (NFC)
A common mistake for newcomers to MLIR is to try to store extra member
on the Op class. However these are intended to be thing wrapper around
an Operation*, all the storage is meant to be encoded in attribute on
the underlying Operation. This can be confusing to debug, so better
catch it at build time.
Reviewed By: ftynse
Differential Revision: https://reviews.llvm.org/D103869
| -rw-r--r-- | mlir/include/mlir/IR/OpDefinition.h | 2 |
1 files changed, 2 insertions, 0 deletions
diff --git a/mlir/include/mlir/IR/OpDefinition.h b/mlir/include/mlir/IR/OpDefinition.h index dadf028..bb6ff8d 100644 --- a/mlir/include/mlir/IR/OpDefinition.h +++ b/mlir/include/mlir/IR/OpDefinition.h @@ -1780,6 +1780,8 @@ private: return &verifyInvariants; } static LogicalResult verifyInvariants(Operation *op) { + static_assert(sizeof(ConcreteType) == sizeof(OpState), + "Op class aren't allowed to have data members"); return failure( failed(op_definition_impl::verifyTraits<VerifiableTraitsTupleT>(op)) || failed(cast<ConcreteType>(op).verify())); |
