LAPACKE: fix wrong matrix size in ?ormbrtags/v0.2.20^2
@@ -42,7 +42,7 @@ lapack_int LAPACKE_dormbr( int matrix_layout, char vect, char side, char trans, | |||||
lapack_int lwork = -1; | lapack_int lwork = -1; | ||||
double* work = NULL; | double* work = NULL; | ||||
double work_query; | double work_query; | ||||
lapack_int nq, r; | |||||
lapack_int nq, ar, ac; | |||||
if( matrix_layout != LAPACK_COL_MAJOR && matrix_layout != LAPACK_ROW_MAJOR ) { | if( matrix_layout != LAPACK_COL_MAJOR && matrix_layout != LAPACK_ROW_MAJOR ) { | ||||
LAPACKE_xerbla( "LAPACKE_dormbr", -1 ); | LAPACKE_xerbla( "LAPACKE_dormbr", -1 ); | ||||
return -1; | return -1; | ||||
@@ -50,8 +50,9 @@ lapack_int LAPACKE_dormbr( int matrix_layout, char vect, char side, char trans, | |||||
#ifndef LAPACK_DISABLE_NAN_CHECK | #ifndef LAPACK_DISABLE_NAN_CHECK | ||||
/* Optionally check input matrices for NaNs */ | /* Optionally check input matrices for NaNs */ | ||||
nq = LAPACKE_lsame( side, 'l' ) ? m : n; | nq = LAPACKE_lsame( side, 'l' ) ? m : n; | ||||
r = LAPACKE_lsame( vect, 'q' ) ? nq : MIN(nq,k); | |||||
if( LAPACKE_dge_nancheck( matrix_layout, r, MIN(nq,k), a, lda ) ) { | |||||
ar = LAPACKE_lsame( vect, 'q' ) ? nq : MIN(nq,k); | |||||
ac = LAPACKE_lsame( vect, 'q' ) ? MIN(nq,k) : nq; | |||||
if( LAPACKE_dge_nancheck( matrix_layout, ar, ac, a, lda ) ) { | |||||
return -8; | return -8; | ||||
} | } | ||||
if( LAPACKE_dge_nancheck( matrix_layout, m, n, c, ldc ) ) { | if( LAPACKE_dge_nancheck( matrix_layout, m, n, c, ldc ) ) { | ||||
@@ -40,9 +40,6 @@ lapack_int LAPACKE_dormbr_work( int matrix_layout, char vect, char side, | |||||
double* work, lapack_int lwork ) | double* work, lapack_int lwork ) | ||||
{ | { | ||||
lapack_int info = 0; | lapack_int info = 0; | ||||
lapack_int nq, r; | |||||
lapack_int lda_t, ldc_t; | |||||
double *a_t = NULL, *c_t = NULL; | |||||
if( matrix_layout == LAPACK_COL_MAJOR ) { | if( matrix_layout == LAPACK_COL_MAJOR ) { | ||||
/* Call LAPACK function and adjust info */ | /* Call LAPACK function and adjust info */ | ||||
LAPACK_dormbr( &vect, &side, &trans, &m, &n, &k, a, &lda, tau, c, &ldc, | LAPACK_dormbr( &vect, &side, &trans, &m, &n, &k, a, &lda, tau, c, &ldc, | ||||
@@ -51,12 +48,15 @@ lapack_int LAPACKE_dormbr_work( int matrix_layout, char vect, char side, | |||||
info = info - 1; | info = info - 1; | ||||
} | } | ||||
} else if( matrix_layout == LAPACK_ROW_MAJOR ) { | } else if( matrix_layout == LAPACK_ROW_MAJOR ) { | ||||
nq = LAPACKE_lsame( side, 'l' ) ? m : n; | |||||
r = LAPACKE_lsame( vect, 'q' ) ? nq : MIN(nq,k); | |||||
lda_t = MAX(1,r); | |||||
ldc_t = MAX(1,m); | |||||
lapack_int nq = LAPACKE_lsame( side, 'l' ) ? m : n; | |||||
lapack_int ar = LAPACKE_lsame( vect, 'q' ) ? nq : MIN(nq,k); | |||||
lapack_int ac = LAPACKE_lsame( vect, 'q' ) ? MIN(nq,k) : nq; | |||||
lapack_int lda_t = MAX(1,ar); | |||||
lapack_int ldc_t = MAX(1,m); | |||||
double *a_t = NULL; | |||||
double *c_t = NULL; | |||||
/* Check leading dimension(s) */ | /* Check leading dimension(s) */ | ||||
if( lda < MIN(nq,k) ) { | |||||
if( lda < ac ) { | |||||
info = -9; | info = -9; | ||||
LAPACKE_xerbla( "LAPACKE_dormbr_work", info ); | LAPACKE_xerbla( "LAPACKE_dormbr_work", info ); | ||||
return info; | return info; | ||||
@@ -73,11 +73,7 @@ lapack_int LAPACKE_dormbr_work( int matrix_layout, char vect, char side, | |||||
return (info < 0) ? (info - 1) : info; | return (info < 0) ? (info - 1) : info; | ||||
} | } | ||||
/* Allocate memory for temporary array(s) */ | /* Allocate memory for temporary array(s) */ | ||||
if( LAPACKE_lsame( vect, 'q' ) ) { | |||||
a_t = (double*)LAPACKE_malloc( sizeof(double) * lda_t * MAX(1,k) ); | |||||
} else { | |||||
a_t = (double*)LAPACKE_malloc( sizeof(double) * lda_t * MAX(1,nq) ); | |||||
} | |||||
a_t = (double*)LAPACKE_malloc( sizeof(double) * lda_t * MAX(1,ac) ); | |||||
if( a_t == NULL ) { | if( a_t == NULL ) { | ||||
info = LAPACK_TRANSPOSE_MEMORY_ERROR; | info = LAPACK_TRANSPOSE_MEMORY_ERROR; | ||||
goto exit_level_0; | goto exit_level_0; | ||||
@@ -88,7 +84,7 @@ lapack_int LAPACKE_dormbr_work( int matrix_layout, char vect, char side, | |||||
goto exit_level_1; | goto exit_level_1; | ||||
} | } | ||||
/* Transpose input matrices */ | /* Transpose input matrices */ | ||||
LAPACKE_dge_trans( matrix_layout, r, MIN(nq,k), a, lda, a_t, lda_t ); | |||||
LAPACKE_dge_trans( matrix_layout, ar, ac, a, lda, a_t, lda_t ); | |||||
LAPACKE_dge_trans( matrix_layout, m, n, c, ldc, c_t, ldc_t ); | LAPACKE_dge_trans( matrix_layout, m, n, c, ldc, c_t, ldc_t ); | ||||
/* Call LAPACK function and adjust info */ | /* Call LAPACK function and adjust info */ | ||||
LAPACK_dormbr( &vect, &side, &trans, &m, &n, &k, a_t, &lda_t, tau, c_t, | LAPACK_dormbr( &vect, &side, &trans, &m, &n, &k, a_t, &lda_t, tau, c_t, | ||||
@@ -42,7 +42,7 @@ lapack_int LAPACKE_sormbr( int matrix_layout, char vect, char side, char trans, | |||||
lapack_int lwork = -1; | lapack_int lwork = -1; | ||||
float* work = NULL; | float* work = NULL; | ||||
float work_query; | float work_query; | ||||
lapack_int nq, r; | |||||
lapack_int nq, ar, ac; | |||||
if( matrix_layout != LAPACK_COL_MAJOR && matrix_layout != LAPACK_ROW_MAJOR ) { | if( matrix_layout != LAPACK_COL_MAJOR && matrix_layout != LAPACK_ROW_MAJOR ) { | ||||
LAPACKE_xerbla( "LAPACKE_sormbr", -1 ); | LAPACKE_xerbla( "LAPACKE_sormbr", -1 ); | ||||
return -1; | return -1; | ||||
@@ -50,8 +50,9 @@ lapack_int LAPACKE_sormbr( int matrix_layout, char vect, char side, char trans, | |||||
#ifndef LAPACK_DISABLE_NAN_CHECK | #ifndef LAPACK_DISABLE_NAN_CHECK | ||||
/* Optionally check input matrices for NaNs */ | /* Optionally check input matrices for NaNs */ | ||||
nq = LAPACKE_lsame( side, 'l' ) ? m : n; | nq = LAPACKE_lsame( side, 'l' ) ? m : n; | ||||
r = LAPACKE_lsame( vect, 'q' ) ? nq : MIN(nq,k); | |||||
if( LAPACKE_sge_nancheck( matrix_layout, r, MIN(nq,k), a, lda ) ) { | |||||
ar = LAPACKE_lsame( vect, 'q' ) ? nq : MIN(nq,k); | |||||
ac = LAPACKE_lsame( vect, 'q' ) ? MIN(nq,k) : nq; | |||||
if( LAPACKE_sge_nancheck( matrix_layout, ar, ac, a, lda ) ) { | |||||
return -8; | return -8; | ||||
} | } | ||||
if( LAPACKE_sge_nancheck( matrix_layout, m, n, c, ldc ) ) { | if( LAPACKE_sge_nancheck( matrix_layout, m, n, c, ldc ) ) { | ||||
@@ -40,9 +40,6 @@ lapack_int LAPACKE_sormbr_work( int matrix_layout, char vect, char side, | |||||
float* work, lapack_int lwork ) | float* work, lapack_int lwork ) | ||||
{ | { | ||||
lapack_int info = 0; | lapack_int info = 0; | ||||
lapack_int nq, r; | |||||
lapack_int lda_t, ldc_t; | |||||
float *a_t = NULL, *c_t = NULL; | |||||
if( matrix_layout == LAPACK_COL_MAJOR ) { | if( matrix_layout == LAPACK_COL_MAJOR ) { | ||||
/* Call LAPACK function and adjust info */ | /* Call LAPACK function and adjust info */ | ||||
LAPACK_sormbr( &vect, &side, &trans, &m, &n, &k, a, &lda, tau, c, &ldc, | LAPACK_sormbr( &vect, &side, &trans, &m, &n, &k, a, &lda, tau, c, &ldc, | ||||
@@ -51,12 +48,15 @@ lapack_int LAPACKE_sormbr_work( int matrix_layout, char vect, char side, | |||||
info = info - 1; | info = info - 1; | ||||
} | } | ||||
} else if( matrix_layout == LAPACK_ROW_MAJOR ) { | } else if( matrix_layout == LAPACK_ROW_MAJOR ) { | ||||
nq = LAPACKE_lsame( side, 'l' ) ? m : n; | |||||
r = LAPACKE_lsame( vect, 'q' ) ? nq : MIN(nq,k); | |||||
lda_t = MAX(1,r); | |||||
ldc_t = MAX(1,m); | |||||
lapack_int nq = LAPACKE_lsame( side, 'l' ) ? m : n; | |||||
lapack_int ar = LAPACKE_lsame( vect, 'q' ) ? nq : MIN(nq,k); | |||||
lapack_int ac = LAPACKE_lsame( vect, 'q' ) ? MIN(nq,k) : nq; | |||||
lapack_int lda_t = MAX(1,ar); | |||||
lapack_int ldc_t = MAX(1,m); | |||||
float *a_t = NULL; | |||||
float *c_t = NULL; | |||||
/* Check leading dimension(s) */ | /* Check leading dimension(s) */ | ||||
if( lda < MIN(nq,k) ) { | |||||
if( lda < ac ) { | |||||
info = -9; | info = -9; | ||||
LAPACKE_xerbla( "LAPACKE_sormbr_work", info ); | LAPACKE_xerbla( "LAPACKE_sormbr_work", info ); | ||||
return info; | return info; | ||||
@@ -73,11 +73,7 @@ lapack_int LAPACKE_sormbr_work( int matrix_layout, char vect, char side, | |||||
return (info < 0) ? (info - 1) : info; | return (info < 0) ? (info - 1) : info; | ||||
} | } | ||||
/* Allocate memory for temporary array(s) */ | /* Allocate memory for temporary array(s) */ | ||||
if( LAPACKE_lsame( vect, 'q' ) ) { | |||||
a_t = (float*)LAPACKE_malloc( sizeof(float) * lda_t * MAX(1,k) ); | |||||
} else { | |||||
a_t = (float*)LAPACKE_malloc( sizeof(float) * lda_t * MAX(1,nq) ); | |||||
} | |||||
a_t = (float*)LAPACKE_malloc( sizeof(float) * lda_t * MAX(1,ac) ); | |||||
if( a_t == NULL ) { | if( a_t == NULL ) { | ||||
info = LAPACK_TRANSPOSE_MEMORY_ERROR; | info = LAPACK_TRANSPOSE_MEMORY_ERROR; | ||||
goto exit_level_0; | goto exit_level_0; | ||||
@@ -88,7 +84,7 @@ lapack_int LAPACKE_sormbr_work( int matrix_layout, char vect, char side, | |||||
goto exit_level_1; | goto exit_level_1; | ||||
} | } | ||||
/* Transpose input matrices */ | /* Transpose input matrices */ | ||||
LAPACKE_sge_trans( matrix_layout, r, MIN(nq,k), a, lda, a_t, lda_t ); | |||||
LAPACKE_sge_trans( matrix_layout, ar, ac, a, lda, a_t, lda_t ); | |||||
LAPACKE_sge_trans( matrix_layout, m, n, c, ldc, c_t, ldc_t ); | LAPACKE_sge_trans( matrix_layout, m, n, c, ldc, c_t, ldc_t ); | ||||
/* Call LAPACK function and adjust info */ | /* Call LAPACK function and adjust info */ | ||||
LAPACK_sormbr( &vect, &side, &trans, &m, &n, &k, a_t, &lda_t, tau, c_t, | LAPACK_sormbr( &vect, &side, &trans, &m, &n, &k, a_t, &lda_t, tau, c_t, | ||||