aboutsummaryrefslogtreecommitdiff
path: root/lib/Sema/AnalysisBasedWarnings.cpp
diff options
context:
space:
mode:
authorTed Kremenek <kremenek@apple.com>2012-11-10 01:47:40 +0000
committerTed Kremenek <kremenek@apple.com>2012-11-10 01:47:40 +0000
commit6e3ceb54a05eb2442625d25fda0b57a2b805ceba (patch)
tree29d271682cede299229b1b3f3cb8f63c395ee440 /lib/Sema/AnalysisBasedWarnings.cpp
parent4e674f77150b52d8e6ae82faf64fbdac79d675d3 (diff)
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: <rdar://problem/12584746> git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@167655 91177308-0d34-0410-b5e6-96231b3b80d8
Diffstat (limited to 'lib/Sema/AnalysisBasedWarnings.cpp')
-rw-r--r--lib/Sema/AnalysisBasedWarnings.cpp13
1 files changed, 13 insertions, 0 deletions
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());