diff options
author | Alexander Kornienko <alexfh@google.com> | 2013-04-02 15:20:32 +0000 |
---|---|---|
committer | Alexander Kornienko <alexfh@google.com> | 2013-04-02 15:20:32 +0000 |
commit | b0707c9a933b1839fa966e4c72e4dcb9a198f11f (patch) | |
tree | 037e937a7524cae3999c6626e44a9dafaa6f0be7 | |
parent | 3791130df5ad83e4a9872f90cc9675e90b772f88 (diff) |
Fixed "fallthrough annotation does not directly precede switch label" warning in
case when [[clang::fallthrough]]; is used in a method of a local class.
git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@178543 91177308-0d34-0410-b5e6-96231b3b80d8
-rw-r--r-- | lib/Sema/AnalysisBasedWarnings.cpp | 4 | ||||
-rw-r--r-- | test/SemaCXX/switch-implicit-fallthrough-regression.cpp | 17 |
2 files changed, 21 insertions, 0 deletions
diff --git a/lib/Sema/AnalysisBasedWarnings.cpp b/lib/Sema/AnalysisBasedWarnings.cpp index 9993b48832..00d3c47525 100644 --- a/lib/Sema/AnalysisBasedWarnings.cpp +++ b/lib/Sema/AnalysisBasedWarnings.cpp @@ -817,6 +817,10 @@ namespace { return true; } + // We don't want to traverse local type declarations. We analyze their + // methods separately. + bool TraverseDecl(Decl *D) { return true; } + private: static const AttributedStmt *asFallThroughAttr(const Stmt *S) { diff --git a/test/SemaCXX/switch-implicit-fallthrough-regression.cpp b/test/SemaCXX/switch-implicit-fallthrough-regression.cpp new file mode 100644 index 0000000000..aec3769e00 --- /dev/null +++ b/test/SemaCXX/switch-implicit-fallthrough-regression.cpp @@ -0,0 +1,17 @@ +// RUN: %clang_cc1 -fsyntax-only -verify -std=c++11 -Wimplicit-fallthrough %s + +void f() { + class C { + void f(int x) { + switch (x) { + case 0: + x++; + [[clang::fallthrough]]; // expected-no-diagnostics + case 1: + x++; + break; + } + } + }; +} + |