destination)
 
 /* No need to do anything to free, after alloca.  */
-#define REGEX_FREE(arg)
+#define REGEX_FREE(arg) while (0) /* empty */
 
 #endif /* not REGEX_MALLOC */
 
   unsigned char *p = pattern;
   register unsigned char *pend = pattern + size;
 
+#ifdef REL_ALLOC
   /* This holds the pointer to the failure stack, when
      it is allocated relocatably.  */
   fail_stack_elt_t *failure_stack_ptr;
+#endif
 
   /* Assume that each path through the pattern can be null until
      proven otherwise.  We set this false at the bottom of switch
   unsigned nfailure_points_pushed = 0, nfailure_points_popped = 0;
 #endif
 
+#ifdef REL_ALLOC
   /* This holds the pointer to the failure stack, when
      it is allocated relocatably.  */
   fail_stack_elt_t *failure_stack_ptr;
+#endif
 
   /* We fill all the registers internally, independent of what we
      return, for use in backreferences.  The number here includes