summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorlangou <julien.langou@ucdenver.edu>2017-05-04 14:56:03 +0200
committerGitHub <noreply@github.com>2017-05-04 14:56:03 +0200
commit68a2f71a7b5863e24fcfe0372c2ac5353bfc0451 (patch)
treec02652c16560f943b652d881700e6d121d6338f2
parentb5fac0f9a5945c4a3454d597b9d1081a053c8f66 (diff)
parent38ec074a4fa75dc4e421c83d51bfd8d02971f4f8 (diff)
downloadlapack-68a2f71a7b5863e24fcfe0372c2ac5353bfc0451.tar.gz
lapack-68a2f71a7b5863e24fcfe0372c2ac5353bfc0451.tar.bz2
lapack-68a2f71a7b5863e24fcfe0372c2ac5353bfc0451.zip
Merge pull request #144 from tmijieux/lapacke/fix_tpmqrt_work_allocation
Fix issue #143 (Invalid ?tpmqrt workspace allocation)
-rw-r--r--LAPACKE/src/lapacke_ctpmqrt.c5
-rw-r--r--LAPACKE/src/lapacke_dtpmqrt.c5
-rw-r--r--LAPACKE/src/lapacke_stpmqrt.c5
-rw-r--r--LAPACKE/src/lapacke_ztpmqrt.c5
4 files changed, 16 insertions, 4 deletions
diff --git a/LAPACKE/src/lapacke_ctpmqrt.c b/LAPACKE/src/lapacke_ctpmqrt.c
index 96db86be..fba2a237 100644
--- a/LAPACKE/src/lapacke_ctpmqrt.c
+++ b/LAPACKE/src/lapacke_ctpmqrt.c
@@ -43,6 +43,7 @@ lapack_int LAPACKE_ctpmqrt( int matrix_layout, char side, char trans,
{
lapack_int ncols_a, nrows_a;
lapack_int nrows_v;
+ lapack_int lwork;
lapack_int info = 0;
lapack_complex_float* work = NULL;
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,
}
#endif
/* Allocate memory for working array(s) */
+ lwork = LAPACKE_lsame( side, 'L' ) ? MAX(1,nb) * MAX(1,n) :
+ ( LAPACKE_lsame( side, 'R' ) ? MAX(1,m) * MAX(1,nb) : 0 );
work = (lapack_complex_float*)
- LAPACKE_malloc( sizeof(lapack_complex_float) * MAX(1,m) * MAX(1,nb) );
+ LAPACKE_malloc( sizeof(lapack_complex_float) * lwork );
if( work == NULL ) {
info = LAPACK_WORK_MEMORY_ERROR;
goto exit_level_0;
diff --git a/LAPACKE/src/lapacke_dtpmqrt.c b/LAPACKE/src/lapacke_dtpmqrt.c
index 9015ef09..14089046 100644
--- a/LAPACKE/src/lapacke_dtpmqrt.c
+++ b/LAPACKE/src/lapacke_dtpmqrt.c
@@ -42,6 +42,7 @@ lapack_int LAPACKE_dtpmqrt( int matrix_layout, char side, char trans,
{
lapack_int ncols_a, nrows_a;
lapack_int nrows_v;
+ lapack_int lwork;
lapack_int info = 0;
double* work = NULL;
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,
}
#endif
/* Allocate memory for working array(s) */
- work = (double*)LAPACKE_malloc( sizeof(double) * MAX(1,m) * MAX(1,nb) );
+ lwork = LAPACKE_lsame( side, 'L' ) ? MAX(1,nb) * MAX(1,n) :
+ ( LAPACKE_lsame( side, 'R' ) ? MAX(1,m) * MAX(1,nb) : 0 );
+ work = (double*)LAPACKE_malloc( sizeof(double) * lwork );
if( work == NULL ) {
info = LAPACK_WORK_MEMORY_ERROR;
goto exit_level_0;
diff --git a/LAPACKE/src/lapacke_stpmqrt.c b/LAPACKE/src/lapacke_stpmqrt.c
index 29df845a..cb283a3b 100644
--- a/LAPACKE/src/lapacke_stpmqrt.c
+++ b/LAPACKE/src/lapacke_stpmqrt.c
@@ -41,6 +41,7 @@ lapack_int LAPACKE_stpmqrt( int matrix_layout, char side, char trans,
{
lapack_int ncols_a, nrows_a;
lapack_int nrows_v;
+ lapack_int lwork;
lapack_int info = 0;
float* work = NULL;
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,
}
#endif
/* Allocate memory for working array(s) */
- work = (float*)LAPACKE_malloc( sizeof(float) * MAX(1,m) * MAX(1,nb) );
+ lwork = LAPACKE_lsame( side, 'L' ) ? MAX(1,nb) * MAX(1,n) :
+ ( LAPACKE_lsame( side, 'R' ) ? MAX(1,m) * MAX(1,nb) : 0 );
+ work = (float*)LAPACKE_malloc( sizeof(float) * lwork );
if( work == NULL ) {
info = LAPACK_WORK_MEMORY_ERROR;
goto exit_level_0;
diff --git a/LAPACKE/src/lapacke_ztpmqrt.c b/LAPACKE/src/lapacke_ztpmqrt.c
index 72b83fc0..e3bd95a6 100644
--- a/LAPACKE/src/lapacke_ztpmqrt.c
+++ b/LAPACKE/src/lapacke_ztpmqrt.c
@@ -43,6 +43,7 @@ lapack_int LAPACKE_ztpmqrt( int matrix_layout, char side, char trans,
{
lapack_int ncols_a, nrows_a;
lapack_int nrows_v;
+ lapack_int lwork;
lapack_int info = 0;
lapack_complex_double* work = NULL;
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,
}
#endif
/* Allocate memory for working array(s) */
+ lwork = LAPACKE_lsame( side, 'L' ) ? MAX(1,nb) * MAX(1,n) :
+ ( LAPACKE_lsame( side, 'R' ) ? MAX(1,m) * MAX(1,nb) : 0 );
work = (lapack_complex_double*)
- LAPACKE_malloc( sizeof(lapack_complex_double) * MAX(1,m) * MAX(1,nb) );
+ LAPACKE_malloc( sizeof(lapack_complex_double) * lwork );
if( work == NULL ) {
info = LAPACK_WORK_MEMORY_ERROR;
goto exit_level_0;