Reintroduce `mrb_static_assert`;
Note that the home brew version of `mrb_static_assert` only works within
the function body.  This reverts commit
MODIFY
include/mruby.h
include/mruby.h
#define mrb_assert_int_fit(t1,n,t2,max) ((void)0)
#endif
-#if defined __STDC_VERSION__ && __STDC_VERSION__ >= 201112L
-#define mrb_static_assert(exp, str) _Static_assert(exp, str)
+#if (defined __STDC_VERSION__ && __STDC_VERSION__ >= 201112L) || \
+ (defined __cplusplus && __cplusplus >= 201103L)
+# include <assert.h>
+# define mrb_static_assert(exp, str) static_assert(exp, str)
#else
-#define mrb_static_assert(exp, str)
+/* C version of static_assert() */
+# define mrb_static_assert(cond, str) \
+ do { int assertion_failed[(cond) ? 1 : -1];\
+ (void) assertion_failed; } while(0)
#endif
+#define mrb_static_assert1(exp) mrb_static_assert(exp, #exp)
#include "mrbconf.h"

MODIFY
src/gc.c
src/gc.c
@@ -1619,6 +1619,9 @@ mrb_init_gc(mrb_state *mrb)
{
struct RClass *gc;
+ mrb_static_assert(sizeof(RVALUE) <= sizeof(void*) * 6,
+ "RVALUE size must be within 6 words");
+
gc = mrb_define_module(mrb, "GC");
mrb_define_class_method(mrb, gc, "start", gc_start, MRB_ARGS_NONE());

MODIFY
src/string.c
src/string.c
@@ -2926,6 +2926,9 @@ mrb_init_string(mrb_state *mrb)
{
struct RClass *s;
+ mrb_static_assert(RSTRING_EMBED_LEN_MAX < (1 << MRB_STR_EMBED_LEN_BIT),
+ "pointer size too big for embedded string");
+
mrb->string_class = s = mrb_define_class(mrb, "String", mrb->object_class); /* 15.2.10 */
MRB_SET_INSTANCE_TT(s, MRB_TT_STRING);

Reintroduce `mrb_static_assert`; #5051

Note that the home brew version of `mrb_static_assert` only works within
the function body.  This reverts commit 8f99689.