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