summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--clang/include/clang/Basic/Attr.td2
-rw-r--r--clang/test/Preprocessor/has_attribute.cpp10
-rw-r--r--clang/test/SemaCXX/nodiscard.cpp13
3 files changed, 18 insertions, 7 deletions
diff --git a/clang/include/clang/Basic/Attr.td b/clang/include/clang/Basic/Attr.td
index 391d0426816..496e3951971 100644
--- a/clang/include/clang/Basic/Attr.td
+++ b/clang/include/clang/Basic/Attr.td
@@ -742,7 +742,7 @@ def ExtVectorType : Attr {
}
def FallThrough : StmtAttr {
- let Spellings = [CXX11<"", "fallthrough", 201503>,
+ let Spellings = [CXX11<"", "fallthrough", 201603>,
CXX11<"clang", "fallthrough">];
// let Subjects = [NullStmt];
let Documentation = [FallthroughDocs];
diff --git a/clang/test/Preprocessor/has_attribute.cpp b/clang/test/Preprocessor/has_attribute.cpp
index 1ab45020b44..2cfa005fb09 100644
--- a/clang/test/Preprocessor/has_attribute.cpp
+++ b/clang/test/Preprocessor/has_attribute.cpp
@@ -52,6 +52,16 @@
int has_cxx14_deprecated_vers();
#endif
+// CHECK: has_cxx1z_nodiscard
+#if __has_cpp_attribute(nodiscard) == 201603
+ int has_cxx1z_nodiscard();
+#endif
+
+// CHECK: has_cxx1z_fallthrough
+#if __has_cpp_attribute(fallthrough) == 201603
+ int has_cxx1z_fallthrough();
+#endif
+
// CHECK: has_declspec_uuid
#if __has_declspec_attribute(uuid)
int has_declspec_uuid();
diff --git a/clang/test/SemaCXX/nodiscard.cpp b/clang/test/SemaCXX/nodiscard.cpp
index e53cf9bb06f..4eb004c67df 100644
--- a/clang/test/SemaCXX/nodiscard.cpp
+++ b/clang/test/SemaCXX/nodiscard.cpp
@@ -1,9 +1,6 @@
// RUN: %clang_cc1 -fsyntax-only -std=c++1z -verify -Wc++1z-extensions %s
// RUN: %clang_cc1 -fsyntax-only -std=c++11 -verify -DEXT -Wc++1z-extensions %s
-#if !defined(EXT)
-static_assert(__has_cpp_attribute(nodiscard) == 201603);
-
struct [[nodiscard]] S {};
S get_s();
S& get_s_ref();
@@ -28,6 +25,10 @@ void f() {
[[nodiscard nodiscard]] int wrong1(); // expected-error {{attribute 'nodiscard' cannot appear multiple times in an attribute specifier}}
namespace [[nodiscard]] N {} // expected-warning {{'nodiscard' attribute only applies to functions, methods, enums, and classes}}
-#else
-struct [[nodiscard]] S {}; // expected-warning {{use of the 'nodiscard' attribute is a C++1z extension}}
-#endif // EXT
+
+#ifdef EXT
+// expected-warning@4 {{use of the 'nodiscard' attribute is a C++1z extension}}
+// expected-warning@8 {{use of the 'nodiscard' attribute is a C++1z extension}}
+// expected-warning@11 {{use of the 'nodiscard' attribute is a C++1z extension}}
+// expected-warning@25 2{{use of the 'nodiscard' attribute is a C++1z extension}}
+#endif
OpenPOWER on IntegriCloud