tests/cases/conformance/functions/functionImplementationErrors.ts(2,10): error TS2354: No best common type exists among return expressions.
tests/cases/conformance/functions/functionImplementationErrors.ts(6,19): error TS2354: No best common type exists among return expressions.
tests/cases/conformance/functions/functionImplementationErrors.ts(10,10): error TS2354: No best common type exists among return expressions.
tests/cases/conformance/functions/functionImplementationErrors.ts(16,10): error TS2354: No best common type exists among return expressions.
tests/cases/conformance/functions/functionImplementationErrors.ts(25,16): error TS2355: A function whose declared type is neither 'void' nor 'any' must return a value or consist of a single 'throw' statement.
tests/cases/conformance/functions/functionImplementationErrors.ts(30,17): error TS2373: Initializer of parameter 'n' cannot reference identifier 'm' declared after it.
tests/cases/conformance/functions/functionImplementationErrors.ts(35,17): error TS2373: Initializer of parameter 'n' cannot reference identifier 'm' declared after it.
tests/cases/conformance/functions/functionImplementationErrors.ts(40,28): error TS2355: A function whose declared type is neither 'void' nor 'any' must return a value or consist of a single 'throw' statement.
tests/cases/conformance/functions/functionImplementationErrors.ts(49,10): error TS2354: No best common type exists among return expressions.
tests/cases/conformance/functions/functionImplementationErrors.ts(53,10): error TS2354: No best common type exists among return expressions.
tests/cases/conformance/functions/functionImplementationErrors.ts(57,11): error TS2354: No best common type exists among return expressions.
tests/cases/conformance/functions/functionImplementationErrors.ts(61,10): error TS2354: No best common type exists among return expressions.
tests/cases/conformance/functions/functionImplementationErrors.ts(65,11): error TS2354: No best common type exists among return expressions.
tests/cases/conformance/functions/functionImplementationErrors.ts(69,11): error TS2354: No best common type exists among return expressions.


==== tests/cases/conformance/functions/functionImplementationErrors.ts (14 errors) ====
    // FunctionExpression with no return type annotation with multiple return statements with unrelated types
    var f1 = function () {
             ~~~~~~~~
!!! error TS2354: No best common type exists among return expressions.
        return '';
        return 3;
    };
    var f2 = function x() {
                      ~
!!! error TS2354: No best common type exists among return expressions.
        return '';
        return 3;
    };
    var f3 = () => {
             ~~~~~~~
        return '';
    ~~~~~~~~~~~~~~
        return 3;
    ~~~~~~~~~~~~~
    };
    ~
!!! error TS2354: No best common type exists among return expressions.
    
    // FunctionExpression with no return type annotation with return branch of number[] and other of string[]
    var f4 = function () {
             ~~~~~~~~
!!! error TS2354: No best common type exists among return expressions.
        if (true) {
            return [''];
        } else {
            return [1];
        }
    }
    
    // Function implemetnation with non -void return type annotation with no return
    function f5(): number {
                   ~~~~~~
!!! error TS2355: A function whose declared type is neither 'void' nor 'any' must return a value or consist of a single 'throw' statement.
    }
    
    var m;
    // Function signature with parameter initializer referencing in scope local variable
    function f6(n = m) {
                    ~
!!! error TS2373: Initializer of parameter 'n' cannot reference identifier 'm' declared after it.
        var m = 4;
    }
    
    // Function signature with initializer referencing other parameter to the right
    function f7(n = m, m?) {
                    ~
!!! error TS2373: Initializer of parameter 'n' cannot reference identifier 'm' declared after it.
    }
    
    // FunctionExpression with non -void return type annotation with a throw, no return, and other code
    // Should be error but isn't
    undefined === function (): number {
                               ~~~~~~
!!! error TS2355: A function whose declared type is neither 'void' nor 'any' must return a value or consist of a single 'throw' statement.
        throw undefined;
        var x = 4;
    };
    
    class Base { private x; }
    class AnotherClass { private y; }
    class Derived1 extends Base { private m; }
    class Derived2 extends Base { private n; }
    function f8() {
             ~~
!!! error TS2354: No best common type exists among return expressions.
        return new Derived1();
        return new Derived2();    
    }
    var f9 = function () {
             ~~~~~~~~
!!! error TS2354: No best common type exists among return expressions.
        return new Derived1();
        return new Derived2();
    };
    var f10 = () => {
              ~~~~~~~
        return new Derived1();
    ~~~~~~~~~~~~~~~~~~~~~~~~~~
        return new Derived2();
    ~~~~~~~~~~~~~~~~~~~~~~~~~~
    };
    ~
!!! error TS2354: No best common type exists among return expressions.
    function f11() {
             ~~~
!!! error TS2354: No best common type exists among return expressions.
        return new Base();
        return new AnotherClass();
    }
    var f12 = function () {
              ~~~~~~~~
!!! error TS2354: No best common type exists among return expressions.
        return new Base();
        return new AnotherClass();
    };
    var f13 = () => {
              ~~~~~~~
        return new Base();
    ~~~~~~~~~~~~~~~~~~~~~~
        return new AnotherClass();
    ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
    };
    ~
!!! error TS2354: No best common type exists among return expressions.
    