From 2105af4728b555d49be62d385f0f3280f52351b9 Mon Sep 17 00:00:00 2001
From: Mathieu Faverge <mathieu.faverge@inria.fr>
Date: Sat, 23 Nov 2019 02:21:59 +0100
Subject: [PATCH] Coverity

---
 compute/pzplghe.c              |  1 +
 compute/pzplgsy.c              |  1 +
 compute/zheevd.c               |  2 ++
 compute/ztile.c                | 21 ++++++++++++-----
 control/descriptor.c           |  2 --
 control/workspace.c            |  8 +++----
 coreblas/compute/core_zlatro.c |  8 +++++--
 coreblas/compute/core_ztile.c  |  4 ++--
 hqr                            |  2 +-
 new-testing/testing_zcheck.c   | 43 ++++++++++++++++++++++++----------
 10 files changed, 62 insertions(+), 30 deletions(-)

diff --git a/compute/pzplghe.c b/compute/pzplghe.c
index 26fa75c03..e1d73ad6b 100644
--- a/compute/pzplghe.c
+++ b/compute/pzplghe.c
@@ -75,6 +75,7 @@ void chameleon_pzplghe( double bump, cham_uplo_t uplo, CHAM_desc_t *A,
                     A->m, m*A->mb, n*A->nb, seed );
             }
         }
+        break;
 
     case ChamUpperLower:
     default:
diff --git a/compute/pzplgsy.c b/compute/pzplgsy.c
index cddda67a5..73f05ceaf 100644
--- a/compute/pzplgsy.c
+++ b/compute/pzplgsy.c
@@ -75,6 +75,7 @@ void chameleon_pzplgsy( CHAMELEON_Complex64_t bump, cham_uplo_t uplo, CHAM_desc_
                     A->m, m*A->mb, n*A->nb, seed );
             }
         }
+        break;
 
     case ChamUpperLower:
     default:
