Skip to content

Commit 68a2f71

Browse files
authored
Merge pull request #144 from tmijieux/lapacke/fix_tpmqrt_work_allocation
Fix issue #143 (Invalid ?tpmqrt workspace allocation)
2 parents b5fac0f + 38ec074 commit 68a2f71

4 files changed

Lines changed: 16 additions & 4 deletions

File tree

LAPACKE/src/lapacke_ctpmqrt.c

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -43,6 +43,7 @@ lapack_int LAPACKE_ctpmqrt( int matrix_layout, char side, char trans,
4343
{
4444
lapack_int ncols_a, nrows_a;
4545
lapack_int nrows_v;
46+
lapack_int lwork;
4647
lapack_int info = 0;
4748
lapack_complex_float* work = NULL;
4849
if( matrix_layout != LAPACK_COL_MAJOR && matrix_layout != LAPACK_ROW_MAJOR ) {
@@ -71,8 +72,10 @@ lapack_int LAPACKE_ctpmqrt( int matrix_layout, char side, char trans,
7172
}
7273
#endif
7374
/* Allocate memory for working array(s) */
75+
lwork = LAPACKE_lsame( side, 'L' ) ? MAX(1,nb) * MAX(1,n) :
76+
( LAPACKE_lsame( side, 'R' ) ? MAX(1,m) * MAX(1,nb) : 0 );
7477
work = (lapack_complex_float*)
75-
LAPACKE_malloc( sizeof(lapack_complex_float) * MAX(1,m) * MAX(1,nb) );
78+
LAPACKE_malloc( sizeof(lapack_complex_float) * lwork );
7679
if( work == NULL ) {
7780
info = LAPACK_WORK_MEMORY_ERROR;
7881
goto exit_level_0;

LAPACKE/src/lapacke_dtpmqrt.c

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -42,6 +42,7 @@ lapack_int LAPACKE_dtpmqrt( int matrix_layout, char side, char trans,
4242
{
4343
lapack_int ncols_a, nrows_a;
4444
lapack_int nrows_v;
45+
lapack_int lwork;
4546
lapack_int info = 0;
4647
double* work = NULL;
4748
if( matrix_layout != LAPACK_COL_MAJOR && matrix_layout != LAPACK_ROW_MAJOR ) {
@@ -70,7 +71,9 @@ lapack_int LAPACKE_dtpmqrt( int matrix_layout, char side, char trans,
7071
}
7172
#endif
7273
/* Allocate memory for working array(s) */
73-
work = (double*)LAPACKE_malloc( sizeof(double) * MAX(1,m) * MAX(1,nb) );
74+
lwork = LAPACKE_lsame( side, 'L' ) ? MAX(1,nb) * MAX(1,n) :
75+
( LAPACKE_lsame( side, 'R' ) ? MAX(1,m) * MAX(1,nb) : 0 );
76+
work = (double*)LAPACKE_malloc( sizeof(double) * lwork );
7477
if( work == NULL ) {
7578
info = LAPACK_WORK_MEMORY_ERROR;
7679
goto exit_level_0;

LAPACKE/src/lapacke_stpmqrt.c

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -41,6 +41,7 @@ lapack_int LAPACKE_stpmqrt( int matrix_layout, char side, char trans,
4141
{
4242
lapack_int ncols_a, nrows_a;
4343
lapack_int nrows_v;
44+
lapack_int lwork;
4445
lapack_int info = 0;
4546
float* work = NULL;
4647
if( matrix_layout != LAPACK_COL_MAJOR && matrix_layout != LAPACK_ROW_MAJOR ) {
@@ -69,7 +70,9 @@ lapack_int LAPACKE_stpmqrt( int matrix_layout, char side, char trans,
6970
}
7071
#endif
7172
/* Allocate memory for working array(s) */
72-
work = (float*)LAPACKE_malloc( sizeof(float) * MAX(1,m) * MAX(1,nb) );
73+
lwork = LAPACKE_lsame( side, 'L' ) ? MAX(1,nb) * MAX(1,n) :
74+
( LAPACKE_lsame( side, 'R' ) ? MAX(1,m) * MAX(1,nb) : 0 );
75+
work = (float*)LAPACKE_malloc( sizeof(float) * lwork );
7376
if( work == NULL ) {
7477
info = LAPACK_WORK_MEMORY_ERROR;
7578
goto exit_level_0;

LAPACKE/src/lapacke_ztpmqrt.c

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -43,6 +43,7 @@ lapack_int LAPACKE_ztpmqrt( int matrix_layout, char side, char trans,
4343
{
4444
lapack_int ncols_a, nrows_a;
4545
lapack_int nrows_v;
46+
lapack_int lwork;
4647
lapack_int info = 0;
4748
lapack_complex_double* work = NULL;
4849
if( matrix_layout != LAPACK_COL_MAJOR && matrix_layout != LAPACK_ROW_MAJOR ) {
@@ -71,8 +72,10 @@ lapack_int LAPACKE_ztpmqrt( int matrix_layout, char side, char trans,
7172
}
7273
#endif
7374
/* Allocate memory for working array(s) */
75+
lwork = LAPACKE_lsame( side, 'L' ) ? MAX(1,nb) * MAX(1,n) :
76+
( LAPACKE_lsame( side, 'R' ) ? MAX(1,m) * MAX(1,nb) : 0 );
7477
work = (lapack_complex_double*)
75-
LAPACKE_malloc( sizeof(lapack_complex_double) * MAX(1,m) * MAX(1,nb) );
78+
LAPACKE_malloc( sizeof(lapack_complex_double) * lwork );
7679
if( work == NULL ) {
7780
info = LAPACK_WORK_MEMORY_ERROR;
7881
goto exit_level_0;

0 commit comments

Comments
 (0)