=== tests/cases/compiler/overloadCrash.ts === interface I1 {a:number; b:number;}; >I1 : I1, Symbol(I1, Decl(overloadCrash.ts, 0, 0)) >a : number, Symbol(a, Decl(overloadCrash.ts, 0, 14)) >b : number, Symbol(b, Decl(overloadCrash.ts, 0, 23)) interface I2 {c:number; d:number;}; >I2 : I2, Symbol(I2, Decl(overloadCrash.ts, 0, 35)) >c : number, Symbol(c, Decl(overloadCrash.ts, 1, 14)) >d : number, Symbol(d, Decl(overloadCrash.ts, 1, 23)) interface I3 {a:number; b:number; c:number; d:number;}; >I3 : I3, Symbol(I3, Decl(overloadCrash.ts, 1, 35)) >a : number, Symbol(a, Decl(overloadCrash.ts, 2, 14)) >b : number, Symbol(b, Decl(overloadCrash.ts, 2, 23)) >c : number, Symbol(c, Decl(overloadCrash.ts, 2, 33)) >d : number, Symbol(d, Decl(overloadCrash.ts, 2, 43)) declare function foo(...n:I1[]); >foo : { (...n: I1[]): any; (n1: I2, n3: I2): any; }, Symbol(foo, Decl(overloadCrash.ts, 2, 55), Decl(overloadCrash.ts, 4, 32)) >n : I1[], Symbol(n, Decl(overloadCrash.ts, 4, 21)) >I1 : I1, Symbol(I1, Decl(overloadCrash.ts, 0, 0)) declare function foo(n1:I2, n3:I2); >foo : { (...n: I1[]): any; (n1: I2, n3: I2): any; }, Symbol(foo, Decl(overloadCrash.ts, 2, 55), Decl(overloadCrash.ts, 4, 32)) >n1 : I2, Symbol(n1, Decl(overloadCrash.ts, 5, 21)) >I2 : I2, Symbol(I2, Decl(overloadCrash.ts, 0, 35)) >n3 : I2, Symbol(n3, Decl(overloadCrash.ts, 5, 27)) >I2 : I2, Symbol(I2, Decl(overloadCrash.ts, 0, 35)) var i3:I3; >i3 : I3, Symbol(i3, Decl(overloadCrash.ts, 7, 3)) >I3 : I3, Symbol(I3, Decl(overloadCrash.ts, 1, 35)) foo(i3, i3); // should not crash the compiler :) >foo(i3, i3) : any >foo : { (...n: I1[]): any; (n1: I2, n3: I2): any; }, Symbol(foo, Decl(overloadCrash.ts, 2, 55), Decl(overloadCrash.ts, 4, 32)) >i3 : I3, Symbol(i3, Decl(overloadCrash.ts, 7, 3)) >i3 : I3, Symbol(i3, Decl(overloadCrash.ts, 7, 3))