summaryrefslogtreecommitdiffstats
path: root/clang/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
commit15da29c682124d9e7dae452ded26ae78cc3c0e8d (patch)
tree0c81ccfbb687a2c2caf1057354b4a091e035fc83 /clang/lib/Sema/AnalysisBasedWarnings.cpp
parent9eb409ace9952626d4be15753616ec5acf7b3396 (diff)
downloadbcm5719-llvm-15da29c682124d9e7dae452ded26ae78cc3c0e8d.tar.gz
bcm5719-llvm-15da29c682124d9e7dae452ded26ae78cc3c0e8d.zip
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> llvm-svn: 167655
Diffstat (limited to 'clang/lib/Sema/AnalysisBasedWarnings.cpp')
-rw-r--r--clang/lib/Sema/AnalysisBasedWarnings.cpp13
1 files changed, 13 insertions, 0 deletions
diff --git a/clang/lib/Sema/AnalysisBasedWarnings.cpp b/clang/lib/Sema/AnalysisBasedWarnings.cpp
index a20817f9650..5c21ea4867b 100644
--- a/clang/lib/Sema/AnalysisBasedWarnings.cpp
+++ b/clang/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());
OpenPOWER on IntegriCloud