diff --git a/timing/timing.c b/timing/timing.c
index 372ca8c3e9fc445098032cc8fdc3dd694cd9a76f..789746afbc09b0b689500b96a7cc04c34a826a11 100644
--- a/timing/timing.c
+++ b/timing/timing.c
@@ -160,7 +160,8 @@ Test(int64_t n, int *iparam) {
     gflops = 0.0;
 
     if ( iparam[IPARAM_WARMUP] ) {
-        RunTest( iparam, dparam, &(t[0]));
+      int status = RunTest( iparam, dparam, &(t[0]));
+      if (status != MORSE_SUCCESS) return status;
     }
 
     sumgf  = 0.0;
@@ -178,15 +179,17 @@ Test(int64_t n, int *iparam) {
           if ( iparam[IPARAM_PROFILE] )
             iparam[IPARAM_PROFILE] = 2;
 
-          RunTest( iparam, dparam, &(t[iter]));
+          int status = RunTest( iparam, dparam, &(t[iter]));
+          if (status != MORSE_SUCCESS) return status;
 
           iparam[IPARAM_TRACE] = 0;
           iparam[IPARAM_DAG] = 0;
           iparam[IPARAM_PROFILE] = 0;
         }
-        else
-            RunTest( iparam, dparam, &(t[iter]));
-
+        else {
+          int status = RunTest( iparam, dparam, &(t[iter]));
+          if (status != MORSE_SUCCESS) return status;
+        }
         gflops = flops / t[iter];
 
 #if defined (CHAMELEON_SCHED_STARPU)
@@ -677,7 +680,8 @@ main(int argc, char *argv[]) {
 
     if (step < 1) step = 1;
 
-    Test( -1, iparam ); /* print header */
+    int status = Test( -1, iparam ); /* print header */
+    if (status != MORSE_SUCCESS) return status;
     for (i = start; i <= stop; i += step)
     {
         if ( nx > 0 ) {
@@ -691,7 +695,9 @@ main(int argc, char *argv[]) {
                 iparam[IPARAM_M] = i;
             iparam[IPARAM_N] = i;
         }
-        success += Test( iparam[IPARAM_N], iparam );
+        int status = Test( iparam[IPARAM_N], iparam );
+        if (status != MORSE_SUCCESS) return status;
+        success += status;
     }
 
     MORSE_Finalize();
diff --git a/timing/timing.h b/timing/timing.h
index 3492c285d911e6251c18827a2a01b9123b4633af..11019ab02268eafa6a9413658cba5bb1176fdf79 100644
--- a/timing/timing.h
+++ b/timing/timing.h
@@ -106,13 +106,15 @@ enum dparam_timing {
 /* Paste code to allocate a matrix in desc if cond_init is true */
 #define PASTE_CODE_ALLOCATE_MATRIX_TILE(_desc_, _cond_, _type_, _type2_, _lda_, _m_, _n_) \
     MORSE_desc_t *_desc_ = NULL;                                        \
+    int status ## _desc_ ; \
     if( _cond_ ) {                                                      \
        if (!bigmat) \
-           MORSE_Desc_Create_User(&(_desc_), NULL, _type2_, MB, NB, MB*NB, _lda_, _n_, 0, 0, _m_, _n_, \
+           status ## _desc_ = MORSE_Desc_Create_User(&(_desc_), NULL, _type2_, MB, NB, MB*NB, _lda_, _n_, 0, 0, _m_, _n_, \
                           P, Q, morse_getaddr_null, NULL, NULL);\
        else \
-           MORSE_Desc_Create(&(_desc_), NULL, _type2_, MB, NB, MB*NB, _lda_, _n_, 0, 0, _m_, _n_, \
+           status ## _desc_ = MORSE_Desc_Create(&(_desc_), NULL, _type2_, MB, NB, MB*NB, _lda_, _n_, 0, 0, _m_, _n_, \
                     P, Q);\
+        if (status ## _desc_ != MORSE_SUCCESS) return (status ## _desc_);          \
     }
 
 #define PASTE_CODE_FREE_MATRIX(_desc_)                                  \