xref: /llvm-project/clang-tools-extra/test/clang-tidy/checkers/misc/use-internal-linkage-func.cpp (revision f89fa238faa6a63168997a8a1d03c15b71da8080)
1c4f83a00SCongcong Cai // RUN: %check_clang_tidy %s misc-use-internal-linkage %t -- -- -I%S/Inputs/use-internal-linkage
2019f5257SCongcong Cai // RUN: %check_clang_tidy %s misc-use-internal-linkage %t -- \
3019f5257SCongcong Cai // RUN:   -config="{CheckOptions: {misc-use-internal-linkage.FixMode: 'UseStatic'}}"  -- -I%S/Inputs/use-internal-linkage
4c4f83a00SCongcong Cai 
5c4f83a00SCongcong Cai #include "func.h"
6c4f83a00SCongcong Cai 
7c4f83a00SCongcong Cai void func() {}
8c4f83a00SCongcong Cai // CHECK-MESSAGES: :[[@LINE-1]]:6: warning: function 'func'
9019f5257SCongcong Cai // CHECK-FIXES: static void func() {}
10c4f83a00SCongcong Cai 
11c4f83a00SCongcong Cai template<class T>
12c4f83a00SCongcong Cai void func_template() {}
13c4f83a00SCongcong Cai // CHECK-MESSAGES: :[[@LINE-1]]:6: warning: function 'func_template'
14019f5257SCongcong Cai // CHECK-FIXES: static void func_template() {}
15c4f83a00SCongcong Cai 
16e3aafe40SCongcong Cai void func_cpp_inc() {}
17c4f83a00SCongcong Cai // CHECK-MESSAGES: :[[@LINE-1]]:6: warning: function 'func_cpp_inc'
18e3aafe40SCongcong Cai // CHECK-FIXES: static void func_cpp_inc() {}
19c4f83a00SCongcong Cai 
20e3aafe40SCongcong Cai int* func_cpp_inc_return_ptr() {}
216f21a7bdSCongcong Cai // CHECK-MESSAGES: :[[@LINE-1]]:6: warning: function 'func_cpp_inc_return_ptr'
22e3aafe40SCongcong Cai // CHECK-FIXES: static int* func_cpp_inc_return_ptr() {}
236f21a7bdSCongcong Cai 
24e3aafe40SCongcong Cai const int* func_cpp_inc_return_const_ptr() {}
256f21a7bdSCongcong Cai // CHECK-MESSAGES: :[[@LINE-1]]:12: warning: function 'func_cpp_inc_return_const_ptr'
26e3aafe40SCongcong Cai // CHECK-FIXES: static const int* func_cpp_inc_return_const_ptr() {}
276f21a7bdSCongcong Cai 
28e3aafe40SCongcong Cai int const* func_cpp_inc_return_ptr_const() {}
296f21a7bdSCongcong Cai // CHECK-MESSAGES: :[[@LINE-1]]:12: warning: function 'func_cpp_inc_return_ptr_const'
30e3aafe40SCongcong Cai // CHECK-FIXES: static int const* func_cpp_inc_return_ptr_const() {}
316f21a7bdSCongcong Cai 
32e3aafe40SCongcong Cai int * const func_cpp_inc_return_const() {}
336f21a7bdSCongcong Cai // CHECK-MESSAGES: :[[@LINE-1]]:13: warning: function 'func_cpp_inc_return_const'
34e3aafe40SCongcong Cai // CHECK-FIXES: static int * const func_cpp_inc_return_const() {}
356f21a7bdSCongcong Cai 
36e3aafe40SCongcong Cai volatile const int* func_cpp_inc_return_volatile_const_ptr() {}
376f21a7bdSCongcong Cai // CHECK-MESSAGES: :[[@LINE-1]]:21: warning: function 'func_cpp_inc_return_volatile_const_ptr'
38e3aafe40SCongcong Cai // CHECK-FIXES: static volatile const int* func_cpp_inc_return_volatile_const_ptr() {}
396f21a7bdSCongcong Cai 
40e3aafe40SCongcong Cai [[nodiscard]] void func_nodiscard() {}
416f21a7bdSCongcong Cai // CHECK-MESSAGES: :[[@LINE-1]]:20: warning: function 'func_nodiscard'
42e3aafe40SCongcong Cai // CHECK-FIXES: {{\[\[nodiscard\]\]}} static void func_nodiscard() {}
436f21a7bdSCongcong Cai 
446f21a7bdSCongcong Cai #define NDS [[nodiscard]]
456f21a7bdSCongcong Cai #define NNDS
466f21a7bdSCongcong Cai 
47e3aafe40SCongcong Cai NDS void func_nds() {}
486f21a7bdSCongcong Cai // CHECK-MESSAGES: :[[@LINE-1]]:10: warning: function 'func_nds'
49e3aafe40SCongcong Cai // CHECK-FIXES: NDS static void func_nds() {}
506f21a7bdSCongcong Cai 
51e3aafe40SCongcong Cai NNDS void func_nnds() {}
526f21a7bdSCongcong Cai // CHECK-MESSAGES: :[[@LINE-1]]:11: warning: function 'func_nnds'
53e3aafe40SCongcong Cai // CHECK-FIXES: NNDS static void func_nnds() {}
546f21a7bdSCongcong Cai 
55c4f83a00SCongcong Cai #include "func_cpp.inc"
56c4f83a00SCongcong Cai 
57e3aafe40SCongcong Cai void func_h_inc() {}
58c4f83a00SCongcong Cai 
59c4f83a00SCongcong Cai struct S {
60c4f83a00SCongcong Cai   void method();
61c4f83a00SCongcong Cai };
62c4f83a00SCongcong Cai void S::method() {}
63c4f83a00SCongcong Cai 
64e3aafe40SCongcong Cai void func_header() {}
65e3aafe40SCongcong Cai extern void func_extern() {}
66e3aafe40SCongcong Cai static void func_static() {}
67c4f83a00SCongcong Cai namespace {
68e3aafe40SCongcong Cai void func_anonymous_ns() {}
69c4f83a00SCongcong Cai } // namespace
70c4f83a00SCongcong Cai 
71c4f83a00SCongcong Cai int main(int argc, const char*argv[]) {}
72c4f83a00SCongcong Cai 
73c4f83a00SCongcong Cai extern "C" {
74c4f83a00SCongcong Cai void func_extern_c_1() {}
75c4f83a00SCongcong Cai }
76c4f83a00SCongcong Cai 
77c4f83a00SCongcong Cai extern "C" void func_extern_c_2() {}
78e3aafe40SCongcong Cai 
79e3aafe40SCongcong Cai namespace gh117488 {
80e3aafe40SCongcong Cai void func_with_body();
81e3aafe40SCongcong Cai // CHECK-MESSAGES: :[[@LINE-1]]:6: warning: function 'func_with_body'
82e3aafe40SCongcong Cai // CHECK-FIXES: static void func_with_body();
83e3aafe40SCongcong Cai void func_with_body() {}
84e3aafe40SCongcong Cai 
85e3aafe40SCongcong Cai void func_without_body();
86e3aafe40SCongcong Cai void func_without_body();
87e3aafe40SCongcong Cai }
88*f89fa238SCongcong Cai 
89*f89fa238SCongcong Cai // gh117489 start
90*f89fa238SCongcong Cai namespace std {
91*f89fa238SCongcong Cai using size_t = decltype(sizeof(int));
92*f89fa238SCongcong Cai }
93*f89fa238SCongcong Cai void * operator new(std::size_t) { return nullptr; }
94*f89fa238SCongcong Cai void * operator new[](std::size_t) { return nullptr; }
95*f89fa238SCongcong Cai void operator delete(void*) noexcept {}
96*f89fa238SCongcong Cai void operator delete[](void*) noexcept {}
97*f89fa238SCongcong Cai // gh117489 end
98