diff --git a/hash.c b/hash.c
index e98c7eec97..491aa17b23 100644
--- a/hash.c
+++ b/hash.c
@@ -32,6 +32,10 @@
     FL_TEST((hash), FL_EXIVAR|FL_TAINT|HASH_PROC_DEFAULT) || \
     !NIL_P(RHASH_IFNONE(hash)))
 
+#define SET_DEFAULT(hash, ifnone) ( \
+    FL_UNSET_RAW(hash, HASH_PROC_DEFAULT), \
+    RHASH_SET_IFNONE(hash, ifnone))
+
 static VALUE
 has_extra_methods(VALUE klass)
 {
@@ -944,8 +948,7 @@ static VALUE
 rb_hash_set_default(VALUE hash, VALUE ifnone)
 {
     rb_hash_modify_check(hash);
-    RHASH_SET_IFNONE(hash, ifnone);
-    FL_UNSET(hash, HASH_PROC_DEFAULT);
+    SET_DEFAULT(hash, ifnone);
     return ifnone;
 }
 
@@ -993,8 +996,7 @@ rb_hash_set_default_proc(VALUE hash, VALUE proc)
 
     rb_hash_modify_check(hash);
     if (NIL_P(proc)) {
-	FL_UNSET(hash, HASH_PROC_DEFAULT);
-	RHASH_SET_IFNONE(hash, proc);
+	SET_DEFAULT(hash, proc);
 	return proc;
     }
     b = rb_check_convert_type(proc, T_DATA, "Proc", "to_proc");