diff options
Diffstat (limited to 'clang/test/CXX/drs/dr24xx.cpp')
-rw-r--r-- | clang/test/CXX/drs/dr24xx.cpp | 51 |
1 files changed, 47 insertions, 4 deletions
diff --git a/clang/test/CXX/drs/dr24xx.cpp b/clang/test/CXX/drs/dr24xx.cpp index 3fd8539..b34ceb4 100644 --- a/clang/test/CXX/drs/dr24xx.cpp +++ b/clang/test/CXX/drs/dr24xx.cpp @@ -1,9 +1,52 @@ -// RUN: %clang_cc1 -std=c++20 %s -verify -// RUN: %clang_cc1 -std=c++23 %s -verify +// RUN: %clang_cc1 -std=c++98 %s -verify=expected +// RUN: %clang_cc1 -std=c++11 %s -verify=expected +// RUN: %clang_cc1 -std=c++14 %s -verify=expected +// RUN: %clang_cc1 -std=c++17 %s -verify=expected,since-cxx17 +// RUN: %clang_cc1 -std=c++20 %s -verify=expected,since-cxx17 +// RUN: %clang_cc1 -std=c++23 %s -verify=expected,since-cxx17 +// RUN: %clang_cc1 -std=c++2c %s -verify=expected,since-cxx17 + +#if __cplusplus <= 201402L // expected-no-diagnostics +#endif + +namespace dr2406 { // dr2406: 5 +#if __cplusplus >= 201703L +void fallthrough(int n) { + void g(), h(), i(); + switch (n) { + case 1: + case 2: + g(); + [[fallthrough]]; + case 3: // warning on fallthrough discouraged + do { + [[fallthrough]]; + // since-cxx17-error@-1 {{fallthrough annotation does not directly precede switch label}} + } while (false); + case 6: + do { + [[fallthrough]]; + // since-cxx17-error@-1 {{fallthrough annotation does not directly precede switch label}} + } while (n); + case 7: + while (false) { + [[fallthrough]]; + // since-cxx17-error@-1 {{fallthrough annotation does not directly precede switch label}} + } + case 5: + h(); + case 4: // implementation may warn on fallthrough + i(); + [[fallthrough]]; + // since-cxx17-error@-1 {{fallthrough annotation does not directly precede switch label}} + } +} +#endif +} namespace dr2450 { // dr2450: 18 drafting -#if __cplusplus > 202002L +#if __cplusplus >= 202302L struct S {int a;}; template <S s> void f(){} @@ -17,7 +60,7 @@ f<{.a= 0}>(); } namespace dr2459 { // dr2459: 18 drafting -#if __cplusplus > 202002L +#if __cplusplus >= 202302L struct A { constexpr A(float) {} }; |