diff --git a/src/highlight.c b/src/highlight.c
index 02790c6..a2935f5 100644
--- a/src/highlight.c
+++ b/src/highlight.c
@@ -2332,39 +2332,6 @@
     return INVALCOLOR;
 }
 
-// Maps the given name to the given color value, overwriting any current
-// mapping. If allocation fails the named color will no longer exist in the
-// table and the user will receive an error message.
-    void
-save_colorname_hexstr(int r, int g, int b, char_u *name)
-{
-    int        result;
-    dict_T     *colornames_table;
-    dictitem_T *existing;
-    char_u     hexstr[8];
-
-    if (vim_snprintf((char *)hexstr, sizeof(hexstr),
-						 "#%02x%02x%02x", r, g, b) < 0)
-    {
-	semsg(_(e_cannot_allocate_color_str), name);
-	return;
-    }
-
-    colornames_table = get_vim_var_dict(VV_COLORNAMES);
-    // The colornames_table dict is safe to use here because it is allocated at
-    // startup in evalvars.c
-    existing = dict_find(colornames_table, name, -1);
-    if (existing != NULL)
-    {
-	dictitem_remove(colornames_table, existing);
-	existing = NULL; // dictitem_remove freed the item
-    }
-
-    result = dict_add_string(colornames_table, (char *)name, hexstr);
-    if (result == FAIL)
-	semsg(_(e_cannot_allocate_color_str), name);
-}
-
 /*
  * Load a default color list. Intended to support legacy color names but allows
  * the user to override the color values. Only loaded once.
diff --git a/src/proto/highlight.pro b/src/proto/highlight.pro
index 7e2631d..b17f40d 100644
--- a/src/proto/highlight.pro
+++ b/src/proto/highlight.pro
@@ -16,7 +16,6 @@
 guicolor_T color_name2handle(char_u *name);
 guicolor_T decode_hex_color(char_u *hex);
 guicolor_T colorname2rgb(char_u *name);
-void save_colorname_hexstr(int r, int g, int b, char_u *name);
 void load_default_colors_lists(void);
 guicolor_T gui_get_color_cmn(char_u *name);
 guicolor_T gui_get_rgb_color_cmn(int r, int g, int b);
diff --git a/src/testdir/test_highlight.vim b/src/testdir/test_highlight.vim
index 8a7d1d9..51fd414 100644
--- a/src/testdir/test_highlight.vim
+++ b/src/testdir/test_highlight.vim
@@ -6,6 +6,12 @@
 source script_util.vim
 source vim9.vim
 
+func ClearDict(d)
+  for k in keys(a:d)
+    call remove(a:d, k)
+  endfor
+endfunc
+
 func Test_highlight()
   " basic test if ":highlight" doesn't crash
   highlight
@@ -936,19 +942,30 @@
 endfunc
 
 func Test_colornames_assignment_and_lookup()
+  CheckAnyOf Feature:gui_running Feature:termguicolors
+
   " Ensure highlight command can find custom color.
   let v:colornames['a redish white'] = '#ffeedd'
   highlight Normal guifg='a redish white'
   highlight clear
+  call ClearDict(v:colornames)
 endfunc
 
 func Test_colornames_default_list()
+  CheckAnyOf Feature:gui_running Feature:termguicolors
+
   " Ensure default lists are loaded automatically and can be used for all gui fields.
+  call assert_equal(0, len(v:colornames))
   highlight Normal guifg='rebecca purple' guibg='rebecca purple' guisp='rebecca purple'
+  call assert_notequal(0, len(v:colornames))
+  echo v:colornames['rebecca purple']
   highlight clear
+  call ClearDict(v:colornames)
 endfunc
 
 func Test_colornames_overwrite_default()
+  CheckAnyOf Feature:gui_running Feature:termguicolors
+
   " Ensure entries in v:colornames can be overwritten.
   " Load default color scheme to trigger default color list loading.
   colorscheme default
@@ -961,6 +978,10 @@
 endfunc
 
 func Test_colornames_assignment_and_unassignment()
+  " No feature check is needed for this test because the v:colornames dict
+  " always exists with +eval. The feature checks are only required for
+  " commands that do color lookup.
+
   " Ensure we cannot overwrite the v:colornames dict.
   call assert_fails("let v:colornames = {}", 'E46:')
 
diff --git a/src/version.c b/src/version.c
index 8e2a10b..e294d8e 100644
--- a/src/version.c
+++ b/src/version.c
@@ -758,6 +758,8 @@
 static int included_patches[] =
 {   /* Add new patch number below this line */
 /**/
+    3590,
+/**/
     3589,
 /**/
     3588,
