diff --git a/core/includes/theme.inc b/core/includes/theme.inc
index f180cbd..030a238 100644
--- a/core/includes/theme.inc
+++ b/core/includes/theme.inc
@@ -1760,10 +1760,10 @@ function drupal_common_theme() {
       'variables' => array('uri' => NULL, 'width' => NULL, 'height' => NULL, 'alt' => '', 'title' => NULL, 'attributes' => array(), 'sizes' => NULL, 'srcset' => array(), 'style_name' => NULL),
     ),
     'breadcrumb' => array(
-      'variables' => array('links' => array()),
+      'variables' => array('links' => array(), 'breadcrumb' => NULL),
     ),
     'table' => array(
-      'variables' => array('header' => NULL, 'rows' => NULL, 'footer' => NULL, 'attributes' => array(), 'caption' => NULL, 'colgroups' => array(), 'sticky' => FALSE, 'responsive' => TRUE, 'empty' => ''),
+      'variables' => array('header' => NULL, 'header_columns' => NULL, 'no_striping' => NULL, 'rows' => NULL, 'footer' => NULL, 'attributes' => array(), 'caption' => NULL, 'colgroups' => array(), 'sticky' => FALSE, 'responsive' => TRUE, 'empty' => ''),
     ),
     'tablesort_indicator' => array(
       'variables' => array('style' => NULL),
diff --git a/core/lib/Drupal/Core/Theme/ThemeManager.php b/core/lib/Drupal/Core/Theme/ThemeManager.php
index ed18039..b183f5a 100644
--- a/core/lib/Drupal/Core/Theme/ThemeManager.php
+++ b/core/lib/Drupal/Core/Theme/ThemeManager.php
@@ -3,6 +3,7 @@
 namespace Drupal\Core\Theme;
 
 use Drupal\Component\Render\MarkupInterface;
+use Drupal\Core\Render\Element;
 use Drupal\Core\Render\Markup;
 use Drupal\Core\Routing\RouteMatchInterface;
 use Drupal\Core\Routing\StackedRouteMatchInterface;
@@ -282,9 +283,17 @@ public function render($hook, array $variables) {
       }
     }
     if (isset($info['preprocess functions'])) {
+      $original_variable_children = array_filter(array_keys($variables), '\Drupal\Core\Render\Element::child');
       foreach ($info['preprocess functions'] as $preprocessor_function) {
         if (function_exists($preprocessor_function)) {
           $preprocessor_function($variables, $hook, $info);
+          if ($preprocessor_function === 'template_preprocess') {
+            $original_variable_children = array_filter(array_keys($variables), '\Drupal\Core\Render\Element::child');
+          }
+          $variable_children = array_filter(array_keys($variables), '\Drupal\Core\Render\Element::child');
+          if ($variable_children !== $original_variable_children && isset($info['variables'])) {
+            throw new \Exception("$preprocessor_function added the following keys: " . implode(', ', array_diff($variable_children, $original_variable_children, array_keys($info['variables']))));
+          }
         }
       }
       // Allow theme preprocess functions to set $variables['#attached'] and
diff --git a/core/modules/block_content/block_content.module b/core/modules/block_content/block_content.module
index e0b5729..b933e8f 100644
--- a/core/modules/block_content/block_content.module
+++ b/core/modules/block_content/block_content.module
@@ -45,7 +45,7 @@ function block_content_help($route_name, RouteMatchInterface $route_match) {
 function block_content_theme($existing, $type, $theme, $path) {
   return array(
     'block_content_add_list' => array(
-      'variables' => array('content' => NULL),
+      'variables' => array('content' => NULL, 'types' => NULL),
       'file' => 'block_content.pages.inc',
     ),
   );
diff --git a/core/modules/book/book.module b/core/modules/book/book.module
index ecccb74..da34f2d 100644
--- a/core/modules/book/book.module
+++ b/core/modules/book/book.module
@@ -63,7 +63,7 @@ function book_theme() {
       'variables' => array('items' => array(), 'attributes' => array()),
     ),
     'book_export_html' => array(
-      'variables' => array('title' => NULL, 'contents' => NULL, 'depth' => NULL),
+      'variables' => array('title' => NULL, 'contents' => NULL, 'depth' => NULL, 'base_url' => NULL, 'language' => NULL, 'language_rtl' => NULL, 'html_attributes' => NULL),
     ),
     'book_all_books_block' => array(
       'render element' => 'book_menus',
diff --git a/core/modules/ckeditor/ckeditor.module b/core/modules/ckeditor/ckeditor.module
index 115afe2..b455539 100644
--- a/core/modules/ckeditor/ckeditor.module
+++ b/core/modules/ckeditor/ckeditor.module
@@ -46,7 +46,7 @@ function ckeditor_theme() {
   return array(
     'ckeditor_settings_toolbar' => array(
       'file' => 'ckeditor.admin.inc',
-      'variables' => array('editor' => NULL, 'plugins' => NULL),
+      'variables' => array('editor' => NULL, 'plugins' => NULL, 'active_buttons' => NULL, 'disabled_buttons' => NULL, 'multiple_buttons' => NULL),
     ),
   );
 }
diff --git a/core/modules/field_ui/field_ui.module b/core/modules/field_ui/field_ui.module
index 5134cad..3e36e92 100644
--- a/core/modules/field_ui/field_ui.module
+++ b/core/modules/field_ui/field_ui.module
@@ -53,6 +53,7 @@ function field_ui_theme() {
     'field_ui_table' => array(
       'variables' => array(
         'header' => NULL,
+        'header_columns' => NULL,
         'rows' => NULL,
         'footer' => NULL,
         'attributes' => array(),
@@ -61,6 +62,7 @@ function field_ui_theme() {
         'sticky' => FALSE,
         'responsive' => TRUE,
         'empty' => '',
+        'no_striping' => NULL,
       ),
     ),
   );
diff --git a/core/modules/file/file.module b/core/modules/file/file.module
index c63fff4..af01364 100644
--- a/core/modules/file/file.module
+++ b/core/modules/file/file.module
@@ -566,7 +566,7 @@ function file_theme() {
   return array(
     // From file.module.
     'file_link' => array(
-      'variables' => array('file' => NULL, 'description' => NULL, 'attributes' => array()),
+      'variables' => array('file' => NULL, 'description' => NULL, 'attributes' => array(), 'link' => NULL),
     ),
     'file_managed_file' => array(
       'render element' => 'element',
@@ -578,7 +578,7 @@ function file_theme() {
       'file' => 'file.field.inc',
     ),
     'file_upload_help' => array(
-      'variables' => array('description' => NULL, 'upload_validators' => NULL, 'cardinality' => NULL),
+      'variables' => array('descriptions' => NULL, 'upload_validators' => NULL, 'cardinality' => NULL),
       'file' => 'file.field.inc',
     ),
   );
diff --git a/core/modules/filter/filter.module b/core/modules/filter/filter.module
index f52614a..7a6c665 100644
--- a/core/modules/filter/filter.module
+++ b/core/modules/filter/filter.module
@@ -55,17 +55,18 @@ function filter_help($route_name, RouteMatchInterface $route_match) {
 function filter_theme() {
   return array(
     'filter_tips' => array(
-      'variables' => array('tips' => NULL, 'long' => FALSE),
+      'variables' => array('tips' => NULL, 'long' => FALSE, 'multiple' => NULL),
     ),
     'text_format_wrapper' => array(
       'variables' => array(
         'children' => NULL,
         'description' => NULL,
         'attributes' => array(),
+        'aria_description' => NULL,
       ),
     ),
     'filter_guidelines' => array(
-      'variables' => array('format' => NULL),
+      'variables' => array('format' => NULL, 'tips' => NULL),
     ),
     'filter_caption' => array(
       'variables' => array(
diff --git a/core/modules/forum/forum.module b/core/modules/forum/forum.module
index 8d4a9f4..649cf99 100644
--- a/core/modules/forum/forum.module
+++ b/core/modules/forum/forum.module
@@ -86,7 +86,7 @@ function forum_help($route_name, RouteMatchInterface $route_match) {
 function forum_theme() {
   return array(
     'forums' => array(
-      'variables' => array('forums' => array(), 'topics' => array(), 'topics_pager' => array(), 'parents' => NULL, 'term' => NULL, 'sortby' => NULL, 'forum_per_page' => NULL, 'header' => array()),
+      'variables' => array('forums' => array(), 'topics' => array(), 'topics_pager' => array(), 'parents' => NULL, 'term' => NULL, 'sortby' => NULL, 'forum_per_page' => NULL, 'header' => array(), 'tid' => NULL, 'forums_defined' => NULL),
     ),
     'forum_list' => array(
       'variables' => array('forums' => NULL, 'parents' => NULL, 'tid' => NULL),
diff --git a/core/modules/image/image.module b/core/modules/image/image.module
index 7f8314a..b9af6d7 100644
--- a/core/modules/image/image.module
+++ b/core/modules/image/image.module
@@ -129,7 +129,7 @@ function image_theme() {
 
     // Theme functions in image.admin.inc.
     'image_style_preview' => array(
-      'variables' => array('style' => NULL),
+      'variables' => array('style' => NULL, 'style_id' => NULL, 'style_name' => NULL, 'cache_bypass' => NULL, 'original' => NULL, 'preview' => NULL, 'derivative' => NULL),
       'file' => 'image.admin.inc',
     ),
     'image_anchor' => array(
diff --git a/core/modules/locale/locale.module b/core/modules/locale/locale.module
index aecad6c..e3e04af 100644
--- a/core/modules/locale/locale.module
+++ b/core/modules/locale/locale.module
@@ -184,7 +184,7 @@ function locale_help($route_name, RouteMatchInterface $route_match) {
 function locale_theme() {
   return array(
     'locale_translation_last_check' => array(
-      'variables' => array('last' => NULL),
+      'variables' => array('last' => NULL, 'last_checked' => NULL, 'time' => NULL, 'link' => NULL,),
       'file' => 'locale.pages.inc',
     ),
     'locale_translation_update_info' => array(
diff --git a/core/modules/node/node.module b/core/modules/node/node.module
index 5c86a13..6e217f4 100644
--- a/core/modules/node/node.module
+++ b/core/modules/node/node.module
@@ -136,7 +136,7 @@ function node_theme() {
       'render element' => 'elements',
     ),
     'node_add_list' => array(
-      'variables' => array('content' => NULL),
+      'variables' => array('content' => NULL, 'types' => NULL),
     ),
     'node_edit_form' => array(
       'render element' => 'form',
diff --git a/core/modules/search/search.module b/core/modules/search/search.module
index c36aa44..e27dac7 100644
--- a/core/modules/search/search.module
+++ b/core/modules/search/search.module
@@ -99,7 +99,7 @@ function search_help($route_name, RouteMatchInterface $route_match) {
 function search_theme() {
   return array(
     'search_result' => array(
-      'variables' => array('result' => NULL, 'plugin_id' => NULL),
+      'variables' => array('result' => NULL, 'plugin_id' => NULL, 'url' => NULL, 'title' => NULL, 'snippet' => NULL, 'info_split' => NULL, 'info' => NULL),
       'file' => 'search.pages.inc',
     ),
   );
diff --git a/core/modules/system/system.module b/core/modules/system/system.module
index 1f553da..975c90a 100644
--- a/core/modules/system/system.module
+++ b/core/modules/system/system.module
@@ -202,7 +202,7 @@ function system_theme() {
       'file' => 'system.admin.inc',
     ),
     'admin_page' => array(
-      'variables' => array('blocks' => NULL),
+      'variables' => array('blocks' => NULL, 'system_compact_link' => NULL, 'containers' => NULL),
       'file' => 'system.admin.inc',
     ),
     'admin_block' => array(
@@ -210,11 +210,11 @@ function system_theme() {
       'file' => 'system.admin.inc',
     ),
     'admin_block_content' => array(
-      'variables' => array('content' => NULL),
+      'variables' => array('content' => NULL, 'compact' => NULL),
       'file' => 'system.admin.inc',
     ),
     'system_admin_index' => array(
-      'variables' => array('menu_items' => NULL),
+      'variables' => array('menu_items' => NULL, 'system_compact_link' => NULL, 'containers' => NULL,),
       'file' => 'system.admin.inc',
     ),
     'entity_add_list' => array(
diff --git a/core/modules/update/update.module b/core/modules/update/update.module
index f45b589..2b11154 100644
--- a/core/modules/update/update.module
+++ b/core/modules/update/update.module
@@ -187,10 +187,10 @@ function _update_manager_access() {
 function update_theme() {
   return array(
     'update_last_check' => array(
-      'variables' => array('last' => 0),
+      'variables' => array('last' => 0,'time' => NULL, 'link' => NULL),
     ),
     'update_report' => array(
-      'variables' => array('data' => NULL),
+      'variables' => array('data' => NULL, 'last_checked' => NULL, 'project_types' => NULL),
       'file' => 'update.report.inc',
     ),
     'update_project_status' => array(
diff --git a/core/modules/user/user.module b/core/modules/user/user.module
index 90b813f..ca4c092 100644
--- a/core/modules/user/user.module
+++ b/core/modules/user/user.module
@@ -100,7 +100,7 @@ function user_theme() {
       'render element' => 'elements',
     ),
     'username' => array(
-      'variables' => array('account' => NULL, 'attributes' => array(), 'link_options' => array()),
+      'variables' => array('account' => NULL, 'attributes' => array(), 'link_options' => array(), 'link_path' => NULL, 'extra' => NULL, 'uid' => NULL, 'name_raw' => NULL, 'truncated' => NULL, 'name' => NULL, 'profile_access' => NULL),
     ),
   );
 }
diff --git a/core/modules/views/views.module b/core/modules/views/views.module
index e1a4d8c..c5abf7f 100644
--- a/core/modules/views/views.module
+++ b/core/modules/views/views.module
@@ -112,6 +112,10 @@ function views_theme($existing, $type, $theme, $path) {
       'title' => '',
       'attachment_before' => array(),
       'attachment_after' => array(),
+      'css_name' => NULL,
+      'id' => NULL,
+      'display_id' => NULL,
+      'dom_id' => NULL,
     ),
     'style' => array('view' => NULL, 'options' => NULL, 'rows' => NULL, 'title' => NULL),
     'row' => array('view' => NULL, 'options' => NULL, 'row' => NULL, 'field_alias' => NULL),
@@ -124,11 +128,14 @@ function views_theme($existing, $type, $theme, $path) {
 
   // Default view themes
   $hooks['views_view_field'] = $base + array(
-    'variables' => array('view' => NULL, 'field' => NULL, 'row' => NULL),
+    'variables' => array('view' => NULL, 'field' => NULL, 'row' => NULL, 'output' => NULL),
   );
   $hooks['views_view_grouping'] = $base + array(
     'variables' => array('view' => NULL, 'grouping' => NULL, 'grouping_level' => NULL, 'rows' => NULL, 'title' => NULL),
   );
+  $hooks['views_view_rss'] = $base + [
+    'variables' => ['view' => NULL, 'options' => NULL, 'rows' => NULL, 'title' => NULL, 'description' => NULL, 'link' => NULL, 'langcode' => NULL, 'namespaces' => NULL, 'items' => NULL, 'channel_elements' => NULL],
+  ];
 
   // Only display, pager, row, and style plugins can provide theme hooks.
   $plugin_types = [
