1 // RUN: %clang_cc1 -fsyntax-only -verify -Wall %s
2 
3 namespace test1 {
4 static void f() {} // expected-warning {{function 'f' is not needed and will not be emitted}}
5 static void f();
6 template <typename T>
7 void foo() {
8   f();
9 }
10 }
11 
12 namespace test1_template {
13 template <typename T> static void f() {}
14 template <> void f<int>() {} // expected-warning {{function 'f<int>' is not needed and will not be emitted}}
15 template <typename T>
16 void foo() {
17   f<int>();
18   f<long>();
19 }
20 } // namespace test1_template
21 
22 namespace test2 {
23   static void f() {}
24   static void f();
25   static void g() { f(); }
26   void h() { g(); }
27 }
28 
29 namespace test3 {
30   static void f();
31   template<typename T>
32   static void g() {
33     f();
34   }
35   static void f() {
36   }
37   void h() {
38     g<int>();
39   }
40 }
41 
42 namespace test4 {
43   static void f();
44   static void f();
45   template<typename T>
46   static void g() {
47     f();
48   }
49   static void f() {
50   }
51   void h() {
52     g<int>();
53   }
54 }
55 
56 namespace test4 {
57   static void func();
58   void bar() {
59     void func();
60     func();
61   }
62   static void func() {}
63 }
64