134d49471e0b6386aefdc0f6bd15e4a4876ce5db1Chandler Carruth// RUN: %clang_cc1 -fsyntax-only -verify %s
234d49471e0b6386aefdc0f6bd15e4a4876ce5db1Chandler Carruth
334d49471e0b6386aefdc0f6bd15e4a4876ce5db1Chandler Carruthint f() __attribute__((warn_unused_result));
434d49471e0b6386aefdc0f6bd15e4a4876ce5db1Chandler Carruth
534d49471e0b6386aefdc0f6bd15e4a4876ce5db1Chandler Carruthstruct S {
634d49471e0b6386aefdc0f6bd15e4a4876ce5db1Chandler Carruth  void t() const;
734d49471e0b6386aefdc0f6bd15e4a4876ce5db1Chandler Carruth};
834d49471e0b6386aefdc0f6bd15e4a4876ce5db1Chandler CarruthS g1() __attribute__((warn_unused_result));
934d49471e0b6386aefdc0f6bd15e4a4876ce5db1Chandler CarruthS *g2() __attribute__((warn_unused_result));
1034d49471e0b6386aefdc0f6bd15e4a4876ce5db1Chandler CarruthS &g3() __attribute__((warn_unused_result));
1134d49471e0b6386aefdc0f6bd15e4a4876ce5db1Chandler Carruth
1234d49471e0b6386aefdc0f6bd15e4a4876ce5db1Chandler Carruthvoid test() {
1334d49471e0b6386aefdc0f6bd15e4a4876ce5db1Chandler Carruth  f(); // expected-warning {{ignoring return value}}
1434d49471e0b6386aefdc0f6bd15e4a4876ce5db1Chandler Carruth  g1(); // expected-warning {{ignoring return value}}
1534d49471e0b6386aefdc0f6bd15e4a4876ce5db1Chandler Carruth  g2(); // expected-warning {{ignoring return value}}
1634d49471e0b6386aefdc0f6bd15e4a4876ce5db1Chandler Carruth  g3(); // expected-warning {{ignoring return value}}
1734d49471e0b6386aefdc0f6bd15e4a4876ce5db1Chandler Carruth
1834d49471e0b6386aefdc0f6bd15e4a4876ce5db1Chandler Carruth  (void)f();
1934d49471e0b6386aefdc0f6bd15e4a4876ce5db1Chandler Carruth  (void)g1();
2034d49471e0b6386aefdc0f6bd15e4a4876ce5db1Chandler Carruth  (void)g2();
2134d49471e0b6386aefdc0f6bd15e4a4876ce5db1Chandler Carruth  (void)g3();
2234d49471e0b6386aefdc0f6bd15e4a4876ce5db1Chandler Carruth
2334d49471e0b6386aefdc0f6bd15e4a4876ce5db1Chandler Carruth  if (f() == 0) return;
2434d49471e0b6386aefdc0f6bd15e4a4876ce5db1Chandler Carruth
2534d49471e0b6386aefdc0f6bd15e4a4876ce5db1Chandler Carruth  g1().t();
2634d49471e0b6386aefdc0f6bd15e4a4876ce5db1Chandler Carruth  g2()->t();
2734d49471e0b6386aefdc0f6bd15e4a4876ce5db1Chandler Carruth  g3().t();
2834d49471e0b6386aefdc0f6bd15e4a4876ce5db1Chandler Carruth
2934d49471e0b6386aefdc0f6bd15e4a4876ce5db1Chandler Carruth  int i = f();
3034d49471e0b6386aefdc0f6bd15e4a4876ce5db1Chandler Carruth  S s1 = g1();
3134d49471e0b6386aefdc0f6bd15e4a4876ce5db1Chandler Carruth  S *s2 = g2();
3234d49471e0b6386aefdc0f6bd15e4a4876ce5db1Chandler Carruth  S &s3 = g3();
3334d49471e0b6386aefdc0f6bd15e4a4876ce5db1Chandler Carruth  const S &s4 = g1();
3434d49471e0b6386aefdc0f6bd15e4a4876ce5db1Chandler Carruth}
3534d49471e0b6386aefdc0f6bd15e4a4876ce5db1Chandler Carruth
3634d49471e0b6386aefdc0f6bd15e4a4876ce5db1Chandler Carruthstruct X {
3734d49471e0b6386aefdc0f6bd15e4a4876ce5db1Chandler Carruth int foo() __attribute__((warn_unused_result));
3834d49471e0b6386aefdc0f6bd15e4a4876ce5db1Chandler Carruth};
3934d49471e0b6386aefdc0f6bd15e4a4876ce5db1Chandler Carruth
4034d49471e0b6386aefdc0f6bd15e4a4876ce5db1Chandler Carruthvoid bah() {
4134d49471e0b6386aefdc0f6bd15e4a4876ce5db1Chandler Carruth  X x, *x2;
4234d49471e0b6386aefdc0f6bd15e4a4876ce5db1Chandler Carruth  x.foo(); // expected-warning {{ignoring return value}}
4334d49471e0b6386aefdc0f6bd15e4a4876ce5db1Chandler Carruth  x2->foo(); // expected-warning {{ignoring return value}}
4434d49471e0b6386aefdc0f6bd15e4a4876ce5db1Chandler Carruth}
45