patch 7.4.2160
Problem:    setmatches() mixes up values. (Nikolai Pavlov)
Solution:   Save the string instead of reusing a shared buffer.
diff --git a/src/testdir/test_expr.vim b/src/testdir/test_expr.vim
index 0800039..557d749 100644
--- a/src/testdir/test_expr.vim
+++ b/src/testdir/test_expr.vim
@@ -194,3 +194,12 @@
   let OneByRef = funcref('One')
   call assert_equal(2, OneByRef())
 endfunc
+
+func Test_setmatches()
+  hi def link 1 Comment
+  hi def link 2 PreProc
+  let set = [{"group": 1, "pattern": 2, "id": 3, "priority": 4, "conceal": 5}]
+  let exp = [{"group": '1', "pattern": '2', "id": 3, "priority": 4, "conceal": '5'}]
+  call setmatches(set)
+  call assert_equal(exp, getmatches())
+endfunc