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 Livoid foo() {} f2()6*67e74705SXin Listatic void f2() {} f1()7*67e74705SXin Listatic void f1() {f2();} // expected-warning{{unused}} 8*67e74705SXin Li f0()9*67e74705SXin Listatic 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 Liextern void f3() { } // expected-warning{{unused}} 14*67e74705SXin Li 15*67e74705SXin Li inline static void f4(); f4()16*67e74705SXin Livoid f4() { } // expected-warning{{unused}} 17*67e74705SXin Li f5()18*67e74705SXin Listatic void __attribute__((used)) f5() {} 19*67e74705SXin Li static void f6(); 20*67e74705SXin Li static void __attribute__((used)) f6(); f6()21*67e74705SXin Listatic void f6() {}; 22*67e74705SXin Li 23*67e74705SXin Li static void f7(void); 24*67e74705SXin Li void f8(void(*a0)(void)); f9(void)25*67e74705SXin Livoid f9(void) { f8(f7); } f7(void)26*67e74705SXin Listatic void f7(void) {} 27*67e74705SXin Li 28*67e74705SXin Li __attribute__((unused)) static void bar(void); bar(void)29*67e74705SXin Livoid bar(void) { } 30*67e74705SXin Li 31*67e74705SXin Li __attribute__((constructor)) static void bar2(void); bar2(void)32*67e74705SXin Livoid bar2(void) { } 33*67e74705SXin Li 34*67e74705SXin Li __attribute__((destructor)) static void bar3(void); bar3(void)35*67e74705SXin Livoid 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 Listatic void f11(void) { } // expected-warning{{unused}} 42*67e74705SXin Li f12(void)43*67e74705SXin Listatic void f12(void) { } // expected-warning{{unused}} 44*67e74705SXin Li static void f12(void); 45*67e74705SXin Li 46*67e74705SXin Li // PR7923 unused(void)47*67e74705SXin Listatic 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 Listatic void cleanupMalloc(char * const * const allocation) { } f13(void)51*67e74705SXin Livoid 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 Livoid b(void) 61*67e74705SXin Li { 62*67e74705SXin Li } a(void)63*67e74705SXin Livoid a(void) 64*67e74705SXin Li { 65*67e74705SXin Li b(); 66*67e74705SXin Li } 67