xref: /aosp_15_r20/external/clang/test/Sema/warn-unused-function.c (revision 67e74705e28f6214e480b399dd47ea732279e315)
1*67e74705SXin Li // RUN: %clang_cc1 -fsyntax-only -Wused-but-marked-unused -Wunused-function -Wunneeded-internal-declaration -verify %s
2*67e74705SXin Li // RUN: %clang_cc1 -fsyntax-only -verify -Wunused %s
3*67e74705SXin Li // RUN: %clang_cc1 -fsyntax-only -verify -Wall -Wno-infinite-recursion %s
4*67e74705SXin Li 
foo()5*67e74705SXin Li void foo() {}
f2()6*67e74705SXin Li static void f2() {}
f1()7*67e74705SXin Li static void f1() {f2();} // expected-warning{{unused}}
8*67e74705SXin Li 
f0()9*67e74705SXin Li static int f0() { return 17; } // expected-warning{{not needed and will not be emitted}}
10*67e74705SXin Li int x = sizeof(f0());
11*67e74705SXin Li 
12*67e74705SXin Li static void f3();
f3()13*67e74705SXin Li extern void f3() { } // expected-warning{{unused}}
14*67e74705SXin Li 
15*67e74705SXin Li inline static void f4();
f4()16*67e74705SXin Li void f4() { } // expected-warning{{unused}}
17*67e74705SXin Li 
f5()18*67e74705SXin Li static void __attribute__((used)) f5() {}
19*67e74705SXin Li static void f6();
20*67e74705SXin Li static void __attribute__((used)) f6();
f6()21*67e74705SXin Li static void f6() {};
22*67e74705SXin Li 
23*67e74705SXin Li static void f7(void);
24*67e74705SXin Li void f8(void(*a0)(void));
f9(void)25*67e74705SXin Li void f9(void) { f8(f7); }
f7(void)26*67e74705SXin Li static void f7(void) {}
27*67e74705SXin Li 
28*67e74705SXin Li __attribute__((unused)) static void bar(void);
bar(void)29*67e74705SXin Li void bar(void) { }
30*67e74705SXin Li 
31*67e74705SXin Li __attribute__((constructor)) static void bar2(void);
bar2(void)32*67e74705SXin Li void bar2(void) { }
33*67e74705SXin Li 
34*67e74705SXin Li __attribute__((destructor)) static void bar3(void);
bar3(void)35*67e74705SXin Li void bar3(void) { }
36*67e74705SXin Li 
37*67e74705SXin Li static void f10(void); // expected-warning{{unused}}
38*67e74705SXin Li static void f10(void);
39*67e74705SXin Li 
40*67e74705SXin Li static void f11(void);
f11(void)41*67e74705SXin Li static void f11(void) { }  // expected-warning{{unused}}
42*67e74705SXin Li 
f12(void)43*67e74705SXin Li static void f12(void) { }  // expected-warning{{unused}}
44*67e74705SXin Li static void f12(void);
45*67e74705SXin Li 
46*67e74705SXin Li // PR7923
unused(void)47*67e74705SXin Li static void unused(void) { unused(); }  // expected-warning{{not needed and will not be emitted}}
48*67e74705SXin Li 
49*67e74705SXin Li // rdar://8728293
cleanupMalloc(char * const * const allocation)50*67e74705SXin Li static void cleanupMalloc(char * const * const allocation) { }
f13(void)51*67e74705SXin Li void f13(void) {
52*67e74705SXin Li   char * const __attribute__((cleanup(cleanupMalloc))) a;
53*67e74705SXin Li   (void)a;
54*67e74705SXin Li }
55*67e74705SXin Li 
56*67e74705SXin Li // rdar://12233989
57*67e74705SXin Li extern void a(void) __attribute__((unused));
58*67e74705SXin Li extern void b(void) __attribute__((unused));
59*67e74705SXin Li 
b(void)60*67e74705SXin Li void b(void)
61*67e74705SXin Li {
62*67e74705SXin Li }
a(void)63*67e74705SXin Li void a(void)
64*67e74705SXin Li {
65*67e74705SXin Li   b();
66*67e74705SXin Li }
67