diff --git a/core/lib/Drupal/Core/Entity/Plugin/EntityReferenceSelection/SelectionBase.php b/core/lib/Drupal/Core/Entity/Plugin/EntityReferenceSelection/SelectionBase.php
index cb8c7d6..52ee8c3 100644
--- a/core/lib/Drupal/Core/Entity/Plugin/EntityReferenceSelection/SelectionBase.php
+++ b/core/lib/Drupal/Core/Entity/Plugin/EntityReferenceSelection/SelectionBase.php
@@ -233,7 +233,20 @@ public function getReferenceableEntities($match = NULL, $match_operator = 'CONTA
 
     $options = array();
     $entities = entity_load_multiple($target_type, $result);
+    // If the entity type does not provide a label, the entities must be
+    // filtered by the label method.
+    $entity_type = \Drupal::entityManager()->getDefinition($target_type);
+    $filter_by_label_method = !$entity_type->hasKey('label') && !empty($match);
     foreach ($entities as $entity_id => $entity) {
+      if ($filter_by_label_method) {
+        $strpos_match = stripos($entity->label(), $match);
+        if ($match_operator == 'CONTAINS' && $strpos_match === FALSE) {
+          continue;
+        }
+        elseif ($match_operator == 'STARTS_WITH' && $strpos_match !== 0) {
+          continue;
+        }
+      }
       $bundle = $entity->bundle();
       $options[$bundle][$entity_id] = SafeMarkup::checkPlain($entity->label());
     }
diff --git a/core/modules/entity_reference/src/Tests/ReferenceableEntitiesTest.php b/core/modules/entity_reference/src/Tests/ReferenceableEntitiesTest.php
new file mode 100644
index 0000000..b939613
--- /dev/null
+++ b/core/modules/entity_reference/src/Tests/ReferenceableEntitiesTest.php
@@ -0,0 +1,109 @@
+<?php
+
+/**
+ * @file
+ * Contains \Drupal\entity_reference\Tests\ReferenceableEntitiesTest.
+ */
+
+namespace Drupal\entity_reference\Tests;
+
+use Drupal\Component\Utility\Unicode;
+use Drupal\field\Entity\FieldConfig;
+use Drupal\node\Entity\NodeType;
+use Drupal\simpletest\KernelTestBase;
+
+/**
+ * Tests entity reference selection plugins.
+ *
+ * @group entity_reference
+ */
+class ReferenceableEntitiesTest extends KernelTestBase {
+
+  use EntityReferenceTestTrait;
+
+  /**
+   * A random node-type.
+   *
+   * @var string
+   */
+  protected $nodeType;
+
+  /**
+   * The entity reference field name.
+   *
+   * @var string
+   */
+  protected $fieldName;
+
+  /**
+   * Modules to be installed.
+   *
+   * @var array
+   */
+  public static $modules = ['system', 'user', 'field', 'entity_reference', 'node', 'block'];
+
+  /**
+   * {@inheritdoc}
+   */
+  protected function setUp() {
+    parent::setUp();
+
+    /** @var \Drupal\Core\Entity\EntityStorageInterface $block_storage */
+    $block_storage = $this->container->get('entity.manager')
+      ->getStorage('block');
+
+    // Create a new node-type.
+    $this->nodeType = Unicode::strtolower($this->randomMachineName());
+    NodeType::create([
+      'type' => $this->nodeType,
+      'name' => $this->randomString(),
+    ])->save();
+
+    // Create an entity reference field targeting 'block' entities.
+    $this->fieldName = Unicode::strtolower($this->randomMachineName());
+    $this->createEntityReferenceField('node', $this->nodeType, $this->fieldName, $this->randomString(), 'block', 'default');
+
+    // Create 3 blocks to be referenced by the field.
+    foreach (['abc', 'xyz', 'xyabz'] as $label) {
+      $block_storage->create([
+        'id' => Unicode::strtolower($this->randomMachineName()),
+        'settings' => ['label' => $label],
+        'plugin' => 'system_menu_block:admin',
+      ])->save();
+    }
+  }
+
+  /**
+   * Tests values returned by SelectionInterface::getReferenceableEntities()
+   * when the target entity type has no 'label' key.
+   */
+  public function testNoLabelKey() {
+    $field_config = FieldConfig::loadByName('node', $this->nodeType, $this->fieldName);
+    /** @var \Drupal\Core\Entity\EntityReferenceSelection\SelectionInterface $handler */
+    $handler = $this->container->get('plugin.manager.entity_reference_selection')->getSelectionHandler($field_config);
+
+    // Get all referenceables. Expecting 3 items.
+    $referenceables = $handler->getReferenceableEntities();
+    $this->assertIdentical(count($referenceables['block']), 3);
+
+    // Get referenceables containing with 'w'. Expecting 0 items.
+    $referenceables = $handler->getReferenceableEntities('w');
+    $this->assertTrue(empty($referenceables['block']));
+
+    // Get referenceables starting with 'w'. Expecting 0 items.
+    $referenceables = $handler->getReferenceableEntities('w', 'STARTS_WITH');
+    $this->assertTrue(empty($referenceables['block']));
+
+    // Get referenceables containing 'ab'. Expecting 2 items ('abc', 'xyabz').
+    $referenceables = $handler->getReferenceableEntities('ab');
+    $this->assertIdentical(count($referenceables['block']), 2);
+    $this->assertTrue((bool) array_search('abc', $referenceables['block']));
+    $this->assertTrue((bool) array_search('xyabz', $referenceables['block']));
+
+    // Get referenceables starting with 'a'. Expecting 1 item ('abc').
+    $referenceables = $handler->getReferenceableEntities('a', 'STARTS_WITH');
+    $this->assertIdentical(count($referenceables['block']), 1);
+    $this->assertTrue((bool) array_search('abc', $referenceables['block']));
+  }
+
+}
