blob: 072ee60f1f35e07caf43435bbb24c82b281d5828 [file] [log] [blame]
John McCall0faede62010-03-12 07:11:26 +00001// RUN: %clang_cc1 -fsyntax-only -verify -Wunused-value %s
2
3// PR4806
4namespace test0 {
5 class Box {
6 public:
7 int i;
8 volatile int j;
9 };
10
11 void doit() {
12 // pointer to volatile has side effect (thus no warning)
13 Box* box = new Box;
14 box->i; // expected-warning {{expression result unused}}
Eli Friedmana6115062012-05-24 00:47:05 +000015 box->j; // expected-warning {{expression result unused}}
John McCall0faede62010-03-12 07:11:26 +000016 }
17}
Matt Beaumont-Gay6e521832011-09-19 18:51:20 +000018
19namespace test1 {
20struct Foo {
21 int i;
22 bool operator==(const Foo& rhs) {
23 return i == rhs.i;
24 }
25};
26
27#define NOP(x) (x)
28void b(Foo f1, Foo f2) {
29 NOP(f1 == f2); // expected-warning {{expression result unused}}
30}
31#undef NOP
32}
Nick Lewycky5a7120c2012-03-14 20:41:00 +000033
34namespace test2 {
35 extern "C" {
36 namespace std {
37 template<typename T> struct basic_string {
38 struct X {};
39 void method() const {
40 X* x;
41 &x[0]; // expected-warning {{expression result unused}}
42 }
43 };
44 typedef basic_string<char> string;
45 void func(const std::string& str) {
46 str.method(); // expected-note {{in instantiation of member function}}
47 }
48 }
49 }
50}
51