https://gcc.gnu.org/bugzilla/show_bug.cgi?id=87613

Martin Liška <marxin at gcc dot gnu.org> changed:

           What    |Removed                     |Added
----------------------------------------------------------------------------
             Status|UNCONFIRMED                 |RESOLVED
         Resolution|---                         |WORKSFORME

--- Comment #2 from Martin Liška <marxin at gcc dot gnu.org> ---
Yes, it was fixed by Jakub in GCC 8 in r247538. As Richi said, to suppress the
warning, please use __builtin_unreachable () like:

template<int> int foo();
typedef int (*int_fun)();

inline int_fun get_fun(unsigned int x)
{
    switch(x&7)
    {
        case 0: return foo<0>;
        case 1: return foo<1>;
        case 2: return foo<2>;
        case 3: return foo<3>;
        case 4: return foo<4>;
        case 5: return foo<5>;
        case 6: return foo<6>;
        case 7: return foo<7>;
        default: __builtin_unreachable (); // never happens
    }
    // alternative to default case:
    // return 0; // never happens
}

int bla(unsigned int x)
{
    return get_fun(x)();
}

Reply via email to