diff -u b/core/lib/Drupal/Core/Field/BaseFieldDefinition.php b/core/lib/Drupal/Core/Field/BaseFieldDefinition.php --- b/core/lib/Drupal/Core/Field/BaseFieldDefinition.php +++ b/core/lib/Drupal/Core/Field/BaseFieldDefinition.php @@ -761,7 +761,13 @@ public function __clone() { // Ensure the itemDefinition property is actually cloned // by overwriting the original reference. - $this->itemDefinition = FieldItemDataDefinition::create($this); + $this->itemDefinition = clone $this->itemDefinition; + + // The itemDefinition (\Drupal\Core\Field\TypedData\FieldItemDataDefinition) + // has a property fieldDefinition, which is a recursive reference to the + // parent BaseFieldDefinition. Need to overwrite the reference to the old + // object with a reference to the cloned one. + $this->itemDefinition->setFieldDefinition($this); } }