Author: rsmith Date: Mon Mar 7 18:34:49 2016 New Revision: 262882 URL: http://llvm.org/viewvc/llvm-project?rev=262882&view=rev Log: Add accidentally forgotten testcase from r262881.
Added: cfe/trunk/test/CXX/dcl.dcl/dcl.attr/dcl.attr.fallthrough/ cfe/trunk/test/CXX/dcl.dcl/dcl.attr/dcl.attr.fallthrough/p1.cpp Added: cfe/trunk/test/CXX/dcl.dcl/dcl.attr/dcl.attr.fallthrough/p1.cpp URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/test/CXX/dcl.dcl/dcl.attr/dcl.attr.fallthrough/p1.cpp?rev=262882&view=auto ============================================================================== --- cfe/trunk/test/CXX/dcl.dcl/dcl.attr/dcl.attr.fallthrough/p1.cpp (added) +++ cfe/trunk/test/CXX/dcl.dcl/dcl.attr/dcl.attr.fallthrough/p1.cpp Mon Mar 7 18:34:49 2016 @@ -0,0 +1,70 @@ +// RUN: %clang_cc1 -std=c++1z -verify %s + +void f(int n) { + switch (n) { + case 0: + n += 1; + [[fallthrough]]; // ok + case 1: + if (n) { + [[fallthrough]]; // ok + } else { + return; + } + case 2: + for (int n = 0; n != 10; ++n) + [[fallthrough]]; // expected-error {{does not directly precede switch label}} + case 3: + while (true) + [[fallthrough]]; // expected-error {{does not directly precede switch label}} + case 4: + while (false) + [[fallthrough]]; // expected-error {{does not directly precede switch label}} + case 5: + do [[fallthrough]]; while (true); // expected-error {{does not directly precede switch label}} + case 6: + do [[fallthrough]]; while (false); // expected-error {{does not directly precede switch label}} + case 7: + switch (n) { + case 0: + // FIXME: This should be an error, even though the next thing we do is to + // fall through in an outer switch statement. + [[fallthrough]]; + } + case 8: + [[fallthrough]]; // expected-error {{does not directly precede switch label}} + goto label; + label: + case 9: + n += 1; + case 10: // no warning, -Wimplicit-fallthrough is not enabled in this test, and does not need to + // be enabled for these diagnostics to be produced. + break; + } +} + +[[fallthrough]] typedef int n; // expected-error {{'fallthrough' attribute cannot be applied to a declaration}} +typedef int [[fallthrough]] n; // expected-error {{'fallthrough' attribute cannot be applied to types}} +typedef int n [[fallthrough]]; // expected-error {{'fallthrough' attribute cannot be applied to a declaration}} + +enum [[fallthrough]] E {}; // expected-error {{'fallthrough' attribute cannot be applied to a declaration}} +class [[fallthrough]] C {}; // expected-error {{'fallthrough' attribute cannot be applied to a declaration}} + +[[fallthrough]] // expected-error {{'fallthrough' attribute cannot be applied to a declaration}} +void g() { + [[fallthrough]] int n; // expected-error {{'fallthrough' attribute cannot be applied to a declaration}} + [[fallthrough]] ++n; // expected-error-re {{{{^}}fallthrough attribute is only allowed on empty statements}} + + switch (n) { + // FIXME: This should be an error. + [[fallthrough]]; + return; + + case 0: + [[fallthrough, fallthrough]]; // expected-error {{multiple times}} + case 1: + [[fallthrough(0)]]; // expected-error {{argument list}} + case 2: + break; + } +} _______________________________________________ cfe-commits mailing list cfe-commits@lists.llvm.org http://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits