r203029 - [-Wunreachable-code] generalize pruning out warning on trivial returns.

David Blaikie dblaikie at gmail.com
Wed Mar 5 16:43:27 PST 2014


On Wed, Mar 5, 2014 at 4:25 PM, Ted Kremenek <kremenek at apple.com> wrote:
> On Mar 5, 2014, at 4:15 PM, David Blaikie <dblaikie at gmail.com> wrote:
>
> +MyEnum trivial_dead_return_enum_2(int x) {
> +  switch (x) {
> +    case 1: return 1;
> +    case 2: return 2;
> +    case 3: return 3;
> +  }
> +
> +  return 2; // no-warning
>
>
> Wow - was this return really considered 'dead' at some point? How/why?
> That looks totally reachable...
>
> +}
> +
> +MyEnum nontrivial_dead_return_enum_2(int x) {
> +  switch (x) {
> +    case 1: return 1;
> +    case 2: return 2;
> +    case 3: return 3;
> +    default: return 4;
> +  }
> +
> +  return calledFun(); // expected-warning {{will never be executed}}
>
>
> Did this not warn previously?
>
>
> These two test cases are meant to be the same other than the return value in
> the second case is "non-trivial", and thus we should warn.  The first test
> is missing the "default" case.

Hmm, OK. It seems LLVM developers were/are generally happy to remove
those returns after fully covered switches - it comes up quite often
in code review and we diligently remove them. Do we want to
validate/promote it? (any that are in I suspect are a matter of
oversight rather than deliberate preference)

But I guess they're harmless enough to not be worth the warning, maybe...

- David



More information about the cfe-commits mailing list