Ensure that mc is not smaller than Traits::nr
diff --git a/Eigen/src/Core/products/GeneralMatrixMatrixTriangular.h b/Eigen/src/Core/products/GeneralMatrixMatrixTriangular.h
index 55b637b..2e0dcb9 100644
--- a/Eigen/src/Core/products/GeneralMatrixMatrixTriangular.h
+++ b/Eigen/src/Core/products/GeneralMatrixMatrixTriangular.h
@@ -78,11 +78,14 @@
ResMapper res(res_, resStride, resIncr);
Index kc = blocking.kc();
- Index mc = (std::min)(size,blocking.mc());
+ // Ensure that mc >= nr and <= size
+ Index mc = (std::min)(size,(std::max)(static_cast<decltype(blocking.mc())>(Traits::nr),blocking.mc()));
- // !!! mc must be a multiple of nr:
- if(mc > Traits::nr)
- mc = (mc/Traits::nr)*Traits::nr;
+ // !!! mc must be a multiple of nr
+ if (mc > Traits::nr) {
+ using UnsignedIndex = typename make_unsigned<Index>::type;
+ mc = (UnsignedIndex(mc)/Traits::nr)*Traits::nr;
+ }
std::size_t sizeA = kc*mc;
std::size_t sizeB = kc*size;