summaryrefslogtreecommitdiffhomepage
path: root/include
diff options
context:
space:
mode:
authorYukihiro "Matz" Matsumoto <[email protected]>2020-08-09 21:57:30 +0900
committerGitHub <[email protected]>2020-08-09 21:57:30 +0900
commitab5726d4e42ca653957eaaf9abc863392ecbe678 (patch)
treebfc6b700caa1a915a5c12a6504dd440ce4c5543b /include
parentdf969b163ad43b7930c6965d457682a2f290553a (diff)
parent0d54568b4dea51b7b4d78b66680632ac792efd4e (diff)
downloadmruby-ab5726d4e42ca653957eaaf9abc863392ecbe678.tar.gz
mruby-ab5726d4e42ca653957eaaf9abc863392ecbe678.zip
Merge pull request #5061 from shuujii/allow-mrb_static_assert-to-be-used-outside-of-functions
Allow `mrb_static_assert()` to be used outside of functions
Diffstat (limited to 'include')
-rw-r--r--include/mruby.h12
1 files changed, 9 insertions, 3 deletions
diff --git a/include/mruby.h b/include/mruby.h
index 5aced9ca7..8625d4521 100644
--- a/include/mruby.h
+++ b/include/mruby.h
@@ -68,9 +68,15 @@
# define mrb_static_assert(exp, str) static_assert(exp, str)
#else
/* C version of static_assert() */
-# define mrb_static_assert(cond, str) \
- do { int assertion_failed[(cond) ? 1 : -1];\
- (void) assertion_failed; } while(0)
+# define _mrb_static_assert_cat0(a, b) a##b
+# define _mrb_static_assert_cat(a, b) _mrb_static_assert_cat0(a, b)
+# ifdef __COUNTER__
+# define _mrb_static_assert_id(prefix) _mrb_static_assert_cat(prefix, __COUNTER__)
+# else
+# define _mrb_static_assert_id(prefix) _mrb_static_assert_cat(prefix, __LINE__)
+# endif
+# define mrb_static_assert(exp, str) \
+ struct _mrb_static_assert_id(_mrb_static_assert_) { char x[(exp) ? 1 : -1]; }
#endif
#define mrb_static_assert1(exp) mrb_static_assert(exp, #exp)