Add a static assertions for custom Op<> to not defined data members (NFC)
authorMehdi Amini <joker.eph@gmail.com>
Tue, 8 Jun 2021 18:28:39 +0000 (18:28 +0000)
committerMehdi Amini <joker.eph@gmail.com>
Tue, 8 Jun 2021 18:38:18 +0000 (18:38 +0000)
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

mlir/include/mlir/IR/OpDefinition.h

index dadf028..bb6ff8d 100644 (file)
@@ -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()));