silence picky C compiler warning
authorDavid Mitchell <davem@iabyn.com>
Thu, 14 Jun 2012 08:10:37 +0000 (09:10 +0100)
committerDavid Mitchell <davem@iabyn.com>
Thu, 14 Jun 2012 08:10:37 +0000 (09:10 +0100)
and add assert that a (U32 & mask) value can fit in a U8.

op_reg_common.h
regcomp.c

index 4e17350..f35cb7d 100644 (file)
@@ -85,6 +85,10 @@ get_regex_charset(const U32 flags)
  * re->extflags during compilation */
 #define RXf_PMf_COMPILETIME    (RXf_PMf_MULTILINE|RXf_PMf_SINGLELINE|RXf_PMf_CHARSET|RXf_PMf_FOLD|RXf_PMf_EXTENDED|RXf_PMf_KEEPCOPY)
 
+#if RXf_PMf_COMPILETIME > 255
+#  error RXf_PMf_COMPILETIME wont fit in U8 flags field of eval node
+#endif
+
 /* These copies need to be numerical or defsubs_h.PL won't know about them. */
 #define PMf_MULTILINE    1<<0
 #define PMf_SINGLELINE   1<<1
index cb98e62..038a4a6 100644 (file)
--- a/regcomp.c
+++ b/regcomp.c
@@ -8613,7 +8613,7 @@ S_reg(pTHX_ RExC_state_t *pRExC_state, I32 paren, I32 *flagp,U32 depth)
                    if (!SIZE_ONLY) {
                        ret->flags = 2;
                         /* for later propagation into (??{}) return value */
-                        eval->flags = (RExC_flags & RXf_PMf_COMPILETIME);
+                        eval->flags = (U8) (RExC_flags & RXf_PMf_COMPILETIME);
                     }
                     REGTAIL(pRExC_state, ret, eval);
                     /* deal with the length of this later - MJD */