diff --git a/compute/zheevd.c b/compute/zheevd.c
index f794669c1..9c12a00ba 100644
--- a/compute/zheevd.c
+++ b/compute/zheevd.c
@@ -437,6 +437,8 @@ int CHAMELEON_zheevd_Tile_Async( cham_job_t jobz, cham_uplo_t uplo,
     V = malloc( N * N * sizeof(CHAMELEON_Complex64_t) );
     if (V == NULL) {
         chameleon_error("CHAMELEON_zheevd_Tile_Async", "malloc(V) failed");
+        free(E);
+        free(Q2);
         free(V);
         return CHAMELEON_ERR_OUT_OF_RESOURCES;
     }
diff --git a/compute/ztile.c b/compute/ztile.c
index 00c63cc16..580f520d6 100644
--- a/compute/ztile.c
+++ b/compute/ztile.c
@@ -75,9 +75,14 @@ int CHAMELEON_zLapack_to_Tile( CHAMELEON_Complex64_t *Af77, int LDA, CHAM_desc_t
     }
 
     /* Create the B descriptor to handle the Lapack format matrix */
-    CHAMELEON_Desc_Create_User( &B, Af77, ChamComplexDouble, A->mb, A->nb, A->bsiz,
-                                LDA, A->n, 0, 0, A->m, A->n, 1, 1,
-                                chameleon_getaddr_cm, chameleon_getblkldd_cm, NULL );
+    status = CHAMELEON_Desc_Create_User( &B, Af77, ChamComplexDouble, A->mb, A->nb, A->bsiz,
+                                         LDA, A->n, 0, 0, A->m, A->n, 1, 1,
+                                         chameleon_getaddr_cm, chameleon_getblkldd_cm, NULL );
+    if ( status != CHAMELEON_SUCCESS ) {
+        chameleon_error("CHAMELEON_zTile_to_Lapack", "Failed to create the descriptor");
+        return status;
+    }
+
 
     /* Start the computation */
     chameleon_sequence_create( chamctxt, &sequence );
@@ -151,9 +156,13 @@ int CHAMELEON_zTile_to_Lapack( CHAM_desc_t *A, CHAMELEON_Complex64_t *Af77, int
     }
 
     /* Create the B descriptor to handle the Lapack format matrix */
-    CHAMELEON_Desc_Create_User( &B, Af77, ChamComplexDouble, A->mb, A->nb, A->bsiz,
-                                LDA, A->n, 0, 0, A->m, A->n, 1, 1,
-                                chameleon_getaddr_cm, chameleon_getblkldd_cm, NULL );
+    status = CHAMELEON_Desc_Create_User( &B, Af77, ChamComplexDouble, A->mb, A->nb, A->bsiz,
+                                         LDA, A->n, 0, 0, A->m, A->n, 1, 1,
+                                         chameleon_getaddr_cm, chameleon_getblkldd_cm, NULL );
+    if ( status != CHAMELEON_SUCCESS ) {
+        chameleon_error("CHAMELEON_zTile_to_Lapack", "Failed to create the descriptor");
+        return status;
+    }
 
     /* Start the computation */
     chameleon_sequence_create( chamctxt, &sequence );
diff --git a/control/descriptor.c b/control/descriptor.c
index 52584a446..3df1e6766 100644
--- a/control/descriptor.c
+++ b/control/descriptor.c
@@ -559,8 +559,6 @@ int CHAMELEON_Desc_Create_User( CHAM_desc_t **descptr, void *mat, cham_flttype_t
     CHAM_desc_t *desc;
     int status;
 
-    *descptr = NULL;
-
     chamctxt = chameleon_context_self();
     if (chamctxt == NULL) {
         chameleon_error("CHAMELEON_Desc_Create_User", "CHAMELEON not initialized");
diff --git a/control/workspace.c b/control/workspace.c
index c7b010c3e..52fb945ab 100644
--- a/control/workspace.c
+++ b/control/workspace.c
@@ -71,8 +71,8 @@ int chameleon_alloc_ibnb_tile(int M, int N, cham_tasktype_t func, int type, CHAM
         NT *= 2;
     }
 
-    lm = IB * MT;
-    ln = NB * NT;
+    lm = (int64_t)IB * (int64_t)MT;
+    ln = (int64_t)NB * (int64_t)NT;
 
     return CHAMELEON_Desc_Create( desc, CHAMELEON_MAT_ALLOC_TILE, type, IB, NB, IB*NB,
                                   lm, ln, 0, 0, lm, ln, p, q );
@@ -109,8 +109,8 @@ int chameleon_alloc_ipiv(int M, int N, cham_tasktype_t func, int type, CHAM_desc
     NT = (N%NB==0) ? (N/NB) : ((N/NB)+1);
     MT = (M%NB==0) ? (M/NB) : ((M/NB)+1);
 
-    lm = IB * MT;
-    ln = NB * NT;
+    lm = (int64_t)IB * (int64_t)MT;
+    ln = (int64_t)NB * (int64_t)NT;
 
     size = (size_t)(chameleon_min(MT, NT) * NB * NT * sizeof(int));
     if (size == 0) {
diff --git a/coreblas/compute/core_zlatro.c b/coreblas/compute/core_zlatro.c
index eb276e373..e86b2b17c 100644
--- a/coreblas/compute/core_zlatro.c
+++ b/coreblas/compute/core_zlatro.c
@@ -117,7 +117,9 @@ int CORE_zlatro(cham_uplo_t uplo, cham_trans_t trans,
         CORE_zlacpy(uplo, M, N, A, LDA, B, LDB);
     }
     else {
-        if (trans == ChamConjTrans) {
+#if defined(PRECISION_z) || defined(PRECISION_c)
+        if (trans == ChamConjTrans)
+        {
             if(uplo == ChamUpper) {
                 for(j=0; j<N; j++)
                     for(i=0; i<chameleon_min(j+1,M); i++)
@@ -134,7 +136,9 @@ int CORE_zlatro(cham_uplo_t uplo, cham_trans_t trans,
                         B[j+i*LDB] = conj(A[i+j*LDA]);
             }
         }
-        else {
+        else
+#endif
+        {
             if(uplo==ChamUpper) {
                 for(j=0;j<N;j++)
                     for(i=0;i<chameleon_min(j+1,M);i++)
diff --git a/coreblas/compute/core_ztile.c b/coreblas/compute/core_ztile.c
index def292605..a1ff2c183 100644
--- a/coreblas/compute/core_ztile.c
+++ b/coreblas/compute/core_ztile.c
@@ -783,8 +783,8 @@ TCORE_zunmlq( cham_side_t            side,
               cham_trans_t           trans,
               int                    M,
               int                    N,
-              int                    IB,
               int                    K,
+              int                    IB,
               const CHAM_tile_t *    V,
               const CHAM_tile_t *    T,
               CHAM_tile_t *          C,
@@ -795,7 +795,7 @@ TCORE_zunmlq( cham_side_t            side,
     assert( T->format & CHAMELEON_TILE_FULLRANK );
     assert( C->format & CHAMELEON_TILE_FULLRANK );
     return CORE_zunmlq(
-        side, trans, M, N, IB, K, V->mat, V->ld, T->mat, T->ld, C->mat, C->ld, WORK, LDWORK );
+        side, trans, M, N, K, IB, V->mat, V->ld, T->mat, T->ld, C->mat, C->ld, WORK, LDWORK );
 }
 
 int
diff --git a/hqr b/hqr
index 621a15b82..c05aef897 160000
--- a/hqr
+++ b/hqr
@@ -1 +1 @@
-Subproject commit 621a15b8241717f9e8eb5774eadcb6b6d394e99a
+Subproject commit c05aef8974161f46281170232fbe604f3fe2a68d
diff --git a/new-testing/testing_zcheck.c b/new-testing/testing_zcheck.c
index 52fc9f396..d2f33920e 100644
--- a/new-testing/testing_zcheck.c
+++ b/new-testing/testing_zcheck.c
@@ -87,13 +87,13 @@ int check_zmatrices( run_arg_list_t *args, cham_uplo_t uplo, CHAM_desc_t *descA,
         }
         else {
             Anorm = LAPACKE_zlantr_work( LAPACK_COL_MAJOR, 'M', chameleon_lapack_const(uplo), 'N',
-                                         M, N, B, LDA, work );
+                                         M, N, A, LDA, work );
         }
 
         /* Computes the difference with the core function */
         CORE_zgeadd( ChamNoTrans, M, N, 1, A, LDA, -1, B, LDA );
 
-        /* Computes the residue's norm */
+        /* Computes the residual's norm */
         if ( uplo == ChamUpperLower ) {
             Rnorm = LAPACKE_zlange_work( LAPACK_COL_MAJOR, 'M', M, N, B, LDA, work );
         }
@@ -608,20 +608,26 @@ int check_zsymm( run_arg_list_t *args, cham_mtxtype_t matrix_type, cham_side_t s
     CHAMELEON_Complex64_t mzone = -1.0;
 
     if ( side == ChamLeft ) {
+#if defined(PRECISION_z) || defined(PRECISION_c)
         if ( matrix_type == ChamHermitian ) {
             Anorm = CHAMELEON_zlanhe_Tile(ChamInfNorm, uplo, descA);
         }
-        else {
+        else
+#endif
+        {
             Anorm = CHAMELEON_zlansy_Tile(ChamInfNorm, uplo, descA);
         }
         Bnorm = CHAMELEON_zlange_Tile(ChamOneNorm, descB);
         LDA = M;
         An  = M;
     } else {
+#if defined(PRECISION_z) || defined(PRECISION_c)
         if ( matrix_type == ChamHermitian ) {
             Anorm = CHAMELEON_zlanhe_Tile(ChamOneNorm, uplo, descA);
         }
-        else {
+        else
+#endif
+        {
             Anorm = CHAMELEON_zlansy_Tile(ChamOneNorm, uplo, descA);
         }
         Bnorm = CHAMELEON_zlange_Tile(ChamInfNorm, descB);
@@ -650,12 +656,15 @@ int check_zsymm( run_arg_list_t *args, cham_mtxtype_t matrix_type, cham_side_t s
         double eps = LAPACKE_dlamch_work('e');
 
         /* Makes the multiplication with the core function */
+#if defined(PRECISION_z) || defined(PRECISION_c)
         if ( matrix_type == ChamHermitian ) {
             cblas_zhemm( CblasColMajor, (CBLAS_SIDE)side, (CBLAS_UPLO)uplo,
                          M, N, CBLAS_SADDR(alpha),
                          A, LDA, B, LDB, CBLAS_SADDR(beta), Cref, LDC );
         }
-        else {
+        else
+#endif
+        {
             cblas_zsymm( CblasColMajor, (CBLAS_SIDE)side, (CBLAS_UPLO)uplo,
                          M, N, CBLAS_SADDR(alpha),
                          A, LDA, B, LDB, CBLAS_SADDR(beta), Cref, LDC );
@@ -764,11 +773,14 @@ int check_zsyrk( run_arg_list_t *args, cham_mtxtype_t matrix_type, cham_uplo_t u
     }
 
     /* Computes the norms for comparing */
+#if defined(PRECISION_z) || defined(PRECISION_c)
     if ( matrix_type == ChamHermitian ) {
         Crefnorm  = CHAMELEON_zlanhe_Tile( ChamInfNorm, uplo, descCref );
         Cchamnorm = CHAMELEON_zlanhe_Tile( ChamInfNorm, uplo, descC    );
     }
-    else {
+    else
+#endif
+    {
         Crefnorm  = CHAMELEON_zlansy_Tile( ChamInfNorm, uplo, descCref );
         Cchamnorm = CHAMELEON_zlansy_Tile( ChamInfNorm, uplo, descC    );
     }
@@ -796,6 +808,7 @@ int check_zsyrk( run_arg_list_t *args, cham_mtxtype_t matrix_type, cham_uplo_t u
         double *work = malloc(sizeof(double)*N);
 
         /* Makes the multiplication with the core function */
+#if defined(PRECISION_z) || defined(PRECISION_c)
         if ( matrix_type == ChamHermitian ) {
             if ( descB == NULL ) {
                 cblas_zherk( CblasColMajor, (CBLAS_UPLO)uplo, (CBLAS_TRANSPOSE)trans,
@@ -807,8 +820,12 @@ int check_zsyrk( run_arg_list_t *args, cham_mtxtype_t matrix_type, cham_uplo_t u
                               N, K, CBLAS_SADDR(alpha), A, LDA, B, LDA, creal(beta), Cref, LDC );
                 ABnorm = 2. * Anorm * Bnorm;
             }
+
+            Clapacknorm = LAPACKE_zlanhe_work( LAPACK_COL_MAJOR, 'I', chameleon_lapack_const(uplo), N, Cref, LDC, work );
         }
-        else {
+        else
+#endif
+        {
             if ( descB == NULL ) {
                 cblas_zsyrk( CblasColMajor, (CBLAS_UPLO)uplo, (CBLAS_TRANSPOSE)trans,
                              N, K, CBLAS_SADDR(alpha), A, LDA, CBLAS_SADDR(beta), Cref, LDC );
@@ -819,22 +836,22 @@ int check_zsyrk( run_arg_list_t *args, cham_mtxtype_t matrix_type, cham_uplo_t u
                               N, K, CBLAS_SADDR(alpha), A, LDA, B, LDA, CBLAS_SADDR(beta), Cref, LDC );
                 ABnorm = 2. * Anorm * Bnorm;
             }
-        }
-        if ( matrix_type == ChamHermitian ) {
-            Clapacknorm = LAPACKE_zlanhe_work( LAPACK_COL_MAJOR, 'I', chameleon_lapack_const(uplo), N, Cref, LDC, work );
-        }
-        else {
+
             Clapacknorm = LAPACKE_zlansy_work( LAPACK_COL_MAJOR, 'I', chameleon_lapack_const(uplo), N, Cref, LDC, work );
         }
+
         CORE_ztradd( uplo, ChamNoTrans, N, N,
                      -1.,  C,    LDC,
                       1.,  Cref, LDC );
 
         /* Computes the norm with the core function's result */
+#if defined(PRECISION_z) || defined(PRECISION_c)
         if ( matrix_type == ChamHermitian ) {
             Rnorm = LAPACKE_zlanhe_work( LAPACK_COL_MAJOR, 'M', chameleon_lapack_const(uplo), N, Cref, LDC, NULL );
         }
-        else {
+        else
+#endif
+        {
             Rnorm = LAPACKE_zlansy_work( LAPACK_COL_MAJOR, 'M', chameleon_lapack_const(uplo), N, Cref, LDC, NULL );
         }
         result = Rnorm / ((ABnorm + Crefnorm) * K * eps);
-- 
GitLab