1 | // Copyright 2009 The RE2 Authors. All Rights Reserved. |
2 | // Use of this source code is governed by a BSD-style |
3 | // license that can be found in the LICENSE file. |
4 | |
5 | #ifndef UTIL_UTIL_H_ |
6 | #define UTIL_UTIL_H_ |
7 | |
8 | #define arraysize(array) (sizeof(array)/sizeof((array)[0])) |
9 | |
10 | #ifndef ATTRIBUTE_NORETURN |
11 | #if defined(__GNUC__) |
12 | #define ATTRIBUTE_NORETURN __attribute__((noreturn)) |
13 | #elif defined(_MSC_VER) |
14 | #define ATTRIBUTE_NORETURN __declspec(noreturn) |
15 | #else |
16 | #define ATTRIBUTE_NORETURN |
17 | #endif |
18 | #endif |
19 | |
20 | #ifndef ATTRIBUTE_UNUSED |
21 | #if defined(__GNUC__) |
22 | #define ATTRIBUTE_UNUSED __attribute__((unused)) |
23 | #else |
24 | #define ATTRIBUTE_UNUSED |
25 | #endif |
26 | #endif |
27 | |
28 | #ifndef FALLTHROUGH_INTENDED |
29 | #if defined(__clang__) |
30 | #define FALLTHROUGH_INTENDED [[clang::fallthrough]] |
31 | #elif defined(__GNUC__) && __GNUC__ >= 7 |
32 | #define FALLTHROUGH_INTENDED [[gnu::fallthrough]] |
33 | #else |
34 | #define FALLTHROUGH_INTENDED do {} while (0) |
35 | #endif |
36 | #endif |
37 | |
38 | #ifndef NO_THREAD_SAFETY_ANALYSIS |
39 | #define NO_THREAD_SAFETY_ANALYSIS |
40 | #endif |
41 | |
42 | #endif // UTIL_UTIL_H_ |
43 | |