This bugzilla service is closed. All entries have been migrated to https://gitlab.com/libeigen/eigen

Bug 1106

Summary: SparseQR fails to compile with Intel C++ Compilers on Windows
Product: Eigen Reporter: Semih <semihozmen>
Component: SparseAssignee: Nobody <eigen.nobody>
Status: RESOLVED FIXED    
Severity: Compilation Problem CC: chtz, gael.guennebaud
Priority: Normal    
Version: 3.2   
Hardware: x86 - 64-bit   
OS: Windows   
Whiteboard:
Bug Depends on:    
Bug Blocks: 558    
Attachments:
Description Flags
Workaround none

Description Semih 2015-11-06 14:20:38 UTC
This is the same problem as in 
Commit 09c5bd1: Fix compilation with ICC/MSVC combo (eigen/eigen)

Following code fails compile with Intel C++ Compilers on windows 7 x64.
I tested it in two different configurations;

win7 x64 - Intel C++ 2015.1.148 integrated on vs2013
win7 x64 - Intel C++ 2011.0.104 integrated on vs2010

No problem with VC++ compilers!

Code is as follows;

#include <Eigen/SparseQR>
using namespace Eigen;
int main() {
  typedef Eigen::SparseMatrix< double > SparseDoubleMatrix;

  SparseQR< SparseDoubleMatrix, COLAMDOrdering<int> > solver;

  SparseDoubleMatrix A(10,10);   // Just dummy matrix for now (I know how to use SparseMatrices properly :)) 
  solver.compute(A);
}

Error stack is as follows;

U:\Development\trunk\libs\eigen-mp-3.2\Eigen\src/Core/Block.h(110): error : class "Eigen::BlockImpl<const Eigen::SparseMatrix<double, 0, int>, -1, 1, 1, Eigen::Sparse>" has no member "operator="
        EIGEN_INHERIT_ASSIGNMENT_OPERATORS(Block)
        ^
            detected during:
              instantiation of class "Eigen::Block<XprType, BlockRows, BlockCols, InnerPanel> [with XprType=const Eigen::SparseMatrix<double, 0, int>, BlockRows=-1, BlockCols=1, InnerPanel=1]" at line 260 of "U:\Development\trunk\libs\eigen-mp-3.2\Eigen\src/SparseCore/SparseBlock.h"
              instantiation of "const Eigen::SparseMatrixBase<Derived>::ConstInnerVectorReturnType Eigen::SparseMatrixBase<Derived>::innerVector(Eigen::SparseMatrixBase<Derived>::Index) const [with Derived=Eigen::SparseMatrix<double, 0, int>]" at line 64 of "U:\Development\trunk\libs\eigen-mp-3.2\Eigen\src/SparseCore/SparsePermutation.h"
              instantiation of "void Eigen::internal::permut_sparsematrix_product_retval<PermutationType, MatrixType, Side, Transposed>::evalTo(Dest &) const [with PermutationType=Eigen::PermutationBase<Eigen::PermutationMatrix<-1, -1, mplab::Index={Eigen::DenseIndex={ptrdiff_t={int}}}>>, MatrixType=Eigen::SparseMatrix<double, 0, int>, Side=2, Transposed=0, Dest=Eigen::SparseMatrix<double, 0, int>]" at line 61 of "U:\Development\trunk\libs\eigen-mp-3.2\Eigen\src/Core/ReturnByValue.h"
              instantiation of "void Eigen::ReturnByValue<Derived>::evalTo(Dest &) const [with Derived=Eigen::internal::permut_sparsematrix_product_retval<Eigen::PermutationBase<Eigen::PermutationMatrix<-1, -1, mplab::Index={Eigen::DenseIndex={ptrdiff_t={int}}}>>, Eigen::SparseMatrix<double, 0, int>, 2, 0>, Dest=Eigen::SparseMatrix<double, 0, int>]" at line 180 of "U:\Development\trunk\libs\eigen-mp-3.2\Eigen\src/SparseCore/SparseMatrixBase.h"
              instantiation of "Derived &Eigen::SparseMatrixBase<Derived>::operator=(const Eigen::ReturnByValue<OtherDerived> &) [with Derived=Eigen::SparseMatrix<double, 0, int>, OtherDerived=Eigen::internal::permut_sparsematrix_product_retval<Eigen::PermutationBase<Eigen::PermutationMatrix<-1, -1, mplab::Index={Eigen::DenseIndex={ptrdiff_t={int}}}>>, Eigen::SparseMatrix<double, 0, int>, 2, 0>]" at line 734 of "U:\Development\trunk\libs\eigen-mp-3.2\Eigen\src/SparseCore/SparseMatrix.h"
              instantiation of "Eigen::SparseMatrix<_Scalar, _Options, _Index> &Eigen::SparseMatrix<_Scalar, _Options, _Index>::operator=(const Eigen::ReturnByValue<OtherDerived> &) [with _Scalar=double, _Options=0, _Index=int, OtherDerived=Eigen::internal::permut_sparsematrix_product_retval<Eigen::PermutationBase<Eigen::PermutationMatrix<-1, -1, mplab::Index={Eigen::DenseIndex={ptrdiff_t={int}}}>>, Eigen::SparseMatrix<double, 0, int>, 2, 0>]" at line 508 of
                        "U:\Development\trunk\libs\eigen-mp-3.2\Eigen\src/SparseQR/SparseQR.h"
              instantiation of "void Eigen::SparseQR<_MatrixType, _OrderingType>::factorize(const Eigen::SparseQR<_MatrixType, _OrderingType>::MatrixType &) [with _MatrixType=Eigen::SparseMatrix<double, 0, int>, _OrderingType=Eigen::COLAMDOrdering<int>]" at line 87 of "U:\Development\trunk\libs\eigen-mp-3.2\Eigen\src/SparseQR/SparseQR.h"
              instantiation of "void Eigen::SparseQR<_MatrixType, _OrderingType>::compute(const Eigen::SparseQR<_MatrixType, _OrderingType>::MatrixType &) [with _MatrixType=Eigen::SparseMatrix<double, 0, int>, _OrderingType=Eigen::COLAMDOrdering<int>]" at line 731 of "ArithmeticOperators.cpp"
Comment 1 Gael Guennebaud 2015-11-10 10:38:42 UTC
Created attachment 624 [details]
Workaround

Could you try the following patch (for eigen 3.2.x), thanks.
Comment 2 Semih 2015-11-10 19:17:17 UTC
great it seems this patch fixed the problem..

thank you
Comment 3 Gael Guennebaud 2015-11-11 16:06:33 UTC
Pushed: https://bitbucket.org/eigen/eigen/commits/70e0e28516d0/combo
Comment 4 Nobody 2019-12-04 15:08:46 UTC
-- GitLab Migration Automatic Message --

This bug has been migrated to gitlab.com's GitLab instance and has been closed from further activity.

You can subscribe and participate further through the new bug through this link to our GitLab instance: https://gitlab.com/libeigen/eigen/issues/1106.