xref: /llvm-project/clang/test/Misc/diag-unused-source-ranges.cpp (revision 64083172eea26e50c8b22b85697a825be8bda424)
1*64083172STakuya Shimizu // RUN: %clang_cc1 -fcxx-exceptions -fsyntax-only -Wunused -Wunused-template -Wunused-exception-parameter -Wunused-member-function -fdiagnostics-print-source-range-info %s 2>&1 | FileCheck %s --strict-whitespace
2*64083172STakuya Shimizu #include "Inputs/diag-unused-source-ranges.h"
3*64083172STakuya Shimizu 
4*64083172STakuya Shimizu #define CAT(a, b) a ## b
5*64083172STakuya Shimizu 
6*64083172STakuya Shimizu // CHECK:      :{55:15-55:20}: warning: unused exception parameter 'param'
7*64083172STakuya Shimizu // CHECK-NEXT:   catch (int &param) {}
8*64083172STakuya Shimizu // CHECK-NEXT:               ^~~~~{{$}}
9*64083172STakuya Shimizu 
10*64083172STakuya Shimizu // CHECK:      :{53:7-53:12}: warning: unused variable 'local'
11*64083172STakuya Shimizu // CHECK-NEXT:   int local = 0;
12*64083172STakuya Shimizu // CHECK-NEXT:       ^~~~~{{$}}
13*64083172STakuya Shimizu 
14*64083172STakuya Shimizu // CHECK:      In file included from
15*64083172STakuya Shimizu // CHECK-NEXT: :{1:13-1:18}: warning: 'static' function 'thing' declared in header file should be declared 'static inline'
16*64083172STakuya Shimizu // CHECK-NEXT:   static void thing(void) {}
17*64083172STakuya Shimizu // CHECK-NEXT:               ^~~~~{{$}}
18*64083172STakuya Shimizu 
19*64083172STakuya Shimizu namespace {
20*64083172STakuya Shimizu class A {
21*64083172STakuya Shimizu   // CHECK:      :{[[@LINE+3]]:10-[[@LINE+3]]:14}: warning: member function 'func' is not needed
22*64083172STakuya Shimizu   // CHECK-NEXT:   void func() {}
23*64083172STakuya Shimizu   // CHECK-NEXT:        ^~~~{{$}}
func()24*64083172STakuya Shimizu     void func() {}
25*64083172STakuya Shimizu   // CHECK:      :{[[@LINE+3]]:32-[[@LINE+3]]:37}: warning: unused function template
26*64083172STakuya Shimizu   // CHECK-NEXT:   void templ(T) {}
27*64083172STakuya Shimizu   // CHECK-NEXT:        ^~~~~{{$}}
templ(T)28*64083172STakuya Shimizu     template <typename T> void templ(T) {}
29*64083172STakuya Shimizu   // CHECK:      :{[[@LINE+3]]:22-[[@LINE+3]]:32}: warning: member function 'templ<int>' is not needed
30*64083172STakuya Shimizu   // CHECK-NEXT:   void templ<int>(int) {}
31*64083172STakuya Shimizu   // CHECK-NEXT:        ^~~~~~~~~~{{$}}
templ(int)32*64083172STakuya Shimizu     template <> void templ<int>(int) {}
33*64083172STakuya Shimizu   // CHECK:      :{[[@LINE+3]]:22-[[@LINE+3]]:27}: warning: member function 'templ<float>' is not needed
34*64083172STakuya Shimizu   // CHECK-NEXT:   void templ(float) {}
35*64083172STakuya Shimizu   // CHECK-NEXT:        ^~~~~{{$}}
templ(float)36*64083172STakuya Shimizu     template <> void templ(float) {}
37*64083172STakuya Shimizu 
38*64083172STakuya Shimizu   // CHECK:      :{[[@LINE+4]]:10-[[@LINE+4]]:13}: warning: unused function template
39*64083172STakuya Shimizu   // CHECK-NEXT:   void foo() {
40*64083172STakuya Shimizu   // CHECK-NEXT:        ^~~{{$}}
41*64083172STakuya Shimizu     template <typename T>
foo()42*64083172STakuya Shimizu     void foo() {
43*64083172STakuya Shimizu       func();
44*64083172STakuya Shimizu       templ(0);
45*64083172STakuya Shimizu       templ(0.0f);
46*64083172STakuya Shimizu       templ(0.0);
47*64083172STakuya Shimizu     }
48*64083172STakuya Shimizu };
49*64083172STakuya Shimizu // CHECK:      :{[[@LINE+3]]:12-[[@LINE+3]]:23}: warning: unused function 'unused_func'
50*64083172STakuya Shimizu // CHECK-NEXT:   static int unused_func(int aaa, char bbb) {
51*64083172STakuya Shimizu // CHECK-NEXT:              ^~~~~~~~~~~{{$}}
unused_func(int aaa,char bbb)52*64083172STakuya Shimizu static int unused_func(int aaa, char bbb) {
53*64083172STakuya Shimizu   int local = 0;
54*64083172STakuya Shimizu   try{}
55*64083172STakuya Shimizu   catch (int &param) {}
56*64083172STakuya Shimizu   return 0;
57*64083172STakuya Shimizu }
58*64083172STakuya Shimizu 
59*64083172STakuya Shimizu // CHECK:      :{[[@LINE+4]]:6-[[@LINE+4]]:16}: warning: unused function template
60*64083172STakuya Shimizu // CHECK-NEXT:   auto arrow_decl(T a, T b) ->
61*64083172STakuya Shimizu // CHECK-NEXT:        ^~~~~~~~~~{{$}}
62*64083172STakuya Shimizu template <typename T>
arrow_decl(T a,T b)63*64083172STakuya Shimizu auto arrow_decl(T a, T b) -> decltype(a + b) { thing(); return a + b; }
64*64083172STakuya Shimizu 
65*64083172STakuya Shimizu // CHECK:      :{[[@LINE+4]]:6-[[@LINE+4]]:21}: warning: unused function 'arrow_decl<int>'
66*64083172STakuya Shimizu // CHECK-NEXT:   auto arrow_decl<int>(int a, int b) ->
67*64083172STakuya Shimizu // CHECK-NEXT:        ^~~~~~~~~~~~~~~{{$}}
68*64083172STakuya Shimizu template <>
arrow_decl(int a,int b)69*64083172STakuya Shimizu auto arrow_decl<int>(int a, int b) -> int { return a + b; }
70*64083172STakuya Shimizu 
71*64083172STakuya Shimizu 
72*64083172STakuya Shimizu // CHECK:      :{[[@LINE+4]]:10-[[@LINE+4]]:20}: warning: unused function template
73*64083172STakuya Shimizu // CHECK-NEXT:   static T func_templ(int bbb, T ccc) {
74*64083172STakuya Shimizu // CHECK-NEXT:            ^~~~~~~~~~{{$}}
75*64083172STakuya Shimizu template <typename T>
func_templ(int bbb,T ccc)76*64083172STakuya Shimizu static T func_templ(int bbb, T ccc) {
77*64083172STakuya Shimizu   return ccc;
78*64083172STakuya Shimizu }
79*64083172STakuya Shimizu 
80*64083172STakuya Shimizu // CHECK:      :{[[@LINE+3]]:17-[[@LINE+3]]:32}: warning: function 'func_templ<int>' is not needed
81*64083172STakuya Shimizu // CHECK-NEXT:   int func_templ<int>(int bbb, int ccc) {
82*64083172STakuya Shimizu // CHECK-NEXT:       ^~~~~~~~~~~~~~~{{$}}
func_templ(int bbb,int ccc)83*64083172STakuya Shimizu template <> int func_templ<int>(int bbb, int ccc) {
84*64083172STakuya Shimizu   return bbb;
85*64083172STakuya Shimizu }
86*64083172STakuya Shimizu 
87*64083172STakuya Shimizu // CHECK:      :{[[@LINE+3]]:35-[[@LINE+3]]:47}: warning: unused function template
88*64083172STakuya Shimizu // CHECK-NEXT:   static void never_called() {
89*64083172STakuya Shimizu // CHECK-NEXT:               ^~~~~~~~~~~~{{$}}
never_called()90*64083172STakuya Shimizu template <typename T> static void never_called() {
91*64083172STakuya Shimizu   func_templ<int>(0, 0);
92*64083172STakuya Shimizu }
93*64083172STakuya Shimizu 
94*64083172STakuya Shimizu // CHECK:      :{[[@LINE+3]]:22-[[@LINE+3]]:31}: warning: unused variable template
95*64083172STakuya Shimizu // CHECK-NEXT:   int var_templ =
96*64083172STakuya Shimizu // CHECK-NEXT:       ^~~~~~~~~{{$}}
97*64083172STakuya Shimizu template <int n> int var_templ = n * var_templ<n-1>;
98*64083172STakuya Shimizu // CHECK:      :{[[@LINE+3]]:17-[[@LINE+3]]:29}: warning: variable 'var_templ<0>' is not needed
99*64083172STakuya Shimizu // CHECK-NEXT:   int var_templ<0> =
100*64083172STakuya Shimizu // CHECK-NEXT:       ^~~~~~~~~~~~{{$}}
101*64083172STakuya Shimizu template <> int var_templ<0> = 1;
102*64083172STakuya Shimizu struct {
103*64083172STakuya Shimizu // CHECK:      :{[[@LINE+3]]:8-[[@LINE+3]]:11}: warning: unused member function 'fun'
104*64083172STakuya Shimizu // CHECK-NEXT:   void fun() {}
105*64083172STakuya Shimizu // CHECK-NEXT:        ^~~{{$}}
fun__anond93826520111::__anond93826520208106*64083172STakuya Shimizu   void fun() {}
107*64083172STakuya Shimizu // CHECK:      :{[[@LINE+3]]:3-[[@LINE+3]]:8}: warning: unused variable 'var_x'
108*64083172STakuya Shimizu // CHECK-NEXT:   } var_x;
109*64083172STakuya Shimizu // CHECK-NEXT:     ^~~~~{{$}}
110*64083172STakuya Shimizu } var_x;
111*64083172STakuya Shimizu 
112*64083172STakuya Shimizu // CHECK:      :{[[@LINE+5]]:12-[[@LINE+6]]:12}: warning: unused variable 'new_line'
113*64083172STakuya Shimizu // CHECK-NEXT:   static int CAT(new_,
114*64083172STakuya Shimizu // CHECK-NEXT:              ^~~~~~~~~{{$}}
115*64083172STakuya Shimizu // CHECK-NEXT:         line) =
116*64083172STakuya Shimizu // CHECK-NEXT:         ~~~~~{{$}}
117*64083172STakuya Shimizu static int CAT(new_,
118*64083172STakuya Shimizu       line) = sizeof(var_templ<0>);
119*64083172STakuya Shimizu }
120*64083172STakuya Shimizu 
121*64083172STakuya Shimizu // CHECK:      :{[[@LINE+3]]:15-[[@LINE+3]]:27}: warning: unused variable 'const_unused'
122*64083172STakuya Shimizu // CHECK-NEXT:   constexpr int const_unused = 1
123*64083172STakuya Shimizu // CHECK-NEXT:                 ^~~~~~~~~~~~{{$}}
124*64083172STakuya Shimizu constexpr int const_unused = 1;
125