The DataLayout class currently contains the member layoutStack which is hidden behind a preprocessor region dependant on the NDEBUG macro. Code wise this makes a lot of sense, as the layoutStack is used for extra assertions that users will want when compiling a debug build.
It however has the uncomfortable consequence of leading to a different ABI in Debug and Release builds. This I think is a bit annoying for downstream projects and others as they may want to build against a stable Release of MLIR in Release mode, but be able to debug their own project depending on MLIR.
This patch changes the related uses of NDEBUG to LLVM_ENABLE_ABI_BREAKING_CHECKS. As the macro is computed at configure time of LLVM, it may not change based on compiler settings of a downstream projects like NDEBUG would.
As an aside I'd like to ask if MLIR does bug fix cherry picks onto the release branches? Because if accepted I'd like this patch to be cherry picked on the release/13.x branch if that is okay.