| // RUN: %clang_cc1 -fsyntax-only -verify %s |
| |
| int f() __attribute__((warn_unused_result)); |
| |
| struct S { |
| void t() const; |
| }; |
| S g1() __attribute__((warn_unused_result)); |
| S *g2() __attribute__((warn_unused_result)); |
| S &g3() __attribute__((warn_unused_result)); |
| |
| void test() { |
| f(); // expected-warning {{ignoring return value}} |
| g1(); // expected-warning {{ignoring return value}} |
| g2(); // expected-warning {{ignoring return value}} |
| g3(); // expected-warning {{ignoring return value}} |
| |
| (void)f(); |
| (void)g1(); |
| (void)g2(); |
| (void)g3(); |
| |
| if (f() == 0) return; |
| |
| g1().t(); |
| g2()->t(); |
| g3().t(); |
| |
| int i = f(); |
| S s1 = g1(); |
| S *s2 = g2(); |
| S &s3 = g3(); |
| const S &s4 = g1(); |
| } |
| |
| struct X { |
| int foo() __attribute__((warn_unused_result)); |
| }; |
| |
| void bah() { |
| X x, *x2; |
| x.foo(); // expected-warning {{ignoring return value}} |
| x2->foo(); // expected-warning {{ignoring return value}} |
| } |