summaryrefslogtreecommitdiffhomepage
diff options
context:
space:
mode:
authorTomasz Dabrowski <[email protected]>2017-02-16 13:34:50 +0100
committerTomasz Dabrowski <[email protected]>2017-02-16 13:39:21 +0100
commitbd2b76ea85c5d949ded48f4c117bda4074b675aa (patch)
tree48e22571594fba803209264508f12865f9c26a2b
parentb165708c8deba00685f9a27926c554aaa7f3b0fb (diff)
downloadmruby-bd2b76ea85c5d949ded48f4c117bda4074b675aa.tar.gz
mruby-bd2b76ea85c5d949ded48f4c117bda4074b675aa.zip
Build fix for 32-bit clang 3.8/3.9 with MRB_INT64
-rw-r--r--include/mruby/numeric.h10
1 files changed, 10 insertions, 0 deletions
diff --git a/include/mruby/numeric.h b/include/mruby/numeric.h
index e4086487e..36489b1ce 100644
--- a/include/mruby/numeric.h
+++ b/include/mruby/numeric.h
@@ -42,6 +42,16 @@ mrb_value mrb_num_div(mrb_state *mrb, mrb_value x, mrb_value y);
# define MRB_HAVE_TYPE_GENERIC_CHECKED_ARITHMETIC_BUILTINS
#endif
+// Clang 3.8 and 3.9 have problem compiling mruby in 32-bit mode, when MRB_INT64 is set
+// because of missing __mulodi4 and similar functions in its runtime. We need to use custom
+// implementation for them.
+#ifdef MRB_HAVE_TYPE_GENERIC_CHECKED_ARITHMETIC_BUILTINS
+#if defined(__clang__) && (__clang_major__ == 3) && (__clang_minor__ >= 8) && \
+ defined(MRB_32BIT) && defined(MRB_INT64)
+#undef MRB_HAVE_TYPE_GENERIC_CHECKED_ARITHMETIC_BUILTINS
+#endif
+#endif
+
#ifdef MRB_HAVE_TYPE_GENERIC_CHECKED_ARITHMETIC_BUILTINS
#ifndef MRB_WORD_BOXING