From: Ted Kremenek Date: Sat, 10 Nov 2012 01:47:40 +0000 (+0000) Subject: Disable -Wimplicit-fallthrough when not using C++. X-Git-Url: https://granicus.if.org/sourcecode?a=commitdiff_plain;h=6e3ceb54a05eb2442625d25fda0b57a2b805ceba;p=clang Disable -Wimplicit-fallthrough when not using C++. The rationale is that there is no good workflow to silence the warning for specific cases, other than using pragmas. This is because the attribute to decorate an explicit fall through is only available in C++11. By that argument, this should probably also be disabled unless one is using C++11, but apparently there is an explicit test case for this warning when using C++98. This will require further discussion on cfe-commits. Fixes: git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@167655 91177308-0d34-0410-b5e6-96231b3b80d8 --- diff --git a/lib/Sema/AnalysisBasedWarnings.cpp b/lib/Sema/AnalysisBasedWarnings.cpp index a20817f965..5c21ea4867 100644 --- a/lib/Sema/AnalysisBasedWarnings.cpp +++ b/lib/Sema/AnalysisBasedWarnings.cpp @@ -818,6 +818,19 @@ namespace { static void DiagnoseSwitchLabelsFallthrough(Sema &S, AnalysisDeclContext &AC, bool PerFunction) { + // Only perform this analysis when using C++. There is no good workflow + // for this warning when using straight C. There is no good way to silence + // the warning (no attribute is available) unless we are using C++11's support + // for generalized attributes. Once could use pragmas to silence the warning, + // but as a general solution that is gross and not in the spirit of this + // warning. + // + // NOTE: this argument also applies to C++ code not using C++11, as the + // generalized attributes are not available in earlier C++ dialects. + // This will require some discussion. + if (!AC.getASTContext().getLangOpts().CPlusPlus) + return; + FallthroughMapper FM(S); FM.TraverseStmt(AC.getBody());