diff --git a/core/includes/theme.inc b/core/includes/theme.inc
index 84d4752..cff4ea0 100644
--- a/core/includes/theme.inc
+++ b/core/includes/theme.inc
@@ -994,6 +994,13 @@ function theme($hook, $variables = array()) {
   $variables += array(
     'theme_hook_original' => $original_hook,
   );
+  // If theme() is called with a suggestion like comment__node_article, include
+  // information about the base hook - e.g. 'comment'.
+  if ($hook != $original_hook) {
+    $variables += array(
+      'theme_hook_base' => $hook,
+    );
+  }
 
   // Invoke the variable preprocessors, if any. The preprocessors may specify
   // alternate suggestions for which hook's template/function to use. If the
diff --git a/core/themes/engines/twig/twig.engine b/core/themes/engines/twig/twig.engine
index b541cdc..6b6b4c1 100644
--- a/core/themes/engines/twig/twig.engine
+++ b/core/themes/engines/twig/twig.engine
@@ -57,6 +57,9 @@ function twig_render_template($template_file, $variables) {
   if (settings()->get('twig_debug', FALSE)) {
     $output['debug_prefix'] .= "\n\n<!-- THEME DEBUG -->";
     $output['debug_prefix'] .= "\n<!-- CALL: theme('{$variables['theme_hook_original']}') -->";
+    if (isset($variables['theme_hook_base'])) {
+      $variables['theme_hook_suggestions'][] = $variables['theme_hook_base'];
+    }
     if (!empty($variables['theme_hook_suggestions'])) {
       $extension = twig_extension();
       $current_template = basename($template_file);
