]> CyberLeo.Net >> Repos - FreeBSD/FreeBSD.git/blob - test/SemaCXX/warn-unused-value.cpp
Vendor import of clang release_34 branch r197841 (effectively, 3.4 RC3):
[FreeBSD/FreeBSD.git] / test / SemaCXX / warn-unused-value.cpp
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
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;
22   bool operator==(const Foo& rhs) {
23     return i == rhs.i;
24   }
25 };
26
27 #define NOP(x) (x)
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 {};
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
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 };
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 }