diff --git a/src/runtime/internal/Component.ts b/src/runtime/internal/Component.ts
index e706928af3..93ba42e37c 100644
--- a/src/runtime/internal/Component.ts
+++ b/src/runtime/internal/Component.ts
@@ -124,7 +124,7 @@ export function init(component, options, instance, create_fragment, not_equal, p
on_disconnect: [],
before_update: [],
after_update: [],
- context: new Map(parent_component ? parent_component.$$.context : options.context || []),
+ context: new Map(options.context || (parent_component ? parent_component.$$.context : [])),
// everything else
callbacks: blank_object(),
diff --git a/src/runtime/internal/ssr.ts b/src/runtime/internal/ssr.ts
index c64d88fa75..fd72aa1548 100644
--- a/src/runtime/internal/ssr.ts
+++ b/src/runtime/internal/ssr.ts
@@ -91,7 +91,7 @@ export function create_ssr_component(fn) {
const $$ = {
on_destroy,
- context: new Map(parent_component ? parent_component.$$.context : context || []),
+ context: new Map(context || (parent_component ? parent_component.$$.context : [])),
// these will be immediately discarded
on_mount: [],
diff --git a/test/runtime/samples/constructor-prefer-passed-context/ChildComponent.svelte b/test/runtime/samples/constructor-prefer-passed-context/ChildComponent.svelte
new file mode 100644
index 0000000000..af77418a1f
--- /dev/null
+++ b/test/runtime/samples/constructor-prefer-passed-context/ChildComponent.svelte
@@ -0,0 +1,6 @@
+
+
+
Value in child component: {value}
diff --git a/test/runtime/samples/constructor-prefer-passed-context/_config.js b/test/runtime/samples/constructor-prefer-passed-context/_config.js
new file mode 100644
index 0000000000..5d5cf9e44a
--- /dev/null
+++ b/test/runtime/samples/constructor-prefer-passed-context/_config.js
@@ -0,0 +1,6 @@
+export default {
+ skip_if_ssr: true,
+ html: `
+ Value in child component: undefined
+ `
+};
diff --git a/test/runtime/samples/constructor-prefer-passed-context/main.svelte b/test/runtime/samples/constructor-prefer-passed-context/main.svelte
new file mode 100644
index 0000000000..dd051a123a
--- /dev/null
+++ b/test/runtime/samples/constructor-prefer-passed-context/main.svelte
@@ -0,0 +1,15 @@
+
+
+
diff --git a/test/server-side-rendering/samples/constructor-prefer-passed-context/ChildComponent.svelte b/test/server-side-rendering/samples/constructor-prefer-passed-context/ChildComponent.svelte
new file mode 100644
index 0000000000..af77418a1f
--- /dev/null
+++ b/test/server-side-rendering/samples/constructor-prefer-passed-context/ChildComponent.svelte
@@ -0,0 +1,6 @@
+
+
+Value in child component: {value}
diff --git a/test/server-side-rendering/samples/constructor-prefer-passed-context/_expected.html b/test/server-side-rendering/samples/constructor-prefer-passed-context/_expected.html
new file mode 100644
index 0000000000..d9a67c64e9
--- /dev/null
+++ b/test/server-side-rendering/samples/constructor-prefer-passed-context/_expected.html
@@ -0,0 +1 @@
+Value in child component: undefined
diff --git a/test/server-side-rendering/samples/constructor-prefer-passed-context/main.svelte b/test/server-side-rendering/samples/constructor-prefer-passed-context/main.svelte
new file mode 100644
index 0000000000..eaf89dd813
--- /dev/null
+++ b/test/server-side-rendering/samples/constructor-prefer-passed-context/main.svelte
@@ -0,0 +1,10 @@
+
+
+{@html content}