completeOrthogonalDecomposition() plus EIGEN_USE_LAPACKE_STRICT has the possibility to get program stuck forever!

Summary

Environment

  • Operating System : MacOS
  • Architecture : x64
  • Eigen Version : 3.3.9
  • Compiler Version : Apple clang version 12.0.5
  • Compile Flags : -O3 -march=native -DEIGEN_USE_LAPACKE_STRICT -DEIGEN_USE_BLAS -DNDEBUG -Xclang -fopenmp -std=gnu++2a
  • Vector Extension : AVX2

Minimal Example

//run 700 times with different MatrixXd C!
//auto Start = std::chrono::high_resolution_clock::now();
    auto CPseudoInverse = C.transpose().completeOrthogonalDecomposition();
    Eigen::Matrix<double, 3, -1, RowMajor> Tdelta(3, Ring.size() * 3);
    for (ptrdiff_t J{}; J < 3; ++J) {
      VectorXd ToSolve = VectorXd::Zero(7);
      ToSolve(0) = Delta(I, J);
      ToSolve(1 + (J + 2) % 3) = -Delta(I, (J + 1) % 3);
      ToSolve(1 + (J + 1) % 3) = Delta(I, (J + 2) % 3);
      Tdelta.row(J) = CPseudoInverse.solve(ToSolve).transpose();
    }
    //auto End = std::chrono::high_resolution_clock::now();
    //std::chrono::duration<double> Duration = End - Start;
    //std::cout << Duration.count() << "s\n";

Steps to reproduce

  1. random generate MatrixXd C(In my program They are actually preselected with different size) The MatrixXd C causes problem is
          -2.18034     0.158927    -0.931852    -0.258819            1            0            0
    -1.73205            0           -1           -0            1      2.58635      2.23607
    -1.28376      2.92163    -0.931852     0.258819            1            0            0
   -0.896575            0           -1     0.346065            1    0.0424953    0.0107692
   -0.732051     0.144494     -1.82843    -0.267949            1   -0.0702027     0.119864
    -1.41421     0.119293     -1.82843     -0.55051            1            0          nan
    -2.44949 6.93681e-310           -1     -0.55051            1          nan            0
          -2 6.95326e-310     -1.82843           -1            1            0 9.88131e-324
    -2.56753 9.88131e-324           -1    -0.346065            1 3.45846e-322 6.95326e-310
    -2.73205            0     -1.82843     0.267949            1 6.95326e-310 9.88131e-324
    -2.04989          nan     -1.82843      0.55051            1 9.88131e-324            0
    -1.01461            0           -1      0.55051            1            0          nan
     -1.4641 2.63051e-310     -1.82843            1            1          nan            0
    0.258819     0.931852 9.88131e-324     -2.18034          nan            1 9.88131e-324
           0            1            0     -1.73205            0            1 6.95326e-310
   -0.258819     0.931852          nan     -1.28376            0            1 9.88131e-324
   -0.346065            1            0    -0.896575 6.95326e-310            1            0
    0.267949      1.82843          nan    -0.732051 9.88131e-324            1          nan
     0.55051      1.82843 6.95326e-310     -1.41421            0            1            0
     0.55051            1 9.88131e-324     -2.44949          nan            1 9.88131e-324
           1      1.82843            0           -2            0            1 6.95326e-310
    0.346065            1          nan     -2.56753            0            1 9.88131e-324
   -0.267949      1.82843            0     -2.73205 6.95326e-310            1            0
    -0.55051      1.82843          nan     -2.04989 9.88131e-324            1          nan
    -0.55051            1 6.95326e-310     -1.01461            0            1            0
          -1      1.82843 9.88131e-324      -1.4641          nan            1            0
   -0.931852     0.258819      2.18034          nan            0          nan            1
          -1            0      1.73205            0 4.24399e-314 6.95326e-310            1
   -0.931852    -0.258819      1.28376 9.88131e-324 6.95326e-310 9.88131e-324            1
          -1    -0.346065     0.896575 6.95326e-310 9.88131e-324            0            1
    -1.82843     0.267949     0.732051 9.88131e-324            0          nan            1
    -1.82843      0.55051      1.41421 6.95313e-310          nan            0            1
          -1      0.55051      2.44949          nan            0          nan            1
    -1.82843            1            2            0   2.122e-314 6.95326e-310            1
          -1     0.346065      2.56753 8.48799e-314 6.95326e-310 9.88131e-324            1
    -1.82843    -0.267949      2.73205 6.95326e-310 9.88131e-324            0            1
    -1.82843     -0.55051      2.04989 9.88131e-324            0          nan            1
          -1     -0.55051      1.01461            0          nan            0            1
    -1.82843           -1       1.4641          nan            0          nan            1

The VectorXd ToSolve is

5.5631e-07
           0
    0.402857
-1.38778e-17
           0
           0
           0
  1. The program stuck forever
  2. ...

What is the current bug behavior?

The program stuck forever

What is the expected correct behavior?

solve it just as when I remove EIGEN_USE_LAPACKE_STRICT!

Anything else that might help

  • lapacke version:3.9.1 (from homebrew formula lapack)
  • OpenBLAS version:0.3.13 (from homebrew)