diff --git a/parse.y b/parse.y
index 8017011bb7..d4443d50d2 100644
--- a/parse.y
+++ b/parse.y
@@ -5617,6 +5617,15 @@ assoc		: arg_value tASSOC arg_value
 		    /*% %*/
 		    /*% ripper: assoc_new!($1, $2) %*/
 		    }
+		| tLABEL
+		    {
+		    /*%%%*/
+			NODE *val = gettable(p, $1, &@$);
+			if (!val) val = NEW_BEGIN(0, &@$);
+			$$ = list_append(p, NEW_LIST(NEW_LIT(ID2SYM($1), &@1), &@$), val);
+		    /*% %*/
+		    /*% ripper: assoc_new!($1, id_is_var(p, get_id($1)) ? var_ref!($1) : vcall!($1)) %*/
+		    }
 		| tSTRING_BEG string_contents tLABEL_END arg_value
 		    {
 		    /*%%%*/
diff --git a/test/ruby/test_hash.rb b/test/ruby/test_hash.rb
index f79879c20a..5aee1b5d5c 100644
--- a/test/ruby/test_hash.rb
+++ b/test/ruby/test_hash.rb
@@ -2178,4 +2178,21 @@ class TestHash < Test::Unit::TestCase
       end;
     end
   end
+
+  def test_value_omission
+    x = 1
+    y = 2
+    assert_equal({x: 1, y: 2}, {x:, y:})
+    assert_equal({one: 1, two: 2}, {one:, two:})
+  end
+
+  private
+
+  def one
+    1
+  end
+
+  def two
+    2
+  end
 end