diff -u b/core/lib/Drupal/Core/Template/Attribute.php b/core/lib/Drupal/Core/Template/Attribute.php --- b/core/lib/Drupal/Core/Template/Attribute.php +++ b/core/lib/Drupal/Core/Template/Attribute.php @@ -337,10 +337,10 @@ $count = 0; foreach ($this->storage as $value) { // Only count a value if it will be rendered, see twig_test_empty(). - if ($value::RENDER_EMPTY_ATTRIBUTE) { - $count++; + if ($value instanceof \Traversable) { + $count += iterator_count($value); } - elseif (!$value::RENDER_EMPTY_ATTRIBUTE && !empty($value->value())) { + else { $count++; } } diff -u b/core/tests/Drupal/Tests/Core/Template/AttributeTest.php b/core/tests/Drupal/Tests/Core/Template/AttributeTest.php --- b/core/tests/Drupal/Tests/Core/Template/AttributeTest.php +++ b/core/tests/Drupal/Tests/Core/Template/AttributeTest.php @@ -532,9 +532,9 @@ $attributes['class'][] = 'cat'; $this->assertSame(1, count($attributes)); $attributes['class'][] = 'tabby'; - $this->assertSame(1, count($attributes)); - $attributes['id'] = 'test_id'; $this->assertSame(2, count($attributes)); + $attributes['id'] = 'test_id'; + $this->assertSame(3, count($attributes)); $attributes['class'] = []; $this->assertSame(1, count($attributes)); unset($attributes['id']);