fix syrk
diff --git a/Eigen/src/Core/products/SelfadjointProduct.h b/Eigen/src/Core/products/SelfadjointProduct.h
index 8ce797c..9eb5de7 100644
--- a/Eigen/src/Core/products/SelfadjointProduct.h
+++ b/Eigen/src/Core/products/SelfadjointProduct.h
@@ -74,6 +74,8 @@
     Index mc = size;  // cache block size along the M direction
     Index nc = size;  // cache block size along the N direction
     computeProductBlockingSizes<Scalar,Scalar>(kc, mc, nc);
+    // !!! mc must be a multiple of nr:
+    mc = (mc/Blocking::nr)*Blocking::nr;
 
     Scalar* blockA = ei_aligned_stack_new(Scalar, kc*mc);
     std::size_t sizeB = kc*Blocking::PacketSize*Blocking::nr + kc*size;
@@ -142,7 +144,7 @@
 
   ei_selfadjoint_product<Scalar, Index,
     _ActualUType::Flags&RowMajorBit ? RowMajor : ColMajor,
-    ei_traits<MatrixType>::Flags&RowMajorBit ? RowMajor : ColMajor,
+    MatrixType::Flags&RowMajorBit ? RowMajor : ColMajor,
     !UBlasTraits::NeedToConjugate, UpLo>
     ::run(_expression().cols(), actualU.cols(), &actualU.coeff(0,0), actualU.outerStride(),
           const_cast<Scalar*>(_expression().data()), _expression().outerStride(), actualAlpha);