[cfe-commits] r167655 - /cfe/trunk/lib/Sema/AnalysisBasedWarnings.cpp

Ted Kremenek kremenek at apple.com
Fri Nov 9 17:47:40 PST 2012


Author: kremenek
Date: Fri Nov  9 19:47:40 2012
New Revision: 167655

URL: http://llvm.org/viewvc/llvm-project?rev=167655&view=rev
Log:
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>

Modified:
    cfe/trunk/lib/Sema/AnalysisBasedWarnings.cpp

Modified: cfe/trunk/lib/Sema/AnalysisBasedWarnings.cpp
URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/lib/Sema/AnalysisBasedWarnings.cpp?rev=167655&r1=167654&r2=167655&view=diff
==============================================================================
--- cfe/trunk/lib/Sema/AnalysisBasedWarnings.cpp (original)
+++ cfe/trunk/lib/Sema/AnalysisBasedWarnings.cpp Fri Nov  9 19:47:40 2012
@@ -818,6 +818,19 @@
 
 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());
 





More information about the cfe-commits mailing list