ARGOBOTS
abti_error.h
Go to the documentation of this file.
1 /* -*- Mode: C; c-basic-offset:4 ; indent-tabs-mode:nil ; -*- */
2 /*
3  * See COPYRIGHT in top-level directory.
4  */
5 
6 #ifndef ABTI_ERROR_H_INCLUDED
7 #define ABTI_ERROR_H_INCLUDED
8 
9 #include <assert.h>
10 #include <abt_config.h>
11 
12 #ifndef ABT_CONFIG_DISABLE_ERROR_CHECK
13 #define ABTI_IS_ERROR_CHECK_ENABLED 1
14 #else
15 #define ABTI_IS_ERROR_CHECK_ENABLED 0
16 #endif
17 
18 #define ABTI_ASSERT(cond) \
19  do { \
20  if (ABTI_IS_ERROR_CHECK_ENABLED) { \
21  assert(cond); \
22  } \
23  } while (0)
24 
25 #define ABTI_STATIC_ASSERT(cond) \
26  do { \
27  ((void)sizeof(char[2 * !!(cond)-1])); \
28  } while (0)
29 
30 #define ABTI_CHECK_INITIALIZED() \
31  do { \
32  if (ABTI_IS_ERROR_CHECK_ENABLED && gp_ABTI_global == NULL) { \
33  abt_errno = ABT_ERR_UNINITIALIZED; \
34  goto fn_fail; \
35  } \
36  } while (0)
37 
38 #define ABTI_CHECK_ERROR(abt_errno) \
39  do { \
40  if (ABTI_IS_ERROR_CHECK_ENABLED && abt_errno != ABT_SUCCESS) { \
41  goto fn_fail; \
42  } \
43  } while (0)
44 
45 #define ABTI_CHECK_ERROR_MSG(abt_errno, msg) \
46  do { \
47  if (ABTI_IS_ERROR_CHECK_ENABLED && abt_errno != ABT_SUCCESS) { \
48  HANDLE_ERROR(msg); \
49  goto fn_fail; \
50  } \
51  } while (0)
52 
53 #define ABTI_CHECK_TRUE(cond, val) \
54  do { \
55  if (ABTI_IS_ERROR_CHECK_ENABLED && !(cond)) { \
56  abt_errno = (val); \
57  goto fn_fail; \
58  } \
59  } while (0)
60 
61 #define ABTI_CHECK_TRUE_RET(cond, val) \
62  do { \
63  if (ABTI_IS_ERROR_CHECK_ENABLED && !(cond)) { \
64  return (val); \
65  } \
66  } while (0)
67 
68 #define ABTI_CHECK_TRUE_MSG(cond, val, msg) \
69  do { \
70  if (ABTI_IS_ERROR_CHECK_ENABLED && !(cond)) { \
71  abt_errno = (val); \
72  HANDLE_ERROR(msg); \
73  goto fn_fail; \
74  } \
75  } while (0)
76 
77 #define ABTI_CHECK_TRUE_MSG_RET(cond, val, msg) \
78  do { \
79  if (ABTI_IS_ERROR_CHECK_ENABLED && !(cond)) { \
80  HANDLE_ERROR(msg); \
81  return (val); \
82  } \
83  } while (0)
84 
85 #define ABTI_CHECK_NULL_XSTREAM_PTR(p) \
86  do { \
87  if (ABTI_IS_ERROR_CHECK_ENABLED && p == (ABTI_xstream *)NULL) { \
88  abt_errno = ABT_ERR_INV_XSTREAM; \
89  goto fn_fail; \
90  } \
91  } while (0)
92 
93 #define ABTI_CHECK_NULL_POOL_PTR(p) \
94  do { \
95  if (ABTI_IS_ERROR_CHECK_ENABLED && p == (ABTI_pool *)NULL) { \
96  abt_errno = ABT_ERR_INV_POOL; \
97  goto fn_fail; \
98  } \
99  } while (0)
100 
101 #define ABTI_CHECK_NULL_SCHED_PTR(p) \
102  do { \
103  if (ABTI_IS_ERROR_CHECK_ENABLED && p == (ABTI_sched *)NULL) { \
104  abt_errno = ABT_ERR_INV_SCHED; \
105  goto fn_fail; \
106  } \
107  } while (0)
108 
109 #define ABTI_CHECK_NULL_THREAD_PTR(p) \
110  do { \
111  if (ABTI_IS_ERROR_CHECK_ENABLED && p == (ABTI_thread *)NULL) { \
112  abt_errno = ABT_ERR_INV_THREAD; \
113  goto fn_fail; \
114  } \
115  } while (0)
116 
117 #define ABTI_CHECK_NULL_THREAD_ATTR_PTR(p) \
118  do { \
119  if (ABTI_IS_ERROR_CHECK_ENABLED && p == (ABTI_thread_attr *)NULL) { \
120  abt_errno = ABT_ERR_INV_THREAD_ATTR; \
121  goto fn_fail; \
122  } \
123  } while (0)
124 
125 #define ABTI_CHECK_NULL_TASK_PTR(p) \
126  do { \
127  if (ABTI_IS_ERROR_CHECK_ENABLED && p == (ABTI_task *)NULL) { \
128  abt_errno = ABT_ERR_INV_TASK; \
129  goto fn_fail; \
130  } \
131  } while (0)
132 
133 #define ABTI_CHECK_NULL_KEY_PTR(p) \
134  do { \
135  if (ABTI_IS_ERROR_CHECK_ENABLED && p == (ABTI_key *)NULL) { \
136  abt_errno = ABT_ERR_INV_KEY; \
137  goto fn_fail; \
138  } \
139  } while (0)
140 
141 #define ABTI_CHECK_NULL_MUTEX_PTR(p) \
142  do { \
143  if (ABTI_IS_ERROR_CHECK_ENABLED && p == (ABTI_mutex *)NULL) { \
144  abt_errno = ABT_ERR_INV_MUTEX; \
145  goto fn_fail; \
146  } \
147  } while (0)
148 
149 #define ABTI_CHECK_NULL_MUTEX_ATTR_PTR(p) \
150  do { \
151  if (ABTI_IS_ERROR_CHECK_ENABLED && p == (ABTI_mutex_attr *)NULL) { \
152  abt_errno = ABT_ERR_INV_MUTEX_ATTR; \
153  goto fn_fail; \
154  } \
155  } while (0)
156 
157 #define ABTI_CHECK_NULL_COND_PTR(p) \
158  do { \
159  if (ABTI_IS_ERROR_CHECK_ENABLED && p == (ABTI_cond *)NULL) { \
160  abt_errno = ABT_ERR_INV_COND; \
161  goto fn_fail; \
162  } \
163  } while (0)
164 
165 #define ABTI_CHECK_NULL_RWLOCK_PTR(p) \
166  do { \
167  if (ABTI_IS_ERROR_CHECK_ENABLED && p == (ABTI_rwlock *)NULL) { \
168  abt_errno = ABT_ERR_INV_RWLOCK; \
169  goto fn_fail; \
170  } \
171  } while (0)
172 
173 #define ABTI_CHECK_NULL_FUTURE_PTR(p) \
174  do { \
175  if (ABTI_IS_ERROR_CHECK_ENABLED && p == (ABTI_future *)NULL) { \
176  abt_errno = ABT_ERR_INV_FUTURE; \
177  goto fn_fail; \
178  } \
179  } while (0)
180 
181 #define ABTI_CHECK_NULL_EVENTUAL_PTR(p) \
182  do { \
183  if (ABTI_IS_ERROR_CHECK_ENABLED && p == (ABTI_eventual *)NULL) { \
184  abt_errno = ABT_ERR_INV_EVENTUAL; \
185  goto fn_fail; \
186  } \
187  } while (0)
188 
189 #define ABTI_CHECK_NULL_BARRIER_PTR(p) \
190  do { \
191  if (ABTI_IS_ERROR_CHECK_ENABLED && p == (ABTI_barrier *)NULL) { \
192  abt_errno = ABT_ERR_INV_BARRIER; \
193  goto fn_fail; \
194  } \
195  } while (0)
196 
197 #define ABTI_CHECK_NULL_XSTREAM_BARRIER_PTR(p) \
198  do { \
199  if (ABTI_IS_ERROR_CHECK_ENABLED && \
200  p == (ABTI_xstream_barrier *)NULL) { \
201  abt_errno = ABT_ERR_INV_BARRIER; \
202  goto fn_fail; \
203  } \
204  } while (0)
205 
206 #define ABTI_CHECK_NULL_TIMER_PTR(p) \
207  do { \
208  if (ABTI_IS_ERROR_CHECK_ENABLED && p == (ABTI_timer *)NULL) { \
209  abt_errno = ABT_ERR_INV_TIMER; \
210  goto fn_fail; \
211  } \
212  } while (0)
213 
214 #ifdef ABT_CONFIG_PRINT_ABT_ERRNO
215 #define ABTI_IS_PRINT_ABT_ERRNO_ENABLED 1
216 #else
217 #define ABTI_IS_PRINT_ABT_ERRNO_ENABLED 0
218 #endif
219 
220 #define HANDLE_WARNING(msg) \
221  do { \
222  if (ABTI_IS_PRINT_ABT_ERRNO_ENABLED) { \
223  fprintf(stderr, "[%s:%d] %s\n", __FILE__, __LINE__, msg); \
224  } \
225  } while (0)
226 
227 #define HANDLE_ERROR(msg) \
228  do { \
229  if (ABTI_IS_PRINT_ABT_ERRNO_ENABLED) { \
230  fprintf(stderr, "[%s:%d] %s\n", __FILE__, __LINE__, msg); \
231  } \
232  } while (0)
233 
234 #define HANDLE_ERROR_WITH_CODE(msg, n) \
235  do { \
236  if (ABTI_IS_PRINT_ABT_ERRNO_ENABLED) { \
237  fprintf(stderr, "[%s:%d] %s: %d\n", __FILE__, __LINE__, msg, n); \
238  } \
239  } while (0)
240 
241 #define HANDLE_ERROR_FUNC_WITH_CODE(n) \
242  do { \
243  if (ABTI_IS_PRINT_ABT_ERRNO_ENABLED) { \
244  fprintf(stderr, "[%s:%d] %s: %d\n", __FILE__, __LINE__, __func__, \
245  n); \
246  } \
247  } while (0)
248 
249 #endif /* ABTI_ERROR_H_INCLUDED */