use new readline function types (closes #20374)
diff --git a/Misc/NEWS b/Misc/NEWS
index 4372701..2de9b31 100644
--- a/Misc/NEWS
+++ b/Misc/NEWS
@@ -56,6 +56,8 @@
   loop this caused is now avoided by checking if the expected context is
   already set before trying to fix it.
 
+- Issue #20374: Fix build with GNU readline >= 6.3.
+
 - Issue #20311: select.epoll.poll() now rounds the timeout away from zero,
   instead of rounding towards zero. For example, a timeout of one microsecond
   is now rounded to one millisecond, instead of being rounded to zero.
diff --git a/Modules/readline.c b/Modules/readline.c
index 096c6d1..8cf9855 100644
--- a/Modules/readline.c
+++ b/Modules/readline.c
@@ -936,12 +936,12 @@
     rl_bind_key_in_map ('\t', rl_complete, emacs_meta_keymap);
     rl_bind_key_in_map ('\033', rl_complete, emacs_meta_keymap);
     /* Set our hook functions */
-    rl_startup_hook = (Function *)on_startup_hook;
+    rl_startup_hook = (rl_hook_func_t *)on_startup_hook;
 #ifdef HAVE_RL_PRE_INPUT_HOOK
-    rl_pre_input_hook = (Function *)on_pre_input_hook;
+    rl_pre_input_hook = (rl_hook_func_t *)on_pre_input_hook;
 #endif
     /* Set our completion function */
-    rl_attempted_completion_function = (CPPFunction *)flex_complete;
+    rl_attempted_completion_function = (rl_completion_func_t *)flex_complete;
     /* Set Python word break characters */
     completer_word_break_characters =
         rl_completer_word_break_characters =