Under Review
over 1 year ago

Incorrect control flow analysis prevents compilation

import Toybox.Lang;

function foo(i as Number) as Number {
    var t;
    switch (i) {
        case 1:
        case 2:
            return 0;
        case 3:
            t = 42;
            break;
        default:
            t = 24;
            break;
    }
    return t;
}

ERROR: <device>: bug.mc:16: Variable t may not have been initialized in all code paths.

I can fix it by putting another "return 0;" after "case 1:" - but I'm trying to save code size (and there's more code in the actual case statement I hit this problem with). Also, when doing this analysis, the compiler is clearly assuming that there's an implicit break before a case statement - which can't be good.