warn-unused-filescoped.cpp revision af8ca37a7fa45bff84831706c6d85f9e5b4e1d15
1// RUN: %clang_cc1 -fsyntax-only -verify -Wunused -Wunused-member-function %s
2
3static void f1(); // expected-warning{{unused}}
4
5namespace {
6  void f2();  // expected-warning{{unused}}
7
8  void f3() { }  // expected-warning{{unused}}
9
10  struct S {
11    void m1() { }  // expected-warning{{unused}}
12    void m2();  // expected-warning{{unused}}
13    void m3();
14    S(const S&);
15    void operator=(const S&);
16  };
17
18  template <typename T>
19  struct TS {
20    void m();
21  };
22  template <> void TS<int>::m() { }  // expected-warning{{unused}}
23
24  template <typename T>
25  void tf() { }
26  template <> void tf<int>() { }  // expected-warning{{unused}}
27
28  struct VS {
29    virtual void vm() { }
30  };
31
32  struct SVS : public VS {
33    void vm() { }
34  };
35}
36
37void S::m3() { }  // expected-warning{{unused}}
38
39static inline void f4() { }
40const unsigned int cx = 0;
41
42static int x1;  // expected-warning{{unused}}
43
44namespace {
45  int x2;  // expected-warning{{unused}}
46
47  struct S2 {
48    static int x;  // expected-warning{{unused}}
49  };
50
51  template <typename T>
52  struct TS2 {
53    static int x;
54  };
55  template <> int TS2<int>::x;  // expected-warning{{unused}}
56}
57
58namespace PR8841 {
59  // Ensure that friends of class templates are considered to have a dependent
60  // context and not marked unused.
61  namespace {
62    template <typename T> struct X {
63      friend bool operator==(const X&, const X&) { return false; }
64    };
65  }
66  template <typename T> void template_test(X<T> x) {
67    (void)(x == x);
68  }
69  void test() {
70    X<int> x;
71    template_test(x);
72  }
73}
74
75namespace test4 {
76  namespace { struct A {}; }
77
78  void test(A a); // expected-warning {{unused function}}
79  extern "C" void test4(A a);
80}
81