diff --git a/control/descriptor.h b/control/descriptor.h
index a70f19221ff1be39f9e3bda838f39fa86f78c219..e60b3909fd3d3483a935c309a532a1dafe8699fe 100644
--- a/control/descriptor.h
+++ b/control/descriptor.h
@@ -208,21 +208,25 @@ inline static int morse_desc_islocal( const MORSE_desc_t *A, int m, int n )
     unsigned __morse_need_submit = 0; \
     RUNTIME_BEGIN_ACCESS_DECLARATION
 
-#define MORSE_ACCESS_R(A, Am, An) \
+#define MORSE_ACCESS_R(A, Am, An) do { \
     if (morse_desc_islocal(A, Am, An)) __morse_need_submit = 1; \
-    RUNTIME_ACCESS_R(A, Am, An)
+    RUNTIME_ACCESS_R(A, Am, An) \
+} while(0)
 
-#define MORSE_ACCESS_W(A, Am, An) \
+#define MORSE_ACCESS_W(A, Am, An) do { \
     if (morse_desc_islocal(A, Am, An)) __morse_need_submit = 1; \
-    RUNTIME_ACCESS_W(A, Am, An)
+    RUNTIME_ACCESS_W(A, Am, An) \
+} while(0)
 
-#define MORSE_ACCESS_RW(A, Am, An) \
+#define MORSE_ACCESS_RW(A, Am, An) do { \
     if (morse_desc_islocal(A, Am, An)) __morse_need_submit = 1; \
-    RUNTIME_ACCESS_RW(A, Am, An)
+    RUNTIME_ACCESS_RW(A, Am, An) \
+} while(0)
 
-#define MORSE_RANK_CHANGED(rank) \
+#define MORSE_RANK_CHANGED(rank) do {\
     __morse_need_submit = 1; \
-    RUNTIME_RANK_CHANGED(rank)
+    RUNTIME_RANK_CHANGED(rank) \
+} while (0)
 
 #define MORSE_END_ACCESS_DECLARATION \
     RUNTIME_END_ACCESS_DECLARATION \