diff --git a/core/includes/bootstrap.inc b/core/includes/bootstrap.inc
index d995e322a36dec4a2ee62553a3ab36a809919a64..0f385d609b16240451d5b005cb54786abc4c0d25 100644
--- a/core/includes/bootstrap.inc
+++ b/core/includes/bootstrap.inc
@@ -2405,7 +2405,7 @@ function language_list($flags = Language::STATE_CONFIGURABLE) {
   // Initialize master language list.
   if (!isset($languages)) {
     // Initialize local language list cache.
-   $languages = array();
+    $languages = array();
 
     // Fill in master language list based on current configuration.
     $default = language_default();
@@ -2429,7 +2429,10 @@ function language_list($flags = Language::STATE_CONFIGURABLE) {
       }
       Language::sort($languages);
     }
-    else {
+    // If the language module is enable but the configuration has not been
+    // written yet the returning an empty language list will cause errors. For
+    // example the cache clear in search_module_preinstall().
+    if (empty($languages)) {
       // No language module, so use the default language only.
       $languages = array($default->id => $default);
       // Add the special languages, they will be filtered later if needed.
diff --git a/core/modules/language/lib/Drupal/language/Tests/LanguageListModuleInstallTest.php b/core/modules/language/lib/Drupal/language/Tests/LanguageListModuleInstallTest.php
new file mode 100644
index 0000000000000000000000000000000000000000..89e5c07df70ab5b9c9380d0f17604ec524b2fc9d
--- /dev/null
+++ b/core/modules/language/lib/Drupal/language/Tests/LanguageListModuleInstallTest.php
@@ -0,0 +1,50 @@
+<?php
+
+/**
+ * @file
+ * Contains \Drupal\language\Tests\LanguageListModuleInstallTest.
+ */
+
+namespace Drupal\language\Tests;
+
+use Drupal\simpletest\WebTestBase;
+
+/**
+ * Functional tests for the language list configuration forms.
+ */
+class LanguageListModuleInstallTest extends WebTestBase {
+
+  /**
+   * Modules to enable.
+   *
+   * @var array
+   */
+  public static $modules = array('language_test');
+
+  public static function getInfo() {
+    return array(
+      'name' => 'Language list during module install',
+      'description' => 'Tests enabling Language if a module exists that calls language_list during installation.',
+      'group' => 'Language',
+    );
+  }
+
+  /**
+   * Tests enabling Language.
+   */
+  function testModuleInstallLanguageList() {
+    // Since language_list uses static caches we need to do this be enabling
+    // the module using a the UI.
+    $admin_user = $this->drupalCreateUser(array('access administration pages', 'administer modules'));
+    $this->drupalLogin($admin_user);
+    $edit = array();
+    $edit['modules[Multilingual][language][enable]'] = 'language';
+    $this->drupalPostForm('admin/modules', $edit, t('Save configuration'));
+
+    $this->assertEqual(\Drupal::state()->get('language_test.language_count_preinstall', 0), 1, 'Using language_list() returns 1 language during Language installation.');
+
+    // Get updated module list by rebuilding container.
+    $this->rebuildContainer();
+    $this->assertTrue(\Drupal::moduleHandler()->moduleExists('language'), 'Language module is enabled');
+  }
+}
diff --git a/core/modules/language/tests/language_test/language_test.module b/core/modules/language/tests/language_test/language_test.module
index 8e8cbaf97c2c13721eb87837eb605342a05aa90d..31c0a848f651f8d7502f300b599f9ef803bbcef6 100644
--- a/core/modules/language/tests/language_test/language_test.module
+++ b/core/modules/language/tests/language_test/language_test.module
@@ -128,3 +128,10 @@ function language_test_language_fallback_candidates_test_alter(array &$candidate
     $candidates[$langcode] = $langcode;
   }
 }
+
+/**
+ * Implements hook_module_preinstall().
+ */
+function language_test_module_preinstall() {
+  \Drupal::state()->set('language_test.language_count_preinstall', count(language_list()));
+}