16769ccb6853871c085c8366ab5e993841ad56d00Rafael Espindola// RUN: %clang_cc1 -fsyntax-only -verify -Wunused -Wunused-member-function -Wno-c++11-extensions -std=c++98 %s 2623ef4bf31bc5ec14ed9b5645921a0a2e0d00ee4Richard Smith// RUN: %clang_cc1 -fsyntax-only -verify -Wunused -Wunused-member-function -std=c++11 %s 3bbc6454bb98d6a6ecbaafa715222c5db834307f2Argyrios Kyrtzidis 4bbc6454bb98d6a6ecbaafa715222c5db834307f2Argyrios Kyrtzidisstatic void f1(); // expected-warning{{unused}} 5bbc6454bb98d6a6ecbaafa715222c5db834307f2Argyrios Kyrtzidis 6bbc6454bb98d6a6ecbaafa715222c5db834307f2Argyrios Kyrtzidisnamespace { 7bbc6454bb98d6a6ecbaafa715222c5db834307f2Argyrios Kyrtzidis void f2(); // expected-warning{{unused}} 8bbc6454bb98d6a6ecbaafa715222c5db834307f2Argyrios Kyrtzidis 9bbc6454bb98d6a6ecbaafa715222c5db834307f2Argyrios Kyrtzidis void f3() { } // expected-warning{{unused}} 10bbc6454bb98d6a6ecbaafa715222c5db834307f2Argyrios Kyrtzidis 11bbc6454bb98d6a6ecbaafa715222c5db834307f2Argyrios Kyrtzidis struct S { 12bbc6454bb98d6a6ecbaafa715222c5db834307f2Argyrios Kyrtzidis void m1() { } // expected-warning{{unused}} 13bbc6454bb98d6a6ecbaafa715222c5db834307f2Argyrios Kyrtzidis void m2(); // expected-warning{{unused}} 14bbc6454bb98d6a6ecbaafa715222c5db834307f2Argyrios Kyrtzidis void m3(); 1506999f8ff61de3c63a52871bd7ac61e7ada9180bArgyrios Kyrtzidis S(const S&); 1606999f8ff61de3c63a52871bd7ac61e7ada9180bArgyrios Kyrtzidis void operator=(const S&); 17bbc6454bb98d6a6ecbaafa715222c5db834307f2Argyrios Kyrtzidis }; 18bbc6454bb98d6a6ecbaafa715222c5db834307f2Argyrios Kyrtzidis 19bbc6454bb98d6a6ecbaafa715222c5db834307f2Argyrios Kyrtzidis template <typename T> 20bbc6454bb98d6a6ecbaafa715222c5db834307f2Argyrios Kyrtzidis struct TS { 21bbc6454bb98d6a6ecbaafa715222c5db834307f2Argyrios Kyrtzidis void m(); 22bbc6454bb98d6a6ecbaafa715222c5db834307f2Argyrios Kyrtzidis }; 23bbc6454bb98d6a6ecbaafa715222c5db834307f2Argyrios Kyrtzidis template <> void TS<int>::m() { } // expected-warning{{unused}} 24bbc6454bb98d6a6ecbaafa715222c5db834307f2Argyrios Kyrtzidis 25bbc6454bb98d6a6ecbaafa715222c5db834307f2Argyrios Kyrtzidis template <typename T> 26bbc6454bb98d6a6ecbaafa715222c5db834307f2Argyrios Kyrtzidis void tf() { } 27bbc6454bb98d6a6ecbaafa715222c5db834307f2Argyrios Kyrtzidis template <> void tf<int>() { } // expected-warning{{unused}} 28bbc6454bb98d6a6ecbaafa715222c5db834307f2Argyrios Kyrtzidis 29bbc6454bb98d6a6ecbaafa715222c5db834307f2Argyrios Kyrtzidis struct VS { 30bbc6454bb98d6a6ecbaafa715222c5db834307f2Argyrios Kyrtzidis virtual void vm() { } 31bbc6454bb98d6a6ecbaafa715222c5db834307f2Argyrios Kyrtzidis }; 32bbc6454bb98d6a6ecbaafa715222c5db834307f2Argyrios Kyrtzidis 33bbc6454bb98d6a6ecbaafa715222c5db834307f2Argyrios Kyrtzidis struct SVS : public VS { 34bbc6454bb98d6a6ecbaafa715222c5db834307f2Argyrios Kyrtzidis void vm() { } 35bbc6454bb98d6a6ecbaafa715222c5db834307f2Argyrios Kyrtzidis }; 36bbc6454bb98d6a6ecbaafa715222c5db834307f2Argyrios Kyrtzidis} 37bbc6454bb98d6a6ecbaafa715222c5db834307f2Argyrios Kyrtzidis 38bbc6454bb98d6a6ecbaafa715222c5db834307f2Argyrios Kyrtzidisvoid S::m3() { } // expected-warning{{unused}} 39bbc6454bb98d6a6ecbaafa715222c5db834307f2Argyrios Kyrtzidis 40bbc6454bb98d6a6ecbaafa715222c5db834307f2Argyrios Kyrtzidisstatic inline void f4() { } 41bbc6454bb98d6a6ecbaafa715222c5db834307f2Argyrios Kyrtzidisconst unsigned int cx = 0; 42bbc6454bb98d6a6ecbaafa715222c5db834307f2Argyrios Kyrtzidis 43bbc6454bb98d6a6ecbaafa715222c5db834307f2Argyrios Kyrtzidisstatic int x1; // expected-warning{{unused}} 44bbc6454bb98d6a6ecbaafa715222c5db834307f2Argyrios Kyrtzidis 45bbc6454bb98d6a6ecbaafa715222c5db834307f2Argyrios Kyrtzidisnamespace { 46bbc6454bb98d6a6ecbaafa715222c5db834307f2Argyrios Kyrtzidis int x2; // expected-warning{{unused}} 47bbc6454bb98d6a6ecbaafa715222c5db834307f2Argyrios Kyrtzidis 48bbc6454bb98d6a6ecbaafa715222c5db834307f2Argyrios Kyrtzidis struct S2 { 49bbc6454bb98d6a6ecbaafa715222c5db834307f2Argyrios Kyrtzidis static int x; // expected-warning{{unused}} 50bbc6454bb98d6a6ecbaafa715222c5db834307f2Argyrios Kyrtzidis }; 51bbc6454bb98d6a6ecbaafa715222c5db834307f2Argyrios Kyrtzidis 52bbc6454bb98d6a6ecbaafa715222c5db834307f2Argyrios Kyrtzidis template <typename T> 53bbc6454bb98d6a6ecbaafa715222c5db834307f2Argyrios Kyrtzidis struct TS2 { 54bbc6454bb98d6a6ecbaafa715222c5db834307f2Argyrios Kyrtzidis static int x; 55bbc6454bb98d6a6ecbaafa715222c5db834307f2Argyrios Kyrtzidis }; 56bbc6454bb98d6a6ecbaafa715222c5db834307f2Argyrios Kyrtzidis template <> int TS2<int>::x; // expected-warning{{unused}} 57bbc6454bb98d6a6ecbaafa715222c5db834307f2Argyrios Kyrtzidis} 58ef9d09c4699a2a61d6f28b59b7583b2b28c0a531Chandler Carruth 59ef9d09c4699a2a61d6f28b59b7583b2b28c0a531Chandler Carruthnamespace PR8841 { 60ef9d09c4699a2a61d6f28b59b7583b2b28c0a531Chandler Carruth // Ensure that friends of class templates are considered to have a dependent 61ef9d09c4699a2a61d6f28b59b7583b2b28c0a531Chandler Carruth // context and not marked unused. 62ef9d09c4699a2a61d6f28b59b7583b2b28c0a531Chandler Carruth namespace { 63ef9d09c4699a2a61d6f28b59b7583b2b28c0a531Chandler Carruth template <typename T> struct X { 64ef9d09c4699a2a61d6f28b59b7583b2b28c0a531Chandler Carruth friend bool operator==(const X&, const X&) { return false; } 65ef9d09c4699a2a61d6f28b59b7583b2b28c0a531Chandler Carruth }; 66ef9d09c4699a2a61d6f28b59b7583b2b28c0a531Chandler Carruth } 67ef9d09c4699a2a61d6f28b59b7583b2b28c0a531Chandler Carruth template <typename T> void template_test(X<T> x) { 68ef9d09c4699a2a61d6f28b59b7583b2b28c0a531Chandler Carruth (void)(x == x); 69ef9d09c4699a2a61d6f28b59b7583b2b28c0a531Chandler Carruth } 70af8ca37a7fa45bff84831706c6d85f9e5b4e1d15John McCall void test() { 71af8ca37a7fa45bff84831706c6d85f9e5b4e1d15John McCall X<int> x; 72ef9d09c4699a2a61d6f28b59b7583b2b28c0a531Chandler Carruth template_test(x); 73ef9d09c4699a2a61d6f28b59b7583b2b28c0a531Chandler Carruth } 74ef9d09c4699a2a61d6f28b59b7583b2b28c0a531Chandler Carruth} 75af8ca37a7fa45bff84831706c6d85f9e5b4e1d15John McCall 76af8ca37a7fa45bff84831706c6d85f9e5b4e1d15John McCallnamespace test4 { 77af8ca37a7fa45bff84831706c6d85f9e5b4e1d15John McCall namespace { struct A {}; } 78af8ca37a7fa45bff84831706c6d85f9e5b4e1d15John McCall 79af8ca37a7fa45bff84831706c6d85f9e5b4e1d15John McCall void test(A a); // expected-warning {{unused function}} 80af8ca37a7fa45bff84831706c6d85f9e5b4e1d15John McCall extern "C" void test4(A a); 81af8ca37a7fa45bff84831706c6d85f9e5b4e1d15John McCall} 826b6b42aed07726178f61954ac6e51f47da00275cArgyrios Kyrtzidis 836b6b42aed07726178f61954ac6e51f47da00275cArgyrios Kyrtzidisnamespace rdar8733476 { 846b6b42aed07726178f61954ac6e51f47da00275cArgyrios Kyrtzidis static void foo() { } // expected-warning {{not needed and will not be emitted}} 856b6b42aed07726178f61954ac6e51f47da00275cArgyrios Kyrtzidis 866b6b42aed07726178f61954ac6e51f47da00275cArgyrios Kyrtzidis template <int> 876b6b42aed07726178f61954ac6e51f47da00275cArgyrios Kyrtzidis void bar() { 886b6b42aed07726178f61954ac6e51f47da00275cArgyrios Kyrtzidis foo(); 896b6b42aed07726178f61954ac6e51f47da00275cArgyrios Kyrtzidis } 906b6b42aed07726178f61954ac6e51f47da00275cArgyrios Kyrtzidis} 91623ef4bf31bc5ec14ed9b5645921a0a2e0d00ee4Richard Smith 92623ef4bf31bc5ec14ed9b5645921a0a2e0d00ee4Richard Smithnamespace test5 { 93623ef4bf31bc5ec14ed9b5645921a0a2e0d00ee4Richard Smith static int n = 0; 94623ef4bf31bc5ec14ed9b5645921a0a2e0d00ee4Richard Smith static int &r = n; 95623ef4bf31bc5ec14ed9b5645921a0a2e0d00ee4Richard Smith int f(int &); 96623ef4bf31bc5ec14ed9b5645921a0a2e0d00ee4Richard Smith int k = f(r); 97623ef4bf31bc5ec14ed9b5645921a0a2e0d00ee4Richard Smith 98c36e3596be351a557cc81c8db3ea75fa4bd54c7aRichard Smith // FIXME: We should produce warnings for both of these. 99c36e3596be351a557cc81c8db3ea75fa4bd54c7aRichard Smith static const int m = n; 100623ef4bf31bc5ec14ed9b5645921a0a2e0d00ee4Richard Smith int x = sizeof(m); 101c36e3596be351a557cc81c8db3ea75fa4bd54c7aRichard Smith static const double d = 0.0; 102623ef4bf31bc5ec14ed9b5645921a0a2e0d00ee4Richard Smith int y = sizeof(d); 103623ef4bf31bc5ec14ed9b5645921a0a2e0d00ee4Richard Smith} 10466cff7257698d5528632917d38f9a3037bb1506dDavid Blaikie 10566cff7257698d5528632917d38f9a3037bb1506dDavid Blaikienamespace unused_nested { 10666cff7257698d5528632917d38f9a3037bb1506dDavid Blaikie class outer { 10766cff7257698d5528632917d38f9a3037bb1506dDavid Blaikie void func1(); 10866cff7257698d5528632917d38f9a3037bb1506dDavid Blaikie struct { 10966cff7257698d5528632917d38f9a3037bb1506dDavid Blaikie void func2() { 11066cff7257698d5528632917d38f9a3037bb1506dDavid Blaikie } 11166cff7257698d5528632917d38f9a3037bb1506dDavid Blaikie } x; 11266cff7257698d5528632917d38f9a3037bb1506dDavid Blaikie }; 11366cff7257698d5528632917d38f9a3037bb1506dDavid Blaikie} 11466cff7257698d5528632917d38f9a3037bb1506dDavid Blaikie 11566cff7257698d5528632917d38f9a3037bb1506dDavid Blaikienamespace unused { 11666cff7257698d5528632917d38f9a3037bb1506dDavid Blaikie struct { 11766cff7257698d5528632917d38f9a3037bb1506dDavid Blaikie void func() { // expected-warning {{unused member function}} 11866cff7257698d5528632917d38f9a3037bb1506dDavid Blaikie } 11966cff7257698d5528632917d38f9a3037bb1506dDavid Blaikie } x; // expected-warning {{unused variable}} 12066cff7257698d5528632917d38f9a3037bb1506dDavid Blaikie} 12187b8127c2c65c8229e5b874c10a33f1ce13493adRafael Espindola 12287b8127c2c65c8229e5b874c10a33f1ce13493adRafael Espindolanamespace test6 { 12387b8127c2c65c8229e5b874c10a33f1ce13493adRafael Espindola typedef struct { 12487b8127c2c65c8229e5b874c10a33f1ce13493adRafael Espindola void bar(); 12587b8127c2c65c8229e5b874c10a33f1ce13493adRafael Espindola } A; 12687b8127c2c65c8229e5b874c10a33f1ce13493adRafael Espindola 12787b8127c2c65c8229e5b874c10a33f1ce13493adRafael Espindola typedef struct { 12887b8127c2c65c8229e5b874c10a33f1ce13493adRafael Espindola void bar(); // expected-warning {{unused member function 'bar'}} 12987b8127c2c65c8229e5b874c10a33f1ce13493adRafael Espindola } *B; 13087b8127c2c65c8229e5b874c10a33f1ce13493adRafael Espindola 13187b8127c2c65c8229e5b874c10a33f1ce13493adRafael Espindola struct C { 13287b8127c2c65c8229e5b874c10a33f1ce13493adRafael Espindola void bar(); 13387b8127c2c65c8229e5b874c10a33f1ce13493adRafael Espindola }; 13487b8127c2c65c8229e5b874c10a33f1ce13493adRafael Espindola} 1356769ccb6853871c085c8366ab5e993841ad56d00Rafael Espindola 1366769ccb6853871c085c8366ab5e993841ad56d00Rafael Espindolanamespace pr14776 { 1376769ccb6853871c085c8366ab5e993841ad56d00Rafael Espindola namespace { 1386769ccb6853871c085c8366ab5e993841ad56d00Rafael Espindola struct X {}; 1396769ccb6853871c085c8366ab5e993841ad56d00Rafael Espindola } 1406769ccb6853871c085c8366ab5e993841ad56d00Rafael Espindola X a = X(); // expected-warning {{unused variable 'a'}} 1416769ccb6853871c085c8366ab5e993841ad56d00Rafael Espindola auto b = X(); // expected-warning {{unused variable 'b'}} 1426769ccb6853871c085c8366ab5e993841ad56d00Rafael Espindola} 143