diff --git a/packages/svelte/src/internal/client/dom/blocks/each.js b/packages/svelte/src/internal/client/dom/blocks/each.js
index 3d8e7c8870..bdf3f717f2 100644
--- a/packages/svelte/src/internal/client/dom/blocks/each.js
+++ b/packages/svelte/src/internal/client/dom/blocks/each.js
@@ -370,6 +370,7 @@ function reconcile(
var is_animated = (flags & EACH_IS_ANIMATED) !== 0;
var should_update = (flags & (EACH_ITEM_REACTIVE | EACH_INDEX_REACTIVE)) !== 0;
+ var count = 0;
var length = array.length;
var items = state.items;
var first = state.first;
@@ -458,6 +459,7 @@ function reconcile(
stashed = [];
current = prev.next;
+ count += 1;
continue;
}
@@ -519,6 +521,7 @@ function reconcile(
link(state, prev, item);
prev = item;
+ count += 1;
}
continue;
@@ -547,6 +550,14 @@ function reconcile(
matched.push(item);
prev = item;
current = item.next;
+ count += 1;
+ }
+
+ if (count !== length) {
+ // full key uniqueness check is dev-only,
+ // if keys duplication didn't cause a crash,
+ // the rendered list will be shorter then the array
+ each_key_duplicate('', '', '');
}
if (current !== null || seen !== undefined) {
diff --git a/packages/svelte/tests/runtime-legacy/samples/keyed-each-prod-unique-2/_config.js b/packages/svelte/tests/runtime-legacy/samples/keyed-each-prod-unique-2/_config.js
new file mode 100644
index 0000000000..4caa45fd3c
--- /dev/null
+++ b/packages/svelte/tests/runtime-legacy/samples/keyed-each-prod-unique-2/_config.js
@@ -0,0 +1,15 @@
+import { flushSync } from 'svelte';
+import { test } from '../../test';
+
+export default test({
+ compileOptions: {
+ dev: false
+ },
+ test({ assert, target }) {
+ let button = target.querySelector('button');
+
+ button?.click();
+
+ assert.throws(flushSync, /each_key_duplicate/);
+ }
+});
diff --git a/packages/svelte/tests/runtime-legacy/samples/keyed-each-prod-unique-2/main.svelte b/packages/svelte/tests/runtime-legacy/samples/keyed-each-prod-unique-2/main.svelte
new file mode 100644
index 0000000000..aedec8c57c
--- /dev/null
+++ b/packages/svelte/tests/runtime-legacy/samples/keyed-each-prod-unique-2/main.svelte
@@ -0,0 +1,8 @@
+
+
+
+{#each data as d (d)}
+ {d}
+{/each}