Skip to content

Commit bad47bd

Browse files
authored
Fix too strict leading dimensions check in LAPACKE_?gesdd_work (Reference-LAPACK PR #1126) (#5307)
* relax leading dimensions check (Reference-LAPACK PR #1126)
1 parent 7f3093a commit bad47bd

File tree

4 files changed

+16
-4
lines changed

4 files changed

+16
-4
lines changed

lapack-netlib/LAPACKE/src/lapacke_cgesdd_work.c

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -58,6 +58,9 @@ lapack_int LAPACKE_cgesdd_work( int matrix_layout, char jobz, lapack_int m,
5858
lapack_int nrows_vt = ( LAPACKE_lsame( jobz, 'a' ) ||
5959
( LAPACKE_lsame( jobz, 'o' ) && m>=n) ) ? n :
6060
( LAPACKE_lsame( jobz, 's' ) ? MIN(m,n) : 1);
61+
lapack_int ncols_vt = ( LAPACKE_lsame( jobz, 'a' ) ||
62+
LAPACKE_lsame( jobz, 's' ) ||
63+
( LAPACKE_lsame( jobz, 'o' && m >=n) ) ? n : 1);
6164
lapack_int lda_t = MAX(1,m);
6265
lapack_int ldu_t = MAX(1,nrows_u);
6366
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,
7578
LAPACKE_xerbla( "LAPACKE_cgesdd_work", info );
7679
return info;
7780
}
78-
if( ldvt < n ) {
81+
if( ldvt < ncols_vt ) {
7982
info = -11;
8083
LAPACKE_xerbla( "LAPACKE_cgesdd_work", info );
8184
return info;

lapack-netlib/LAPACKE/src/lapacke_dgesdd_work.c

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -56,6 +56,9 @@ lapack_int LAPACKE_dgesdd_work( int matrix_layout, char jobz, lapack_int m,
5656
lapack_int nrows_vt = ( LAPACKE_lsame( jobz, 'a' ) ||
5757
( LAPACKE_lsame( jobz, 'o' ) && m>=n) ) ? n :
5858
( LAPACKE_lsame( jobz, 's' ) ? MIN(m,n) : 1);
59+
lapack_int ncols_vt = ( LAPACKE_lsame( jobz, 'a' ) ||
60+
LAPACKE_lsame( jobz, 's' ) ||
61+
( LAPACKE_lsame( jobz, 'o' && m >=n) ) ? n : 1);
5962
lapack_int lda_t = MAX(1,m);
6063
lapack_int ldu_t = MAX(1,nrows_u);
6164
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,
7376
LAPACKE_xerbla( "LAPACKE_dgesdd_work", info );
7477
return info;
7578
}
76-
if( ldvt < n ) {
79+
if( ldvt < ncols_vt ) {
7780
info = -11;
7881
LAPACKE_xerbla( "LAPACKE_dgesdd_work", info );
7982
return info;

lapack-netlib/LAPACKE/src/lapacke_sgesdd_work.c

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -56,6 +56,9 @@ lapack_int LAPACKE_sgesdd_work( int matrix_layout, char jobz, lapack_int m,
5656
lapack_int nrows_vt = ( LAPACKE_lsame( jobz, 'a' ) ||
5757
( LAPACKE_lsame( jobz, 'o' ) && m>=n) ) ? n :
5858
( LAPACKE_lsame( jobz, 's' ) ? MIN(m,n) : 1);
59+
lapack_int ncols_vt = ( LAPACKE_lsame( jobz, 'a' ) ||
60+
LAPACKE_lsame( jobz, 's' ) ||
61+
( LAPACKE_lsame( jobz, 'o' && m >=n) ) ? n : 1);
5962
lapack_int lda_t = MAX(1,m);
6063
lapack_int ldu_t = MAX(1,nrows_u);
6164
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,
7376
LAPACKE_xerbla( "LAPACKE_sgesdd_work", info );
7477
return info;
7578
}
76-
if( ldvt < n ) {
79+
if( ldvt < ncols_vt ) {
7780
info = -11;
7881
LAPACKE_xerbla( "LAPACKE_sgesdd_work", info );
7982
return info;

lapack-netlib/LAPACKE/src/lapacke_zgesdd_work.c

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -58,6 +58,9 @@ lapack_int LAPACKE_zgesdd_work( int matrix_layout, char jobz, lapack_int m,
5858
lapack_int nrows_vt = ( LAPACKE_lsame( jobz, 'a' ) ||
5959
( LAPACKE_lsame( jobz, 'o' ) && m>=n) ) ? n :
6060
( LAPACKE_lsame( jobz, 's' ) ? MIN(m,n) : 1);
61+
lapack_int ncols_vt = ( LAPACKE_lsame( jobz, 'a' ) ||
62+
LAPACKE_lsame( jobz, 's' ) ||
63+
( LAPACKE_lsame( jobz, 'o' && m >=n) ) ? n : 1);
6164
lapack_int lda_t = MAX(1,m);
6265
lapack_int ldu_t = MAX(1,nrows_u);
6366
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,
7578
LAPACKE_xerbla( "LAPACKE_zgesdd_work", info );
7679
return info;
7780
}
78-
if( ldvt < n ) {
81+
if( ldvt < ncols_vt ) {
7982
info = -11;
8083
LAPACKE_xerbla( "LAPACKE_zgesdd_work", info );
8184
return info;

0 commit comments

Comments
 (0)