diff --git a/core/modules/comment/comment.module b/core/modules/comment/comment.module
index ee26510..7de423b 100644
--- a/core/modules/comment/comment.module
+++ b/core/modules/comment/comment.module
@@ -768,6 +768,41 @@ function comment_ranking() {
 }
 
 /**
+ * Implements hook_requirements().
+ */
+function comment_requirements($phase) {
+
+  $requirements = [];
+
+  if (!($phase === 'runtime' || $phase === 'update')) {
+    return $requirements;
+  }
+
+  $comment_types = CommentType::loadMultiple();
+
+  // create a warning for any comment type who's target entity does not have a
+  // definition.
+  foreach ($comment_types as $comment_type) {
+    /** @var \Drupal\comment\Entity\CommentType $comment_type */
+
+    $target_type_id = $comment_type->getTargetEntityTypeId();
+
+    if (!\Drupal::entityTypeManager()->hasDefinition($target_type_id)) {
+      $requirements['comment_' . $comment_type->id()] = [
+        'title' => 'Missing entity provider',
+        'description' => t('Comment type %comment_type is invalid because the module providing the entity type %target_entity has been uninstalled. You will not be able to use or edit the %comment_type comment type unless you reinstall the module which provides the %target_entity entity type.', [
+          '%comment_type' => $comment_type->label(),
+          '%target_entity' => $target_type_id
+        ]),
+        'severity' => REQUIREMENT_WARNING
+      ];
+    }
+  }
+
+  return $requirements;
+}
+
+/**
  * Implements hook_ENTITY_TYPE_presave() for entity_view_display entities.
  */
 function comment_entity_view_display_presave(EntityViewDisplayInterface $display) {
diff --git a/core/modules/comment/src/Tests/CommentTypeTargetEntityTest.php b/core/modules/comment/src/Tests/CommentTypeTargetEntityTest.php
new file mode 100644
index 0000000..1bc974a
--- /dev/null
+++ b/core/modules/comment/src/Tests/CommentTypeTargetEntityTest.php
@@ -0,0 +1,62 @@
+<?php
+
+namespace Drupal\comment\Tests;
+
+use Drupal\comment\Entity\CommentType;
+use Drupal\node\Entity\Node;
+use Drupal\node\Entity\NodeType;
+
+/**
+ * Tests related to the target entity of a comment type
+ *
+ * @group comment
+ */
+class CommentTypeTargetEntityTest extends CommentTestBase {
+  /*
+   * Tests the effect of uninstalling the target entity provider for a comment
+   * type.
+   */
+  public function testTargetEntityProviderUninstalled() {
+    // Node is the target entity of the default comment type.
+    // The same message should appear on the status report and update page
+    // if the entity definition is missing.
+    $message = t('Comment type @comment_type_label is invalid because the module providing the entity type node has been uninstalled.', [
+      '@comment_type_label' => CommentType::load('comment')->label()
+    ]);
+
+    $user = $this->drupalCreateUser([
+      'administer site configuration',
+      'administer software updates'
+    ]);
+    $this->drupalLogin($user);
+
+    // Check the status report.
+    $this->drupalGet('admin/reports/status');
+    $this->assertNoText($message);
+
+    // Check the update page.
+    $this->drupalGet('update.php');
+    $this->assertNoText($message);
+
+    // Delete the sample node and article comment type created by setUp.
+    $nodes = Node::loadMultiple();
+    foreach ($nodes as $node) {
+      $node->delete();
+    }
+    $article_node_type = NodeType::load('article');
+    $article_node_type->delete();
+
+    // Uninstall the node module.
+    $this->container->get('module_installer')->uninstall(['node']);
+
+    // Check the status report.
+    $this->drupalGet('admin/reports/status');
+    $this->assertText($message);
+
+    // Check the update page.
+    $this->drupalGet('update.php');
+    $this->assertText($message);
+
+  }
+
+}
\ No newline at end of file
