diff options
Diffstat (limited to 'test/SemaCXX/warn-unused-result.cpp')
-rw-r--r-- | test/SemaCXX/warn-unused-result.cpp | 38 |
1 files changed, 37 insertions, 1 deletions
diff --git a/test/SemaCXX/warn-unused-result.cpp b/test/SemaCXX/warn-unused-result.cpp index d14fdf9..b0bf61f 100644 --- a/test/SemaCXX/warn-unused-result.cpp +++ b/test/SemaCXX/warn-unused-result.cpp @@ -1,4 +1,4 @@ -// RUN: %clang_cc1 -fsyntax-only -verify %s +// RUN: %clang_cc1 -fsyntax-only -verify -std=c++11 %s int f() __attribute__((warn_unused_result)); @@ -42,3 +42,39 @@ void bah() { x.foo(); // expected-warning {{ignoring return value}} x2->foo(); // expected-warning {{ignoring return value}} } + +namespace warn_unused_CXX11 { +struct [[clang::warn_unused_result]] Status { + bool ok() const; + Status& operator=(const Status& x); + inline void Update(const Status& new_status) { + if (ok()) { + *this = new_status; //no-warning + } + } +}; +Status DoSomething(); +Status& DoSomethingElse(); +Status* DoAnotherThing(); +Status** DoYetAnotherThing(); +void lazy() { + Status s = DoSomething(); + if (!s.ok()) return; + Status &rs = DoSomethingElse(); + if (!rs.ok()) return; + Status *ps = DoAnotherThing(); + if (!ps->ok()) return; + Status **pps = DoYetAnotherThing(); + if (!(*pps)->ok()) return; + + (void)DoSomething(); + (void)DoSomethingElse(); + (void)DoAnotherThing(); + (void)DoYetAnotherThing(); + + DoSomething(); // expected-warning {{ignoring return value}} + DoSomethingElse(); // expected-warning {{ignoring return value}} + DoAnotherThing(); // expected-warning {{ignoring return value}} + DoYetAnotherThing(); +} +} |