• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1 // RUN: %clang_cc1 -fsyntax-only -verify -Wunused-value %s
2 
3 // PR4806
4 namespace test0 {
5   class Box {
6   public:
7     int i;
8     volatile int j;
9   };
10 
doit()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}}
15     box->j; // expected-warning {{expression result unused}}
16   }
17 }
18 
19 namespace test1 {
20 struct Foo {
21   int i;
operator ==test1::Foo22   bool operator==(const Foo& rhs) {
23     return i == rhs.i;
24   }
25 };
26 
27 #define NOP(x) (x)
b(Foo f1,Foo f2)28 void b(Foo f1, Foo f2) {
29   NOP(f1 == f2);  // expected-warning {{expression result unused}}
30 }
31 #undef NOP
32 }
33 
34 namespace test2 {
35   extern "C" {
36     namespace std {
37       template<typename T> struct basic_string {
38         struct X {};
methodtest2::std::basic_string39         void method() const {
40          X* x;
41          &x[0];  // expected-warning {{expression result unused}}
42         }
43       };
44       typedef basic_string<char> string;
func(const std::string & str)45       void func(const std::string& str) {
46         str.method();  // expected-note {{in instantiation of member function}}
47       }
48     }
49   }
50 }
51 
52 namespace test3 {
53 struct Used {
54   Used();
55   Used(int);
56   Used(int, int);
57 };
58 struct __attribute__((warn_unused)) Unused {
59   Unused();
60   Unused(int);
61   Unused(int, int);
62 };
f()63 void f() {
64   Used();
65   Used(1);
66   Used(1, 1);
67   Unused();     // expected-warning {{expression result unused}}
68   Unused(1);    // expected-warning {{expression result unused}}
69   Unused(1, 1); // expected-warning {{expression result unused}}
70 }
71 }
72