diff --git a/core/includes/theme.inc b/core/includes/theme.inc
index f180cbd..b0c0402 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),
@@ -1791,7 +1791,7 @@ function drupal_common_theme() {
       'render element' => 'page',
     ),
     'maintenance_task_list' => array(
-      'variables' => array('items' => NULL, 'active' => NULL, 'variant' => NULL),
+      'variables' => array('items' => NULL, 'active' => NULL, 'variant' => NULL, 'tasks' => NULL),
     ),
     'authorize_report' => array(
       'variables' => ['messages' => [], 'attributes' => []],
diff --git a/core/lib/Drupal/Core/Theme/ThemeManager.php b/core/lib/Drupal/Core/Theme/ThemeManager.php
index ed18039..ba37501 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' || strpos($preprocessor_function, 'template_preprocess_views_') !== FALSE) {
+            $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 (isset($info['variables']) && array_diff($variable_children, $original_variable_children, array_keys($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..a2ffc1f 100644
--- a/core/modules/book/book.module
+++ b/core/modules/book/book.module
@@ -57,19 +57,19 @@ function book_help($route_name, RouteMatchInterface $route_match) {
 function book_theme() {
   return array(
     'book_navigation' => array(
-      'variables' => array('book_link' => NULL),
+      'variables' => array('book_link' => NULL, 'book_id' => NULL, 'book_title' => NULL, 'book_url' => NULL, 'current_depth' => NULL, 'tree' => NULL, 'has_links' => NULL, 'prev_url' => NULL, 'prev_title' => NULL, 'parent_url' => NULL, 'parent_title' => NULL, 'next_url' => NULL, 'next_title' => NULL),
     ),
     'book_tree' => array(
       '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',
     ),
     'book_node_export_html' => array(
-      'variables' => array('node' => NULL, 'content' => NULL, 'children' => NULL),
+      'variables' => array('node' => NULL, 'content' => NULL, 'children' => NULL, 'depth' => NULL, 'title' => NULL),
     ),
   );
 }
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..9d5cebd 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('description' => NULL, '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..d350fc5 100644
--- a/core/modules/forum/forum.module
+++ b/core/modules/forum/forum.module
@@ -86,16 +86,16 @@ 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),
+      'variables' => array('forums' => NULL, 'parents' => NULL, 'tid' => NULL, 'pager' => NULL, 'forum_id' => NULL),
     ),
     'forum_icon' => array(
-      'variables' => array('new_posts' => NULL, 'num_posts' => 0, 'comment_mode' => 0, 'sticky' => 0, 'first_new' => FALSE),
+      'variables' => array('new_posts' => NULL, 'num_posts' => 0, 'comment_mode' => 0, 'sticky' => 0, 'first_new' => FALSE, 'hot_threshold' => NULL, 'icon_status' => NULL, 'icon_title' => NULL),
     ),
     'forum_submitted' => array(
-      'variables' => array('topic' => NULL),
+      'variables' => array('topic' => NULL, 'author' => NULL, 'time' => NULL),
     ),
   );
 }
diff --git a/core/modules/image/image.module b/core/modules/image/image.module
index 7f8314a..7a43544 100644
--- a/core/modules/image/image.module
+++ b/core/modules/image/image.module
@@ -117,6 +117,7 @@ function image_theme() {
       // The title attribute is optional in all cases, so it is omitted by
       // default.
       'variables' => array(
+        'image' => NULL,
         'style_name' => NULL,
         'uri' => NULL,
         'width' => NULL,
@@ -129,7 +130,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(
@@ -155,7 +156,7 @@ function image_theme() {
       'file' => 'image.field.inc',
     ),
     'image_formatter' => array(
-      'variables' => array('item' => NULL, 'item_attributes' => NULL, 'url' => NULL, 'image_style' => NULL),
+      'variables' => array('item' => NULL, 'item_attributes' => NULL, 'url' => NULL, 'image_style' => NULL, 'image' => NULL),
       'file' => 'image.field.inc',
     ),
   );
diff --git a/core/modules/link/link.module b/core/modules/link/link.module
index 46aeeba..cb20fd8 100644
--- a/core/modules/link/link.module
+++ b/core/modules/link/link.module
@@ -41,7 +41,7 @@ function link_help($route_name, RouteMatchInterface $route_match) {
 function link_theme() {
   return array(
     'link_formatter_link_separate' => array(
-      'variables' => array('title' => NULL, 'url_title' => NULL, 'url' => NULL),
+      'variables' => array('title' => NULL, 'url_title' => NULL, 'url' => NULL, 'link' => NULL),
     ),
   );
 }
diff --git a/core/modules/locale/locale.module b/core/modules/locale/locale.module
index aecad6c..24ce8ce 100644
--- a/core/modules/locale/locale.module
+++ b/core/modules/locale/locale.module
@@ -184,11 +184,11 @@ 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(
-      'variables' => array('updates' => array(), 'not_found' => array()),
+      'variables' => array('updates' => array(), 'not_found' => array(), 'modules' => NULL),
       'file' => 'locale.pages.inc',
     ),
   );
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/responsive_image/responsive_image.module b/core/modules/responsive_image/responsive_image.module
index 89ac37f..65d5866 100644
--- a/core/modules/responsive_image/responsive_image.module
+++ b/core/modules/responsive_image/responsive_image.module
@@ -67,6 +67,9 @@ function responsive_image_theme() {
         'responsive_image_style_id' => array(),
         'height' => NULL,
         'width' => NULL,
+        'sources' => NULL,
+        'output_image_tag' => NULL,
+        'img_element' => NULL,
       ),
     ),
     'responsive_image_formatter' => array(
@@ -74,6 +77,7 @@ function responsive_image_theme() {
         'item' => NULL,
         'item_attributes' => NULL,
         'url' => NULL,
+        'responsive_image' => NULL,
         'responsive_image_style_id' => NULL,
       ),
     ),
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..e4d763c 100644
--- a/core/modules/update/update.module
+++ b/core/modules/update/update.module
@@ -187,14 +187,14 @@ 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(
-      'variables' => array('project' => array()),
+      'variables' => array('project' => array(), 'title' => NULL, 'url' => NULL, 'install_type' => NULL, 'existing_version' => NULL, 'datestamp' => NULL, 'versions' => NULL, 'includes' => NULL, 'extras' => NULL, 'status' => NULL, 'disabled' => NULL),
       'file' => 'update.report.inc',
     ),
     // We are using template instead of '#type' => 'table' here to keep markup
diff --git a/core/modules/user/user.module b/core/modules/user/user.module
index 90b813f..beebd9c 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, 'homepage' => NULL),
     ),
   );
 }
diff --git a/core/modules/views/views.module b/core/modules/views/views.module
index e1a4d8c..50158aa 100644
--- a/core/modules/views/views.module
+++ b/core/modules/views/views.module
@@ -91,7 +91,7 @@ function views_theme($existing, $type, $theme, $path) {
 
   // Our extra version of pager from pager.inc
   $hooks['views_mini_pager'] = $base + array(
-    'variables' => array('tags' => array(), 'quantity' => 9, 'element' => 0, 'parameters' => array()),
+    'variables' => array('tags' => array(), 'quantity' => 9, 'element' => 0, 'parameters' => array(), 'items' => NULL),
   );
 
   $variables = array(
@@ -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,7 +128,7 @@ 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),
