=== tests/cases/conformance/types/objectTypeLiteral/callSignatures/callSignaturesWithDuplicateParameters.ts ===
// Duplicate parameter names are always an error

function foo(x, x) { }
>foo : (x: any, x: any) => void
>x : any
>x : any

var f = function foo(x, x) { }
>f : (x: any, x: any) => void
>function foo(x, x) { } : (x: any, x: any) => void
>foo : (x: any, x: any) => void
>x : any
>x : any

var f2 = function (x, x) { }
>f2 : (x: any, x: any) => void
>function (x, x) { } : (x: any, x: any) => void
>x : any
>x : any

var f3 = (x, x) => { }
>f3 : (x: any, x: any) => void
>(x, x) => { } : (x: any, x: any) => void
>x : any
>x : any

var f4 = <T>(x: T, x: T) => { }
>f4 : <T>(x: T, x: T) => void
><T>(x: T, x: T) => { } : <T>(x: T, x: T) => void
>x : T
>x : T

function foo2(x: string, x: number) { }
>foo2 : (x: string, x: number) => void
>x : string
>x : number

var f5 = function foo(x: string, x: number) { }
>f5 : (x: string, x: number) => void
>function foo(x: string, x: number) { } : (x: string, x: number) => void
>foo : (x: string, x: number) => void
>x : string
>x : number

var f6 = function (x: string, x: number) { }
>f6 : (x: string, x: number) => void
>function (x: string, x: number) { } : (x: string, x: number) => void
>x : string
>x : number

var f7 = (x: string, x: number) => { }
>f7 : (x: string, x: number) => void
>(x: string, x: number) => { } : (x: string, x: number) => void
>x : string
>x : number

var f8 = <T>(x: T, y: T) => { }
>f8 : <T>(x: T, y: T) => void
><T>(x: T, y: T) => { } : <T>(x: T, y: T) => void
>x : T
>y : T

class C {
>C : C

    foo(x, x) { }
>foo : (x: any, x: any) => void
>x : any
>x : any

    foo2(x: number, x: string) { }
>foo2 : (x: number, x: string) => void
>x : number
>x : string

    foo3<T>(x: T, x: T) { }
>foo3 : <T>(x: T, x: T) => void
>x : T
>x : T
}

interface I {
    (x, x);
>x : any
>x : any

    (x: string, x: number);
>x : string
>x : number

    foo(x, x);
>foo : { (x: any, x: any): any; (x: number, x: string): any; }
>x : any
>x : any

    foo(x: number, x: string);
>foo : { (x: any, x: any): any; (x: number, x: string): any; }
>x : number
>x : string

    foo3<T>(x: T, x: T);
>foo3 : <T>(x: T, x: T) => any
>x : T
>x : T
}

var a: {
>a : { foo(x: any, x: any): any; foo2(x: number, x: string): any; }

    foo(x, x);
>foo : (x: any, x: any) => any
>x : any
>x : any

    foo2(x: number, x: string);
>foo2 : (x: number, x: string) => any
>x : number
>x : string

};

var b = {
>b : { foo(x: any, x: any): void; a: (x: number, x: string) => void; b: <T>(x: T, x: T) => void; }
>{    foo(x, x) { },    a: function foo(x: number, x: string) { },    b: <T>(x: T, x: T) => { }} : { foo(x: any, x: any): void; a: (x: number, x: string) => void; b: <T>(x: T, x: T) => void; }

    foo(x, x) { },
>foo : (x: any, x: any) => void
>x : any
>x : any

    a: function foo(x: number, x: string) { },
>a : (x: number, x: string) => void
>function foo(x: number, x: string) { } : (x: number, x: string) => void
>foo : (x: number, x: string) => void
>x : number
>x : string

    b: <T>(x: T, x: T) => { }
>b : <T>(x: T, x: T) => void
><T>(x: T, x: T) => { } : <T>(x: T, x: T) => void
>x : T
>x : T
}
