diff --git a/src/compiler/checker.ts b/src/compiler/checker.ts
index 80b61edd3657a..a41eaec2665d3 100644
--- a/src/compiler/checker.ts
+++ b/src/compiler/checker.ts
@@ -17723,7 +17723,7 @@ export function createTypeChecker(host: TypeCheckerHost): TypeChecker {
             if (typeSet.length === 0) {
                 return includes & TypeFlags.Null ? includes & TypeFlags.IncludesNonWideningType ? nullType : nullWideningType :
                     includes & TypeFlags.Undefined ? includes & TypeFlags.IncludesNonWideningType ? undefinedType : undefinedWideningType :
-                    neverType;
+                    contains(types, silentNeverType) ? silentNeverType : neverType;
             }
         }
         if (!origin && includes & TypeFlags.Union) {
diff --git a/tests/baselines/reference/silentNeverPropagation.js b/tests/baselines/reference/silentNeverPropagation.js
index 06ee01dd14a1d..0e5d765416c8d 100644
--- a/tests/baselines/reference/silentNeverPropagation.js
+++ b/tests/baselines/reference/silentNeverPropagation.js
@@ -26,7 +26,13 @@ const breaks = convert(
 breaks.state.a
 breaks.state.z
 breaks.foo()
-
+
+declare function inner<T1, t2>(t1: T1, t2: t2): T1 | t2;
+declare function outer<T1, T2>(m: T1 | T2): [T1, T2];
+
+const outerResult = outer(
+    inner({ a: 12 }, { foo() { return true } })
+);
 
 //// [silentNeverPropagation.js]
 "use strict";
@@ -35,6 +41,7 @@ var breaks = convert(createModule({ a: 12 }, { foo: function () { return true; }
 breaks.state.a;
 breaks.state.z;
 breaks.foo();
+var outerResult = outer(inner({ a: 12 }, { foo: function () { return true; } }));
 
 
 //// [silentNeverPropagation.d.ts]
@@ -56,3 +63,14 @@ declare const breaks: ModuleWithState<{
 }> & {
     foo(): true;
 };
+declare function inner<T1, t2>(t1: T1, t2: t2): T1 | t2;
+declare function outer<T1, T2>(m: T1 | T2): [T1, T2];
+declare const outerResult: [{
+    a: number;
+} | {
+    foo(): true;
+}, {
+    a: number;
+} | {
+    foo(): true;
+}];
diff --git a/tests/baselines/reference/silentNeverPropagation.symbols b/tests/baselines/reference/silentNeverPropagation.symbols
index 1d864ecb9eeae..92a79d9a3f08d 100644
--- a/tests/baselines/reference/silentNeverPropagation.symbols
+++ b/tests/baselines/reference/silentNeverPropagation.symbols
@@ -84,3 +84,34 @@ breaks.foo()
 >breaks : Symbol(breaks, Decl(silentNeverPropagation.ts, 18, 5))
 >foo : Symbol(foo, Decl(silentNeverPropagation.ts, 19, 29))
 
+declare function inner<T1, t2>(t1: T1, t2: t2): T1 | t2;
+>inner : Symbol(inner, Decl(silentNeverPropagation.ts, 24, 12))
+>T1 : Symbol(T1, Decl(silentNeverPropagation.ts, 26, 23))
+>t2 : Symbol(t2, Decl(silentNeverPropagation.ts, 26, 26), Decl(silentNeverPropagation.ts, 26, 38))
+>t1 : Symbol(t1, Decl(silentNeverPropagation.ts, 26, 31))
+>T1 : Symbol(T1, Decl(silentNeverPropagation.ts, 26, 23))
+>t2 : Symbol(t2, Decl(silentNeverPropagation.ts, 26, 26), Decl(silentNeverPropagation.ts, 26, 38))
+>t2 : Symbol(t2, Decl(silentNeverPropagation.ts, 26, 26), Decl(silentNeverPropagation.ts, 26, 38))
+>T1 : Symbol(T1, Decl(silentNeverPropagation.ts, 26, 23))
+>t2 : Symbol(t2, Decl(silentNeverPropagation.ts, 26, 26), Decl(silentNeverPropagation.ts, 26, 38))
+
+declare function outer<T1, T2>(m: T1 | T2): [T1, T2];
+>outer : Symbol(outer, Decl(silentNeverPropagation.ts, 26, 56))
+>T1 : Symbol(T1, Decl(silentNeverPropagation.ts, 27, 23))
+>T2 : Symbol(T2, Decl(silentNeverPropagation.ts, 27, 26))
+>m : Symbol(m, Decl(silentNeverPropagation.ts, 27, 31))
+>T1 : Symbol(T1, Decl(silentNeverPropagation.ts, 27, 23))
+>T2 : Symbol(T2, Decl(silentNeverPropagation.ts, 27, 26))
+>T1 : Symbol(T1, Decl(silentNeverPropagation.ts, 27, 23))
+>T2 : Symbol(T2, Decl(silentNeverPropagation.ts, 27, 26))
+
+const outerResult = outer(
+>outerResult : Symbol(outerResult, Decl(silentNeverPropagation.ts, 29, 5))
+>outer : Symbol(outer, Decl(silentNeverPropagation.ts, 26, 56))
+
+    inner({ a: 12 }, { foo() { return true } })
+>inner : Symbol(inner, Decl(silentNeverPropagation.ts, 24, 12))
+>a : Symbol(a, Decl(silentNeverPropagation.ts, 30, 11))
+>foo : Symbol(foo, Decl(silentNeverPropagation.ts, 30, 22))
+
+);
diff --git a/tests/baselines/reference/silentNeverPropagation.types b/tests/baselines/reference/silentNeverPropagation.types
index 933843c9f53ec..7bd9a6c974050 100644
--- a/tests/baselines/reference/silentNeverPropagation.types
+++ b/tests/baselines/reference/silentNeverPropagation.types
@@ -109,3 +109,44 @@ breaks.foo()
 >foo : () => true
 >    : ^^^^^^^^^^
 
+declare function inner<T1, t2>(t1: T1, t2: t2): T1 | t2;
+>inner : <T1, t2>(t1: T1, t2: t2) => T1 | t2
+>      : ^  ^^  ^^  ^^  ^^  ^^  ^^^^^       
+>t1 : T1
+>   : ^^
+>t2 : t2
+>   : ^^
+
+declare function outer<T1, T2>(m: T1 | T2): [T1, T2];
+>outer : <T1, T2>(m: T1 | T2) => [T1, T2]
+>      : ^  ^^  ^^ ^^       ^^^^^        
+>m : T1 | T2
+>  : ^^^^^^^
+
+const outerResult = outer(
+>outerResult : [{ a: number; } | { foo(): true; }, { a: number; } | { foo(): true; }]
+>            : ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+>outer(    inner({ a: 12 }, { foo() { return true } })) : [{ a: number; } | { foo(): true; }, { a: number; } | { foo(): true; }]
+>                                                       : ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+>outer : <T1, T2>(m: T1 | T2) => [T1, T2]
+>      : ^  ^^  ^^ ^^       ^^^^^        
+
+    inner({ a: 12 }, { foo() { return true } })
+>inner({ a: 12 }, { foo() { return true } }) : { a: number; } | { foo(): true; }
+>                                            : ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+>inner : <T1, t2>(t1: T1, t2: t2) => T1 | t2
+>      : ^  ^^  ^^  ^^  ^^  ^^  ^^^^^       
+>{ a: 12 } : { a: number; }
+>          : ^^^^^^^^^^^^^^
+>a : number
+>  : ^^^^^^
+>12 : 12
+>   : ^^
+>{ foo() { return true } } : { foo(): true; }
+>                          : ^^^^^^^^^^^^^^^^
+>foo : () => true
+>    : ^^^^^^^^^^
+>true : true
+>     : ^^^^
+
+);
diff --git a/tests/cases/compiler/silentNeverPropagation.ts b/tests/cases/compiler/silentNeverPropagation.ts
index 4fb46c0c9bbd1..5ecdeaea0ccc2 100644
--- a/tests/cases/compiler/silentNeverPropagation.ts
+++ b/tests/cases/compiler/silentNeverPropagation.ts
@@ -26,3 +26,10 @@ const breaks = convert(
 breaks.state.a
 breaks.state.z
 breaks.foo()
+
+declare function inner<T1, t2>(t1: T1, t2: t2): T1 | t2;
+declare function outer<T1, T2>(m: T1 | T2): [T1, T2];
+
+const outerResult = outer(
+    inner({ a: 12 }, { foo() { return true } })
+);
\ No newline at end of file