Index: /trunk/src/wp-admin/includes/class-custom-background.php
===================================================================
--- /trunk/src/wp-admin/includes/class-custom-background.php	(revision 62703)
+++ /trunk/src/wp-admin/includes/class-custom-background.php	(revision 62704)
@@ -570,4 +570,6 @@
 	 *
 	 * @since 4.1.0
+	 *
+	 * @return never
 	 */
 	public function ajax_background_add() {
@@ -613,4 +615,6 @@
 	 * @since 3.4.0
 	 * @deprecated 3.5.0
+	 *
+	 * @return never
 	 */
 	public function wp_set_background_image() {
Index: /trunk/src/wp-admin/includes/class-custom-image-header.php
===================================================================
--- /trunk/src/wp-admin/includes/class-custom-image-header.php	(revision 62703)
+++ /trunk/src/wp-admin/includes/class-custom-image-header.php	(revision 62704)
@@ -1384,4 +1384,6 @@
 	 *
 	 * @since 3.9.0
+	 *
+	 * @return never
 	 */
 	public function ajax_header_crop() {
@@ -1453,4 +1455,6 @@
 	 *
 	 * @since 3.9.0
+	 *
+	 * @return never
 	 */
 	public function ajax_header_add() {
@@ -1481,4 +1485,6 @@
 	 *
 	 * @since 3.9.0
+	 *
+	 * @return never
 	 */
 	public function ajax_header_remove() {
Index: /trunk/src/wp-admin/includes/class-wp-importer.php
===================================================================
--- /trunk/src/wp-admin/includes/class-wp-importer.php	(revision 62703)
+++ /trunk/src/wp-admin/includes/class-wp-importer.php	(revision 62704)
@@ -299,6 +299,9 @@
  * @param string $param    The parameter name to retrieve.
  * @param bool   $required Optional. Whether the parameter is required. Default false.
- * @return string|true|null|never The parameter value or true if found, null otherwise.
- *                                The function exits when a required parameter is missing.
+ * @return string|true|null The parameter value, or true if the parameter was supplied
+ *                          without a value, or null if it was not supplied at all.
+ *                          Never returns when `$required` is true and the parameter
+ *                          is missing, as the function exits instead.
+ * @phpstan-return ( $required is true ? string|true : string|true|null )
  */
 function get_cli_args( $param, $required = false ) {
Index: /trunk/src/wp-admin/includes/class-wp-list-table.php
===================================================================
--- /trunk/src/wp-admin/includes/class-wp-list-table.php	(revision 62703)
+++ /trunk/src/wp-admin/includes/class-wp-list-table.php	(revision 62704)
@@ -1844,4 +1844,6 @@
 	 *
 	 * @since 3.1.0
+	 *
+	 * @return never
 	 */
 	public function ajax_response() {
Index: /trunk/src/wp-admin/includes/comment.php
===================================================================
--- /trunk/src/wp-admin/includes/comment.php	(revision 62703)
+++ /trunk/src/wp-admin/includes/comment.php	(revision 62704)
@@ -295,4 +295,5 @@
  *
  * @param string $msg Error Message. Assumed to contain HTML and be sanitized.
+ * @return never
  */
 function comment_footer_die( $msg ) {
Index: /trunk/src/wp-admin/includes/post.php
===================================================================
--- /trunk/src/wp-admin/includes/post.php	(revision 62703)
+++ /trunk/src/wp-admin/includes/post.php	(revision 62704)
@@ -2184,4 +2184,5 @@
  *
  * @param int $post_id Optional. Post ID.
+ * @return never
  */
 function redirect_post( $post_id = 0 ) {
Index: /trunk/src/wp-admin/includes/theme-install.php
===================================================================
--- /trunk/src/wp-admin/includes/theme-install.php	(revision 62703)
+++ /trunk/src/wp-admin/includes/theme-install.php	(revision 62704)
@@ -252,4 +252,6 @@
  *
  * @global WP_Theme_Install_List_Table $wp_list_table
+ *
+ * @return never
  */
 function install_theme_information() {
Index: /trunk/src/wp-includes/canonical.php
===================================================================
--- /trunk/src/wp-includes/canonical.php	(revision 62703)
+++ /trunk/src/wp-includes/canonical.php	(revision 62704)
@@ -39,4 +39,5 @@
  * @param bool   $do_redirect   Optional. Redirect to the new URL.
  * @return string|null The string of the URL, if redirect needed. Never returns if a redirect occurs, depending on $do_redirect.
+ * @phpstan-return ( $do_redirect is true ? null : string|null )
  */
 function redirect_canonical( $requested_url = null, $do_redirect = true ) {
Index: /trunk/src/wp-includes/class-wp-ajax-response.php
===================================================================
--- /trunk/src/wp-includes/class-wp-ajax-response.php	(revision 62703)
+++ /trunk/src/wp-includes/class-wp-ajax-response.php	(revision 62704)
@@ -149,4 +149,6 @@
 	 *
 	 * @since 2.1.0
+	 *
+	 * @return never
 	 */
 	public function send() {
Index: /trunk/src/wp-includes/class-wp-customize-manager.php
===================================================================
--- /trunk/src/wp-includes/class-wp-customize-manager.php	(revision 62703)
+++ /trunk/src/wp-includes/class-wp-customize-manager.php	(revision 62704)
@@ -448,4 +448,5 @@
 	 * @param string|WP_Error $ajax_message Ajax return.
 	 * @param string          $message      Optional. UI message.
+	 * @return never
 	 */
 	protected function wp_die( $ajax_message, $message = null ) {
@@ -2428,4 +2429,6 @@
 	 * @since 3.4.0
 	 * @since 4.7.0 The semantics of this method have changed to update a changeset, optionally to also change the status and other attributes.
+	 *
+	 * @return never
 	 */
 	public function save() {
@@ -3387,4 +3390,6 @@
 	 *
 	 * @since 4.9.0
+	 *
+	 * @return never
 	 */
 	public function handle_override_changeset_lock_request() {
@@ -3686,4 +3691,6 @@
 	 *
 	 * @since 4.2.0
+	 *
+	 * @return never
 	 */
 	public function refresh_nonces() {
@@ -3699,4 +3706,6 @@
 	 *
 	 * @since 4.9.0
+	 *
+	 * @return never
 	 */
 	public function handle_dismiss_autosave_or_lock_request() {
@@ -5825,4 +5834,6 @@
 	 *
 	 * @since 4.9.0
+	 *
+	 * @return never
 	 */
 	public function handle_load_themes_request() {
Index: /trunk/src/wp-includes/class-wp-customize-nav-menus.php
===================================================================
--- /trunk/src/wp-includes/class-wp-customize-nav-menus.php	(revision 62703)
+++ /trunk/src/wp-includes/class-wp-customize-nav-menus.php	(revision 62704)
@@ -89,4 +89,6 @@
 	 *
 	 * @since 4.3.0
+	 *
+	 * @return never
 	 */
 	public function ajax_load_available_items() {
@@ -314,4 +316,6 @@
 	 *
 	 * @since 4.3.0
+	 *
+	 * @return never
 	 */
 	public function ajax_search_available_items() {
@@ -996,4 +1000,6 @@
 	 *
 	 * @since 4.7.0
+	 *
+	 * @return never
 	 */
 	public function ajax_insert_auto_draft_post() {
Index: /trunk/src/wp-includes/class-wp-customize-widgets.php
===================================================================
--- /trunk/src/wp-includes/class-wp-customize-widgets.php	(revision 62703)
+++ /trunk/src/wp-includes/class-wp-customize-widgets.php	(revision 62704)
@@ -1698,4 +1698,6 @@
 	 *
 	 * @see wp_ajax_save_widget()
+	 *
+	 * @return never
 	 */
 	public function wp_ajax_update_widget() {
Index: /trunk/src/wp-includes/class-wp-plugin-dependencies.php
===================================================================
--- /trunk/src/wp-includes/class-wp-plugin-dependencies.php	(revision 62703)
+++ /trunk/src/wp-includes/class-wp-plugin-dependencies.php	(revision 62704)
@@ -434,4 +434,6 @@
 	 *
 	 * @since 6.5.0
+	 *
+	 * @return never
 	 */
 	public static function check_plugin_dependencies_during_ajax() {
Index: /trunk/src/wp-includes/functions.php
===================================================================
--- /trunk/src/wp-includes/functions.php	(revision 62703)
+++ /trunk/src/wp-includes/functions.php	(revision 62704)
@@ -1748,4 +1748,6 @@
  *
  * @since 5.4.0
+ *
+ * @return never
  */
 function do_favicon() {
@@ -3713,4 +3715,5 @@
  *
  * @param string $action The nonce action.
+ * @return never
  */
 function wp_nonce_ays( $action ) {
@@ -3892,4 +3895,5 @@
  * @param string          $title   Optional. Error title. Default empty string.
  * @param string|array    $args    Optional. Arguments to control behavior. Default empty array.
+ * @phpstan-return ( $args is array{exit: false} ? void : never )
  */
 function _default_wp_die_handler( $message, $title = '', $args = array() ) {
@@ -4094,4 +4098,5 @@
  * @param string       $title   Optional. Error title (unused). Default empty string.
  * @param string|array $args    Optional. Arguments to control behavior. Default empty array.
+ * @phpstan-return ( $args is array{exit: false} ? void : never )
  */
 function _ajax_wp_die_handler( $message, $title = '', $args = array() ) {
@@ -4136,4 +4141,5 @@
  * @param string       $title   Optional. Error title. Default empty string.
  * @param string|array $args    Optional. Arguments to control behavior. Default empty array.
+ * @phpstan-return ( $args is array{exit: false} ? void : never )
  */
 function _json_wp_die_handler( $message, $title = '', $args = array() ) {
@@ -4178,4 +4184,5 @@
  * @param string       $title   Optional. Error title. Default empty string.
  * @param string|array $args    Optional. Arguments to control behavior. Default empty array.
+ * @phpstan-return ( $args is array{exit: false} ? void : never )
  */
 function _jsonp_wp_die_handler( $message, $title = '', $args = array() ) {
@@ -4226,4 +4233,5 @@
  * @param string       $title   Optional. Error title. Default empty string.
  * @param string|array $args    Optional. Arguments to control behavior. Default empty array.
+ * @phpstan-return ( $args is array{exit: false} ? void : never )
  */
 function _xmlrpc_wp_die_handler( $message, $title = '', $args = array() ) {
@@ -4256,4 +4264,5 @@
  * @param string       $title   Optional. Error title. Default empty string.
  * @param string|array $args    Optional. Arguments to control behavior. Default empty array.
+ * @phpstan-return ( $args is array{exit: false} ? void : never )
  */
 function _xml_wp_die_handler( $message, $title = '', $args = array() ) {
@@ -4301,4 +4310,5 @@
  * @param string       $title   Optional. Error title (unused). Default empty string.
  * @param string|array $args    Optional. Arguments to control behavior. Default empty array.
+ * @phpstan-return ( $args is array{exit: false} ? void : never )
  */
 function _scalar_wp_die_handler( $message = '', $title = '', $args = array() ) {
@@ -4565,4 +4575,5 @@
  * @param int   $status_code Optional. The HTTP status code to output. Default null.
  * @param int   $flags       Optional. Options to be passed to json_encode(). Default 0.
+ * @return never
  */
 function wp_send_json( $response, $status_code = null, $flags = 0 ) {
@@ -4612,4 +4623,5 @@
  * @param int   $status_code Optional. The HTTP status code to output. Default null.
  * @param int   $flags       Optional. Options to be passed to json_encode(). Default 0.
+ * @return never
  */
 function wp_send_json_success( $value = null, $status_code = null, $flags = 0 ) {
@@ -4639,4 +4651,5 @@
  * @param int   $status_code Optional. The HTTP status code to output. Default null.
  * @param int   $flags       Optional. Options to be passed to json_encode(). Default 0.
+ * @return never
  */
 function wp_send_json_error( $value = null, $status_code = null, $flags = 0 ) {
Index: /trunk/src/wp-includes/ms-deprecated.php
===================================================================
--- /trunk/src/wp-includes/ms-deprecated.php	(revision 62703)
+++ /trunk/src/wp-includes/ms-deprecated.php	(revision 62704)
@@ -86,4 +86,6 @@
  * @deprecated 3.0.0 Use wp_die()
  * @see wp_die()
+ *
+ * @return never
  */
 function graceful_fail( $message ) {
@@ -269,4 +271,5 @@
  *
  * @param string $url Optional. Redirect URL. Default empty.
+ * @return never
  */
 function wpmu_admin_do_redirect( $url = '' ) {
Index: /trunk/src/wp-includes/ms-load.php
===================================================================
--- /trunk/src/wp-includes/ms-load.php	(revision 62703)
+++ /trunk/src/wp-includes/ms-load.php	(revision 62704)
@@ -466,4 +466,5 @@
  * @param string $domain The requested domain for the error to reference.
  * @param string $path   The requested path for the error to reference.
+ * @return never
  */
 function ms_not_installed( $domain, $path ) {
Index: /trunk/src/wp-includes/option.php
===================================================================
--- /trunk/src/wp-includes/option.php	(revision 62703)
+++ /trunk/src/wp-includes/option.php	(revision 62704)
@@ -560,4 +560,6 @@
  *
  * @param string $option Option name.
+ * @return void Never returns if `$option` is protected, as the function dies in that case.
+ * @phpstan-return ( $option is 'alloptions'|'notoptions' ? never : void )
  */
 function wp_protect_special_option( $option ) {
Index: /trunk/src/wp-includes/pluggable.php
===================================================================
--- /trunk/src/wp-includes/pluggable.php	(revision 62703)
+++ /trunk/src/wp-includes/pluggable.php	(revision 62704)
@@ -1368,5 +1368,7 @@
 	 * @return int|false 1 if the nonce is valid and generated between 0-12 hours ago,
 	 *                   2 if the nonce is valid and generated between 12-24 hours ago.
-	 *                   False if the nonce is invalid.
+	 *                   False if the nonce is invalid. Only possible when `$action` is -1,
+	 *                   as the function otherwise exits rather than returning false.
+	 * @phpstan-return ( $action is -1 ? int|false : int )
 	 */
 	function check_admin_referer( $action = -1, $query_arg = '_wpnonce' ) {
@@ -1413,5 +1415,7 @@
 	 * @return int|false 1 if the nonce is valid and generated between 0-12 hours ago,
 	 *                   2 if the nonce is valid and generated between 12-24 hours ago.
-	 *                   False if the nonce is invalid.
+	 *                   False if the nonce is invalid. Only possible when `$stop` is false,
+	 *                   as the function otherwise exits rather than returning false.
+	 * @phpstan-return ( $stop is true ? int : int|false )
 	 */
 	function check_ajax_referer( $action = -1, $query_arg = false, $stop = true ) {
Index: /trunk/src/wp-includes/sitemaps/class-wp-sitemaps-stylesheet.php
===================================================================
--- /trunk/src/wp-includes/sitemaps/class-wp-sitemaps-stylesheet.php	(revision 62703)
+++ /trunk/src/wp-includes/sitemaps/class-wp-sitemaps-stylesheet.php	(revision 62704)
@@ -21,4 +21,5 @@
 	 *
 	 * @param string $type Stylesheet type. Either 'sitemap' or 'index'.
+	 * @return never
 	 */
 	public function render_stylesheet( $type ) {
Index: /trunk/src/wp-trackback.php
===================================================================
--- /trunk/src/wp-trackback.php	(revision 62703)
+++ /trunk/src/wp-trackback.php	(revision 62704)
@@ -25,6 +25,9 @@
  *
  * @param int|bool $error         Whether there was an error.
- *                                Default '0'. Accepts '0' or '1', true or false.
+ *                                Default 0. Accepts 0 or 1, true or false.
  * @param string   $error_message Error message if an error occurred. Default empty string.
+ * @return void Never returns if `$error` is truthy, as the function dies after
+ *              sending the error response.
+ * @phpstan-return ( $error is 0|false ? void : never )
  */
 function trackback_response( $error = 0, $error_message = '' ) {
