Browse Source

Fix too strict leading dimensions check in LAPACKE_?gesdd_work (Reference-LAPACK PR #1126) (#5307)

* relax leading dimensions check (Reference-LAPACK PR #1126)
tags/v0.3.30
Martin Kroeker GitHub 10 months ago
parent
commit
bad47bd024
No known key found for this signature in database GPG Key ID: B5690EEEBB952194
4 changed files with 16 additions and 4 deletions
  1. +4
    -1
      lapack-netlib/LAPACKE/src/lapacke_cgesdd_work.c
  2. +4
    -1
      lapack-netlib/LAPACKE/src/lapacke_dgesdd_work.c
  3. +4
    -1
      lapack-netlib/LAPACKE/src/lapacke_sgesdd_work.c
  4. +4
    -1
      lapack-netlib/LAPACKE/src/lapacke_zgesdd_work.c

+ 4
- 1
lapack-netlib/LAPACKE/src/lapacke_cgesdd_work.c View File

@@ -58,6 +58,9 @@ lapack_int LAPACKE_cgesdd_work( int matrix_layout, char jobz, lapack_int m,
lapack_int nrows_vt = ( LAPACKE_lsame( jobz, 'a' ) ||
( LAPACKE_lsame( jobz, 'o' ) && m>=n) ) ? n :
( LAPACKE_lsame( jobz, 's' ) ? MIN(m,n) : 1);
lapack_int ncols_vt = ( LAPACKE_lsame( jobz, 'a' ) ||
LAPACKE_lsame( jobz, 's' ) ||
( LAPACKE_lsame( jobz, 'o' && m >=n) ) ? n : 1);
lapack_int lda_t = MAX(1,m);
lapack_int ldu_t = MAX(1,nrows_u);
lapack_int ldvt_t = MAX(1,nrows_vt);
@@ -75,7 +78,7 @@ lapack_int LAPACKE_cgesdd_work( int matrix_layout, char jobz, lapack_int m,
LAPACKE_xerbla( "LAPACKE_cgesdd_work", info );
return info;
}
if( ldvt < n ) {
if( ldvt < ncols_vt ) {
info = -11;
LAPACKE_xerbla( "LAPACKE_cgesdd_work", info );
return info;


+ 4
- 1
lapack-netlib/LAPACKE/src/lapacke_dgesdd_work.c View File

@@ -56,6 +56,9 @@ lapack_int LAPACKE_dgesdd_work( int matrix_layout, char jobz, lapack_int m,
lapack_int nrows_vt = ( LAPACKE_lsame( jobz, 'a' ) ||
( LAPACKE_lsame( jobz, 'o' ) && m>=n) ) ? n :
( LAPACKE_lsame( jobz, 's' ) ? MIN(m,n) : 1);
lapack_int ncols_vt = ( LAPACKE_lsame( jobz, 'a' ) ||
LAPACKE_lsame( jobz, 's' ) ||
( LAPACKE_lsame( jobz, 'o' && m >=n) ) ? n : 1);
lapack_int lda_t = MAX(1,m);
lapack_int ldu_t = MAX(1,nrows_u);
lapack_int ldvt_t = MAX(1,nrows_vt);
@@ -73,7 +76,7 @@ lapack_int LAPACKE_dgesdd_work( int matrix_layout, char jobz, lapack_int m,
LAPACKE_xerbla( "LAPACKE_dgesdd_work", info );
return info;
}
if( ldvt < n ) {
if( ldvt < ncols_vt ) {
info = -11;
LAPACKE_xerbla( "LAPACKE_dgesdd_work", info );
return info;


+ 4
- 1
lapack-netlib/LAPACKE/src/lapacke_sgesdd_work.c View File

@@ -56,6 +56,9 @@ lapack_int LAPACKE_sgesdd_work( int matrix_layout, char jobz, lapack_int m,
lapack_int nrows_vt = ( LAPACKE_lsame( jobz, 'a' ) ||
( LAPACKE_lsame( jobz, 'o' ) && m>=n) ) ? n :
( LAPACKE_lsame( jobz, 's' ) ? MIN(m,n) : 1);
lapack_int ncols_vt = ( LAPACKE_lsame( jobz, 'a' ) ||
LAPACKE_lsame( jobz, 's' ) ||
( LAPACKE_lsame( jobz, 'o' && m >=n) ) ? n : 1);
lapack_int lda_t = MAX(1,m);
lapack_int ldu_t = MAX(1,nrows_u);
lapack_int ldvt_t = MAX(1,nrows_vt);
@@ -73,7 +76,7 @@ lapack_int LAPACKE_sgesdd_work( int matrix_layout, char jobz, lapack_int m,
LAPACKE_xerbla( "LAPACKE_sgesdd_work", info );
return info;
}
if( ldvt < n ) {
if( ldvt < ncols_vt ) {
info = -11;
LAPACKE_xerbla( "LAPACKE_sgesdd_work", info );
return info;


+ 4
- 1
lapack-netlib/LAPACKE/src/lapacke_zgesdd_work.c View File

@@ -58,6 +58,9 @@ lapack_int LAPACKE_zgesdd_work( int matrix_layout, char jobz, lapack_int m,
lapack_int nrows_vt = ( LAPACKE_lsame( jobz, 'a' ) ||
( LAPACKE_lsame( jobz, 'o' ) && m>=n) ) ? n :
( LAPACKE_lsame( jobz, 's' ) ? MIN(m,n) : 1);
lapack_int ncols_vt = ( LAPACKE_lsame( jobz, 'a' ) ||
LAPACKE_lsame( jobz, 's' ) ||
( LAPACKE_lsame( jobz, 'o' && m >=n) ) ? n : 1);
lapack_int lda_t = MAX(1,m);
lapack_int ldu_t = MAX(1,nrows_u);
lapack_int ldvt_t = MAX(1,nrows_vt);
@@ -75,7 +78,7 @@ lapack_int LAPACKE_zgesdd_work( int matrix_layout, char jobz, lapack_int m,
LAPACKE_xerbla( "LAPACKE_zgesdd_work", info );
return info;
}
if( ldvt < n ) {
if( ldvt < ncols_vt ) {
info = -11;
LAPACKE_xerbla( "LAPACKE_zgesdd_work", info );
return info;


Loading…
Cancel
Save