diff --git a/src/core/vdom/helpers/normalize-scoped-slots.js b/src/core/vdom/helpers/normalize-scoped-slots.js
index 1e43fd393f7..d1dd9690f6b 100644
--- a/src/core/vdom/helpers/normalize-scoped-slots.js
+++ b/src/core/vdom/helpers/normalize-scoped-slots.js
@@ -61,8 +61,7 @@ function normalizeScopedSlot(normalSlots, key, fn) {
? [res] // single vnode
: normalizeChildren(res)
return res && (
- res.length === 0 ||
- (res.length === 1 && res[0].isComment) // #9658
+ res.every(r => r.isComment) // #9658, #11856
) ? undefined
: res
}
diff --git a/test/unit/features/component/component-scoped-slot.spec.js b/test/unit/features/component/component-scoped-slot.spec.js
index 28369814f48..0c1e47f98f6 100644
--- a/test/unit/features/component/component-scoped-slot.spec.js
+++ b/test/unit/features/component/component-scoped-slot.spec.js
@@ -1294,6 +1294,19 @@ describe('Component scoped slot', () => {
expect(vm.$el.textContent).toMatch('fallback')
})
+ //#11856
+ it('fallback for scoped slot with multiple v-if', () => {
+ const vm = new Vue({
+ template: `