Search code examples
clang++suppress-warnings

How to disable Clang warning "no case matching constant switch condition"


I am working on a project that uses code from another project, and that other code is giving me a bunch of warnings during compilation. I don't want to change that code (my project is just a thin wrapper around their code and I want to be able to pull in updates without patching all the time) so I'd like to disable these warnings so I can focus on just my own code.

Unfortunately I can't see where this is documented!

The error I am receiving is:

warning: no case matching constant switch condition '2'

I have looked in the manual and tried -Wno-switch, -Wno-switch-bool and -Wno-switch-enum but none of them make this warning go away. I can't see where in the manual this warning message is listed.

Using Google I haven't been able to find any command-line option that matches up with the error text.

Using GitHub I was able to find the LLVM source that runs a test for this warning but I'm not having any luck mapping that back to a -W option to disable it.

What am I missing?

Here is some code that reproduces the error:

enum En { A, B, C };
template <En how> void foo() {
    int x = 0, y = 5;

    switch (how) {
        case A: x *= y; break;
        case B: x += y; break;
    }
}

template void foo<C>();

int main(void)
{
    return 0;
}

Solution

  • I'm afraid there is no -Wno-<what> flag that can specifically suppress this warning. If there was, then the diagnostic would be:

    warning: no case matching constant switch condition '2' [-W<what>]
    

    You can only suppress it by suppressing all warnings, with -Wno-everything, which of course I would not advise.