Added implicit integer conversion by using explicit integer type conversion.  Adding assert to catch overflow.
diff --git a/Eigen/src/SparseLU/SparseLU.h b/Eigen/src/SparseLU/SparseLU.h
index cd4ea5b..1789830 100644
--- a/Eigen/src/SparseLU/SparseLU.h
+++ b/Eigen/src/SparseLU/SparseLU.h
@@ -675,8 +675,11 @@
 
   template<typename Dest>   void solveInPlace(MatrixBase<Dest> &X) const
   {
-    Index nrhs = X.cols();
-    Index n = X.rows();
+    /* Explicit type conversion as the Index type of MatrixBase<Dest> may be wider than Index */
+    eigen_assert(X.rows() <= NumTraits<Index>::highest());
+    eigen_assert(X.cols() <= NumTraits<Index>::highest());
+    Index nrhs = Index(X.cols());
+    Index n    = Index(X.rows());
     // Backward solve with U
     for (Index k = m_mapL.nsuper(); k >= 0; k--)
     {
diff --git a/Eigen/src/SparseLU/SparseLU_SupernodalMatrix.h b/Eigen/src/SparseLU/SparseLU_SupernodalMatrix.h
index ad6f218..6b0b83e 100644
--- a/Eigen/src/SparseLU/SparseLU_SupernodalMatrix.h
+++ b/Eigen/src/SparseLU/SparseLU_SupernodalMatrix.h
@@ -233,8 +233,11 @@
 template<typename Dest>
 void MappedSuperNodalMatrix<Scalar,Index>::solveInPlace( MatrixBase<Dest>&X) const
 {
-    Index n = X.rows(); 
-    Index nrhs = X.cols(); 
+    /* Explicit type conversion as the Index type of MatrixBase<Dest> may be wider than Index */
+    eigen_assert(X.rows() <= NumTraits<Index>::highest());
+    eigen_assert(X.cols() <= NumTraits<Index>::highest());
+    Index n    = Index(X.rows());
+    Index nrhs = Index(X.cols());
     const Scalar * Lval = valuePtr();                 // Nonzero values 
     Matrix<Scalar,Dynamic,Dynamic> work(n, nrhs);     // working vector
     work.setZero();