12d40d9e3bd6638399260332d8c7a98ac715f7b0dFariborz Jahanian// RUN: %clang_cc1 -fsyntax-only -Wused-but-marked-unused -Wunused-function -Wunneeded-internal-declaration -verify %s 2e1fcf29951432de60e9fba243d500d069e929900Ted Kremenek// RUN: %clang_cc1 -fsyntax-only -verify -Wunused %s 387d948ecccffea9e9e37d0d053b246e2d6d6c47bPirama Arumuga Nainar// RUN: %clang_cc1 -fsyntax-only -verify -Wall -Wno-infinite-recursion %s 4e6bbc01d1c4ec5241df36042e0a4a12a6711934bTanya Lattner 5e6bbc01d1c4ec5241df36042e0a4a12a6711934bTanya Lattnervoid foo() {} 6e6bbc01d1c4ec5241df36042e0a4a12a6711934bTanya Lattnerstatic void f2() {} 7e6bbc01d1c4ec5241df36042e0a4a12a6711934bTanya Lattnerstatic void f1() {f2();} // expected-warning{{unused}} 8e6bbc01d1c4ec5241df36042e0a4a12a6711934bTanya Lattner 96b6b42aed07726178f61954ac6e51f47da00275cArgyrios Kyrtzidisstatic int f0() { return 17; } // expected-warning{{not needed and will not be emitted}} 10e6bbc01d1c4ec5241df36042e0a4a12a6711934bTanya Lattnerint x = sizeof(f0()); 11e6bbc01d1c4ec5241df36042e0a4a12a6711934bTanya Lattner 12e6bbc01d1c4ec5241df36042e0a4a12a6711934bTanya Lattnerstatic void f3(); 13e6bbc01d1c4ec5241df36042e0a4a12a6711934bTanya Lattnerextern void f3() { } // expected-warning{{unused}} 14e6bbc01d1c4ec5241df36042e0a4a12a6711934bTanya Lattner 15251b18d74231763a1d3f52236aeee9cc5c98f397Bill Wendlinginline static void f4(); 16251b18d74231763a1d3f52236aeee9cc5c98f397Bill Wendlingvoid f4() { } // expected-warning{{unused}} 1712ead498c4bc279472b21d446bfccec0f654779eTanya Lattner 1812ead498c4bc279472b21d446bfccec0f654779eTanya Lattnerstatic void __attribute__((used)) f5() {} 1912ead498c4bc279472b21d446bfccec0f654779eTanya Lattnerstatic void f6(); 2012ead498c4bc279472b21d446bfccec0f654779eTanya Lattnerstatic void __attribute__((used)) f6(); 2112ead498c4bc279472b21d446bfccec0f654779eTanya Lattnerstatic void f6() {}; 2212ead498c4bc279472b21d446bfccec0f654779eTanya Lattner 2312ead498c4bc279472b21d446bfccec0f654779eTanya Lattnerstatic void f7(void); 2412ead498c4bc279472b21d446bfccec0f654779eTanya Lattnervoid f8(void(*a0)(void)); 2512ead498c4bc279472b21d446bfccec0f654779eTanya Lattnervoid f9(void) { f8(f7); } 2612ead498c4bc279472b21d446bfccec0f654779eTanya Lattnerstatic void f7(void) {} 27c777221d22e2687938c061de6698ddcccbe00fdcTanya Lattner 28c777221d22e2687938c061de6698ddcccbe00fdcTanya Lattner__attribute__((unused)) static void bar(void); 29c777221d22e2687938c061de6698ddcccbe00fdcTanya Lattnervoid bar(void) { } 30c777221d22e2687938c061de6698ddcccbe00fdcTanya Lattner 311a4221cbe1912421ed7e29d0bbac39e9792af8a2Chris Lattner__attribute__((constructor)) static void bar2(void); 321a4221cbe1912421ed7e29d0bbac39e9792af8a2Chris Lattnervoid bar2(void) { } 331a4221cbe1912421ed7e29d0bbac39e9792af8a2Chris Lattner 341a4221cbe1912421ed7e29d0bbac39e9792af8a2Chris Lattner__attribute__((destructor)) static void bar3(void); 351a4221cbe1912421ed7e29d0bbac39e9792af8a2Chris Lattnervoid bar3(void) { } 36bbc6454bb98d6a6ecbaafa715222c5db834307f2Argyrios Kyrtzidis 37bbc6454bb98d6a6ecbaafa715222c5db834307f2Argyrios Kyrtzidisstatic void f10(void); // expected-warning{{unused}} 38bbc6454bb98d6a6ecbaafa715222c5db834307f2Argyrios Kyrtzidisstatic void f10(void); 39bbc6454bb98d6a6ecbaafa715222c5db834307f2Argyrios Kyrtzidis 40bbc6454bb98d6a6ecbaafa715222c5db834307f2Argyrios Kyrtzidisstatic void f11(void); 41bbc6454bb98d6a6ecbaafa715222c5db834307f2Argyrios Kyrtzidisstatic void f11(void) { } // expected-warning{{unused}} 42bbc6454bb98d6a6ecbaafa715222c5db834307f2Argyrios Kyrtzidis 43bbc6454bb98d6a6ecbaafa715222c5db834307f2Argyrios Kyrtzidisstatic void f12(void) { } // expected-warning{{unused}} 44bbc6454bb98d6a6ecbaafa715222c5db834307f2Argyrios Kyrtzidisstatic void f12(void); 4558b5259e959f42823cc93f66da1499723eae366cArgyrios Kyrtzidis 4658b5259e959f42823cc93f66da1499723eae366cArgyrios Kyrtzidis// PR7923 476b6b42aed07726178f61954ac6e51f47da00275cArgyrios Kyrtzidisstatic void unused(void) { unused(); } // expected-warning{{not needed and will not be emitted}} 48ae3038c5e8bfce47337e83aeb253256633fbb701Argyrios Kyrtzidis 49ae3038c5e8bfce47337e83aeb253256633fbb701Argyrios Kyrtzidis// rdar://8728293 50ae3038c5e8bfce47337e83aeb253256633fbb701Argyrios Kyrtzidisstatic void cleanupMalloc(char * const * const allocation) { } 51ae3038c5e8bfce47337e83aeb253256633fbb701Argyrios Kyrtzidisvoid f13(void) { 52ae3038c5e8bfce47337e83aeb253256633fbb701Argyrios Kyrtzidis char * const __attribute__((cleanup(cleanupMalloc))) a; 53ae3038c5e8bfce47337e83aeb253256633fbb701Argyrios Kyrtzidis (void)a; 54ae3038c5e8bfce47337e83aeb253256633fbb701Argyrios Kyrtzidis} 552d40d9e3bd6638399260332d8c7a98ac715f7b0dFariborz Jahanian 562d40d9e3bd6638399260332d8c7a98ac715f7b0dFariborz Jahanian// rdar://12233989 572d40d9e3bd6638399260332d8c7a98ac715f7b0dFariborz Jahanianextern void a(void) __attribute__((unused)); 582d40d9e3bd6638399260332d8c7a98ac715f7b0dFariborz Jahanianextern void b(void) __attribute__((unused)); 592d40d9e3bd6638399260332d8c7a98ac715f7b0dFariborz Jahanian 602d40d9e3bd6638399260332d8c7a98ac715f7b0dFariborz Jahanianvoid b(void) 612d40d9e3bd6638399260332d8c7a98ac715f7b0dFariborz Jahanian{ 622d40d9e3bd6638399260332d8c7a98ac715f7b0dFariborz Jahanian} 632d40d9e3bd6638399260332d8c7a98ac715f7b0dFariborz Jahanianvoid a(void) 642d40d9e3bd6638399260332d8c7a98ac715f7b0dFariborz Jahanian{ 652d40d9e3bd6638399260332d8c7a98ac715f7b0dFariborz Jahanian b(); 662d40d9e3bd6638399260332d8c7a98ac715f7b0dFariborz Jahanian} 67