aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--ChangeLog5
-rw-r--r--regparse.h6
2 files changed, 10 insertions, 1 deletions
diff --git a/ChangeLog b/ChangeLog
index f7a6a25cda..d49c30fc0b 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,8 @@
+Wed Dec 9 17:02:03 2015 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * regparse.h (SET_NTYPE): get rid of breaking strict aliasing.
+ patch by Zarko Todorovski in [ruby-core:71953]. [Bug #11790]
+
Wed Dec 9 16:10:37 2015 Koichi Sasada <ko1@atdot.net>
* vm.c (rb_vm_cref_in_context): Module#define_method in non-class
diff --git a/regparse.h b/regparse.h
index 35de54671e..caf0790b1c 100644
--- a/regparse.h
+++ b/regparse.h
@@ -67,7 +67,11 @@ RUBY_SYMBOL_EXPORT_BEGIN
BIT_NT_CANY | BIT_NT_BREF)) != 0)
#define NTYPE(node) ((node)->u.base.type)
-#define SET_NTYPE(node, ntype) (node)->u.base.type = (ntype)
+#define SET_NTYPE(node, ntype) \
+ do { \
+ int value = ntype; \
+ memcpy(&((node)->u.base.type), &value, sizeof(int)); \
+ } while (0)
#define NSTR(node) (&((node)->u.str))
#define NCCLASS(node) (&((node)->u.cclass))