Fix MSVC GPU build.
diff --git a/Eigen/src/Core/MathFunctions.h b/Eigen/src/Core/MathFunctions.h index 1bb57bb..bb553e7 100644 --- a/Eigen/src/Core/MathFunctions.h +++ b/Eigen/src/Core/MathFunctions.h
@@ -847,6 +847,9 @@ return result; } }; + +// GPUs treat long double as double. +#ifndef EIGEN_GPU_COMPILE_PHASE template <> struct random_longdouble_impl<false> { using Impl = random_impl<double>; @@ -863,6 +866,7 @@ } static EIGEN_DEVICE_FUNC inline long double run() { return random_longdouble_impl<>::run(); } }; +#endif template <typename Scalar> struct random_default_impl<Scalar, false, true> {
diff --git a/Eigen/src/SVD/JacobiSVD.h b/Eigen/src/SVD/JacobiSVD.h index ebb9734..086d750 100644 --- a/Eigen/src/SVD/JacobiSVD.h +++ b/Eigen/src/SVD/JacobiSVD.h
@@ -612,7 +612,18 @@ using Base::rows; private: - void allocate(Index rows, Index cols, unsigned int computationOptions); + void allocate(Index rows_, Index cols_, unsigned int computationOptions) { + if (Base::allocate(rows_, cols_, computationOptions)) return; + eigen_assert(!(ShouldComputeThinU && int(QRPreconditioner) == int(FullPivHouseholderQRPreconditioner)) && + !(ShouldComputeThinU && int(QRPreconditioner) == int(FullPivHouseholderQRPreconditioner)) && + "JacobiSVD: can't compute thin U or thin V with the FullPivHouseholderQR preconditioner. " + "Use the ColPivHouseholderQR preconditioner instead."); + + m_workMatrix.resize(diagSize(), diagSize()); + if (cols() > rows()) m_qr_precond_morecols.allocate(*this); + if (rows() > cols()) m_qr_precond_morerows.allocate(*this); + } + JacobiSVD& compute_impl(const MatrixType& matrix, unsigned int computationOptions); protected: @@ -651,20 +662,6 @@ }; template <typename MatrixType, int Options> -void JacobiSVD<MatrixType, Options>::allocate(Index rows_, Index cols_, unsigned int computationOptions_) { - if (Base::allocate(rows_, cols_, computationOptions_)) return; - - eigen_assert(!(ShouldComputeThinU && int(QRPreconditioner) == int(FullPivHouseholderQRPreconditioner)) && - !(ShouldComputeThinU && int(QRPreconditioner) == int(FullPivHouseholderQRPreconditioner)) && - "JacobiSVD: can't compute thin U or thin V with the FullPivHouseholderQR preconditioner. " - "Use the ColPivHouseholderQR preconditioner instead."); - - m_workMatrix.resize(diagSize(), diagSize()); - if (cols() > rows()) m_qr_precond_morecols.allocate(*this); - if (rows() > cols()) m_qr_precond_morerows.allocate(*this); -} - -template <typename MatrixType, int Options> JacobiSVD<MatrixType, Options>& JacobiSVD<MatrixType, Options>::compute_impl(const MatrixType& matrix, unsigned int computationOptions) { using std::abs;