From 88f65d66b5117c7f2ab4e5abf2eb0b8e991f38a0 Mon Sep 17 00:00:00 2001 From: ajz34 Date: Mon, 12 May 2025 19:25:33 +0800 Subject: [PATCH] fix ldvt check in ?gesdd --- LAPACKE/src/lapacke_cgesdd_work.c | 5 ++++- LAPACKE/src/lapacke_dgesdd_work.c | 5 ++++- LAPACKE/src/lapacke_sgesdd_work.c | 5 ++++- LAPACKE/src/lapacke_zgesdd_work.c | 5 ++++- 4 files changed, 16 insertions(+), 4 deletions(-) diff --git a/LAPACKE/src/lapacke_cgesdd_work.c b/LAPACKE/src/lapacke_cgesdd_work.c index 793e409719..cd162cd869 100644 --- a/LAPACKE/src/lapacke_cgesdd_work.c +++ b/LAPACKE/src/lapacke_cgesdd_work.c @@ -58,6 +58,9 @@ lapack_int API_SUFFIX(LAPACKE_cgesdd_work)( int matrix_layout, char jobz, lapack lapack_int nrows_vt = ( API_SUFFIX(LAPACKE_lsame)( jobz, 'a' ) || ( API_SUFFIX(LAPACKE_lsame)( jobz, 'o' ) && m>=n) ) ? n : ( API_SUFFIX(LAPACKE_lsame)( jobz, 's' ) ? MIN(m,n) : 1); + lapack_int ncols_vt = ( API_SUFFIX(LAPACKE_lsame)( jobz, 'a' ) || + API_SUFFIX(LAPACKE_lsame)( jobz, 's' ) || + ( API_SUFFIX(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 API_SUFFIX(LAPACKE_cgesdd_work)( int matrix_layout, char jobz, lapack API_SUFFIX(LAPACKE_xerbla)( "LAPACKE_cgesdd_work", info ); return info; } - if( ldvt < n ) { + if( ldvt < ncols_vt ) { info = -11; API_SUFFIX(LAPACKE_xerbla)( "LAPACKE_cgesdd_work", info ); return info; diff --git a/LAPACKE/src/lapacke_dgesdd_work.c b/LAPACKE/src/lapacke_dgesdd_work.c index 733fbd9fce..16a92b3219 100644 --- a/LAPACKE/src/lapacke_dgesdd_work.c +++ b/LAPACKE/src/lapacke_dgesdd_work.c @@ -56,6 +56,9 @@ lapack_int API_SUFFIX(LAPACKE_dgesdd_work)( int matrix_layout, char jobz, lapack lapack_int nrows_vt = ( API_SUFFIX(LAPACKE_lsame)( jobz, 'a' ) || ( API_SUFFIX(LAPACKE_lsame)( jobz, 'o' ) && m>=n) ) ? n : ( API_SUFFIX(LAPACKE_lsame)( jobz, 's' ) ? MIN(m,n) : 1); + lapack_int ncols_vt = ( API_SUFFIX(LAPACKE_lsame)( jobz, 'a' ) || + API_SUFFIX(LAPACKE_lsame)( jobz, 's' ) || + ( API_SUFFIX(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 API_SUFFIX(LAPACKE_dgesdd_work)( int matrix_layout, char jobz, lapack API_SUFFIX(LAPACKE_xerbla)( "LAPACKE_dgesdd_work", info ); return info; } - if( ldvt < n ) { + if( ldvt < ncols_vt ) { info = -11; API_SUFFIX(LAPACKE_xerbla)( "LAPACKE_dgesdd_work", info ); return info; diff --git a/LAPACKE/src/lapacke_sgesdd_work.c b/LAPACKE/src/lapacke_sgesdd_work.c index 5dd1cdbc3c..ff0567e851 100644 --- a/LAPACKE/src/lapacke_sgesdd_work.c +++ b/LAPACKE/src/lapacke_sgesdd_work.c @@ -56,6 +56,9 @@ lapack_int API_SUFFIX(LAPACKE_sgesdd_work)( int matrix_layout, char jobz, lapack lapack_int nrows_vt = ( API_SUFFIX(LAPACKE_lsame)( jobz, 'a' ) || ( API_SUFFIX(LAPACKE_lsame)( jobz, 'o' ) && m>=n) ) ? n : ( API_SUFFIX(LAPACKE_lsame)( jobz, 's' ) ? MIN(m,n) : 1); + lapack_int ncols_vt = ( API_SUFFIX(LAPACKE_lsame)( jobz, 'a' ) || + API_SUFFIX(LAPACKE_lsame)( jobz, 's' ) || + ( API_SUFFIX(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 API_SUFFIX(LAPACKE_sgesdd_work)( int matrix_layout, char jobz, lapack API_SUFFIX(LAPACKE_xerbla)( "LAPACKE_sgesdd_work", info ); return info; } - if( ldvt < n ) { + if( ldvt < ncols_vt ) { info = -11; API_SUFFIX(LAPACKE_xerbla)( "LAPACKE_sgesdd_work", info ); return info; diff --git a/LAPACKE/src/lapacke_zgesdd_work.c b/LAPACKE/src/lapacke_zgesdd_work.c index ad9745fd82..7bb5dacdc4 100644 --- a/LAPACKE/src/lapacke_zgesdd_work.c +++ b/LAPACKE/src/lapacke_zgesdd_work.c @@ -58,6 +58,9 @@ lapack_int API_SUFFIX(LAPACKE_zgesdd_work)( int matrix_layout, char jobz, lapack lapack_int nrows_vt = ( API_SUFFIX(LAPACKE_lsame)( jobz, 'a' ) || ( API_SUFFIX(LAPACKE_lsame)( jobz, 'o' ) && m>=n) ) ? n : ( API_SUFFIX(LAPACKE_lsame)( jobz, 's' ) ? MIN(m,n) : 1); + lapack_int ncols_vt = ( API_SUFFIX(LAPACKE_lsame)( jobz, 'a' ) || + API_SUFFIX(LAPACKE_lsame)( jobz, 's' ) || + ( API_SUFFIX(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 API_SUFFIX(LAPACKE_zgesdd_work)( int matrix_layout, char jobz, lapack API_SUFFIX(LAPACKE_xerbla)( "LAPACKE_zgesdd_work", info ); return info; } - if( ldvt < n ) { + if( ldvt < ncols_vt ) { info = -11; API_SUFFIX(LAPACKE_xerbla)( "LAPACKE_zgesdd_work", info ); return info;