diff options
author | Dimitry Andric <dim@FreeBSD.org> | 2017-12-18 20:11:37 +0000 |
---|---|---|
committer | Dimitry Andric <dim@FreeBSD.org> | 2017-12-18 20:11:37 +0000 |
commit | 461a67fa15370a9ec88f8f8a240bf7c123bb2029 (patch) | |
tree | 6942083d7d56bba40ec790a453ca58ad3baf6832 /test/Sema/c2x-nodiscard.c | |
parent | 75c3240472ba6ac2669ee72ca67eb72d4e2851fc (diff) |
Vendor import of clang trunk r321017:vendor/clang/clang-trunk-r321017
Notes
Notes:
svn path=/vendor/clang/dist/; revision=326941
svn path=/vendor/clang/clang-trunk-r321017/; revision=326942; tag=vendor/clang/clang-trunk-r321017
Diffstat (limited to 'test/Sema/c2x-nodiscard.c')
-rw-r--r-- | test/Sema/c2x-nodiscard.c | 49 |
1 files changed, 49 insertions, 0 deletions
diff --git a/test/Sema/c2x-nodiscard.c b/test/Sema/c2x-nodiscard.c new file mode 100644 index 000000000000..fc5b12347e62 --- /dev/null +++ b/test/Sema/c2x-nodiscard.c @@ -0,0 +1,49 @@ +// RUN: %clang_cc1 -fsyntax-only -fdouble-square-bracket-attributes -verify %s + +struct [[nodiscard]] S1 { // ok + int i; +}; +struct [[nodiscard nodiscard]] S2 { // expected-error {{attribute 'nodiscard' cannot appear multiple times in an attribute specifier}} + int i; +}; +struct [[nodiscard("Wrong")]] S3 { // expected-error {{'nodiscard' cannot have an argument list}} + int i; +}; + +[[nodiscard]] int f1(void); +enum [[nodiscard]] E1 { One }; + +[[nodiscard]] int i; // expected-warning {{'nodiscard' attribute only applies to Objective-C methods, enums, structs, unions, classes, functions, and function pointers}} + +struct [[nodiscard]] S4 { + int i; +}; +struct S4 get_s(void); + +enum [[nodiscard]] E2 { Two }; +enum E2 get_e(void); + +[[nodiscard]] int get_i(); + +void f2(void) { + get_s(); // expected-warning {{ignoring return value of function declared with 'nodiscard' attribute}} + get_i(); // expected-warning {{ignoring return value of function declared with 'nodiscard' attribute}} + get_e(); // expected-warning {{ignoring return value of function declared with 'nodiscard' attribute}} + + // Okay, warnings are not encouraged + (void)get_s(); + (void)get_i(); + (void)get_e(); +} + +struct [[nodiscard]] error_info{ + int i; +}; + +struct error_info enable_missile_safety_mode(void); +void launch_missiles(void); +void test_missiles(void) { + enable_missile_safety_mode(); // expected-warning {{ignoring return value of function declared with 'nodiscard'}} + launch_missiles(); +} + |