@@ -43,12 +43,10 @@ double LAPACKE_zlantr_work( int matrix_layout, char norm, char uplo,
4343 if ( matrix_layout == LAPACK_COL_MAJOR ) {
4444 /* Call LAPACK function and adjust info */
4545 res = LAPACK_zlantr ( & norm , & uplo , & diag , & m , & n , a , & lda , work );
46- if ( info < 0 ) {
47- info = info - 1 ;
48- }
4946 } else if ( matrix_layout == LAPACK_ROW_MAJOR ) {
5047 lapack_int lda_t = MAX (1 ,m );
5148 lapack_complex_double * a_t = NULL ;
49+ double * work_lapack = NULL ;
5250 /* Check leading dimension(s) */
5351 if ( lda < n ) {
5452 info = -8 ;
@@ -62,12 +60,23 @@ double LAPACKE_zlantr_work( int matrix_layout, char norm, char uplo,
6260 info = LAPACK_TRANSPOSE_MEMORY_ERROR ;
6361 goto exit_level_0 ;
6462 }
63+ /* Allocate memory for work array(s) */
64+ if ( LAPACKE_lsame ( norm , 'i' ) ) {
65+ work_lapack = (double * )LAPACKE_malloc ( sizeof (double ) * MAX (1 ,m ) );
66+ if ( work_lapack == NULL ) {
67+ info = LAPACK_WORK_MEMORY_ERROR ;
68+ goto exit_level_1 ;
69+ }
70+ }
6571 /* Transpose input matrices */
6672 LAPACKE_ztr_trans ( matrix_layout , uplo , diag , MAX (m ,n ), a , lda , a_t , lda_t );
6773 /* Call LAPACK function and adjust info */
68- res = LAPACK_zlantr ( & norm , & uplo , & diag , & m , & n , a_t , & lda_t , work );
69- info = 0 ; /* LAPACK call is ok! */
74+ res = LAPACK_zlantr ( & norm , & uplo , & diag , & m , & n , a_t , & lda_t , work_lapack );
7075 /* Release memory and exit */
76+ if ( work_lapack ) {
77+ LAPACKE_free ( work_lapack );
78+ }
79+ exit_level_1 :
7180 LAPACKE_free ( a_t );
7281exit_level_0 :
7382 if ( info == LAPACK_TRANSPOSE_MEMORY_ERROR ) {
0 commit comments