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