xref: /petsc/src/sys/tests/linter/testStaticFunctionCandidates.cxx (revision 9c5460f9064ca60dd71a234a1f6faf93e7a6b0c9)
1*08bd1863SJacob Faibussowitsch #include "testheader.h"
2*08bd1863SJacob Faibussowitsch 
3*08bd1863SJacob Faibussowitsch void BareFunctionShouldGetStatic(void) { }
4*08bd1863SJacob Faibussowitsch 
5*08bd1863SJacob Faibussowitsch extern void ExternFunctionShouldNotGetStatic(void) { }
6*08bd1863SJacob Faibussowitsch 
7*08bd1863SJacob Faibussowitsch static void StaticFunctionShouldNotGetStatic(void) { }
8*08bd1863SJacob Faibussowitsch 
9*08bd1863SJacob Faibussowitsch // this should not get static
10*08bd1863SJacob Faibussowitsch static void StaticFunctionPreDeclShouldNotGetStatic(void);
11*08bd1863SJacob Faibussowitsch 
12*08bd1863SJacob Faibussowitsch // this should get static!
13*08bd1863SJacob Faibussowitsch void StaticFunctionPreDeclShouldNotGetStatic(void) { }
14*08bd1863SJacob Faibussowitsch 
15*08bd1863SJacob Faibussowitsch extern void ExternFunctionPreDeclShouldNotGetStatic(void);
16*08bd1863SJacob Faibussowitsch 
17*08bd1863SJacob Faibussowitsch void ExternFunctionPreDeclShouldNotGetStatic(void) { }
18*08bd1863SJacob Faibussowitsch 
19*08bd1863SJacob Faibussowitsch void BareFunctionPreDeclShouldGetStatic(void);
20*08bd1863SJacob Faibussowitsch 
21*08bd1863SJacob Faibussowitsch void BareFunctionPreDeclShouldGetStatic(void) { }
22*08bd1863SJacob Faibussowitsch 
23*08bd1863SJacob Faibussowitsch // declaration in testheader has "extern"
24*08bd1863SJacob Faibussowitsch void ExternHeaderFunctionShouldNotGetStatic(void) { }
25*08bd1863SJacob Faibussowitsch 
26*08bd1863SJacob Faibussowitsch class Foo {
27*08bd1863SJacob Faibussowitsch public:
28*08bd1863SJacob Faibussowitsch   friend void swap();
29*08bd1863SJacob Faibussowitsch };
30*08bd1863SJacob Faibussowitsch 
31*08bd1863SJacob Faibussowitsch void swap() { }
32*08bd1863SJacob Faibussowitsch 
33*08bd1863SJacob Faibussowitsch // clang-format off
34*08bd1863SJacob Faibussowitsch void                                  ExternHeaderBadFormattingShouldNotGetStatic              ( void)
35*08bd1863SJacob Faibussowitsch {
36*08bd1863SJacob Faibussowitsch 
37*08bd1863SJacob Faibussowitsch }
38*08bd1863SJacob Faibussowitsch // clang-format on
39*08bd1863SJacob Faibussowitsch 
40*08bd1863SJacob Faibussowitsch static char *StaticPointerShouldNotGetStatic()
41*08bd1863SJacob Faibussowitsch {
42*08bd1863SJacob Faibussowitsch   return nullptr;
43*08bd1863SJacob Faibussowitsch }
44*08bd1863SJacob Faibussowitsch 
45*08bd1863SJacob Faibussowitsch char *BarePointerShouldGetStatic()
46*08bd1863SJacob Faibussowitsch {
47*08bd1863SJacob Faibussowitsch   return nullptr;
48*08bd1863SJacob Faibussowitsch }
49*08bd1863SJacob Faibussowitsch 
50*08bd1863SJacob Faibussowitsch extern char *ExternPointerShouldGetStatic()
51*08bd1863SJacob Faibussowitsch {
52*08bd1863SJacob Faibussowitsch   return nullptr;
53*08bd1863SJacob Faibussowitsch }
54*08bd1863SJacob Faibussowitsch 
55*08bd1863SJacob Faibussowitsch PETSC_EXTERN char *PetscExternPointerShouldNotGetStatic()
56*08bd1863SJacob Faibussowitsch {
57*08bd1863SJacob Faibussowitsch   return nullptr;
58*08bd1863SJacob Faibussowitsch }
59*08bd1863SJacob Faibussowitsch 
60*08bd1863SJacob Faibussowitsch PETSC_INTERN char *PetscInternPointerShouldNotGetStatic()
61*08bd1863SJacob Faibussowitsch {
62*08bd1863SJacob Faibussowitsch   return nullptr;
63*08bd1863SJacob Faibussowitsch }
64*08bd1863SJacob Faibussowitsch 
65*08bd1863SJacob Faibussowitsch // clang-format off
66*08bd1863SJacob Faibussowitsch PETSC_EXTERN char *                   PetscExternPointerBadFormattingShouldNotGetStatic   (   )
67*08bd1863SJacob Faibussowitsch {
68*08bd1863SJacob Faibussowitsch   return nullptr;
69*08bd1863SJacob Faibussowitsch }
70*08bd1863SJacob Faibussowitsch 
71*08bd1863SJacob Faibussowitsch PETSC_INTERN char *               PetscInternBadFormattingPointerShouldNotGetStatic ()
72*08bd1863SJacob Faibussowitsch {
73*08bd1863SJacob Faibussowitsch   return nullptr;
74*08bd1863SJacob Faibussowitsch }
75*08bd1863SJacob Faibussowitsch // clang-format on
76*08bd1863SJacob Faibussowitsch 
77*08bd1863SJacob Faibussowitsch char *PetscExternHeaderPointerShouldNotGetStatic()
78*08bd1863SJacob Faibussowitsch {
79*08bd1863SJacob Faibussowitsch   return nullptr;
80*08bd1863SJacob Faibussowitsch }
81*08bd1863SJacob Faibussowitsch 
82*08bd1863SJacob Faibussowitsch char *PetscInternHeaderPointerShouldNotGetStatic()
83*08bd1863SJacob Faibussowitsch {
84*08bd1863SJacob Faibussowitsch   return nullptr;
85*08bd1863SJacob Faibussowitsch }
86*08bd1863SJacob Faibussowitsch 
87*08bd1863SJacob Faibussowitsch char *PetscExternHeaderPointerBadFormattingShouldNotGetStatic()
88*08bd1863SJacob Faibussowitsch {
89*08bd1863SJacob Faibussowitsch   return nullptr;
90*08bd1863SJacob Faibussowitsch }
91*08bd1863SJacob Faibussowitsch 
92*08bd1863SJacob Faibussowitsch char *PetscInternHeaderPointerBadFormattingShouldNotGetStatic()
93*08bd1863SJacob Faibussowitsch {
94*08bd1863SJacob Faibussowitsch   return nullptr;
95*08bd1863SJacob Faibussowitsch }
96*08bd1863SJacob Faibussowitsch 
97*08bd1863SJacob Faibussowitsch // ironically enough, this will get static
98*08bd1863SJacob Faibussowitsch void silence_warnings(void)
99*08bd1863SJacob Faibussowitsch {
100*08bd1863SJacob Faibussowitsch   (void)StaticFunctionShouldNotGetStatic;
101*08bd1863SJacob Faibussowitsch   (void)StaticFunctionPreDeclShouldNotGetStatic;
102*08bd1863SJacob Faibussowitsch   (void)StaticPointerShouldNotGetStatic;
103*08bd1863SJacob Faibussowitsch }
104