warn-overloaded-virtual.cpp revision 74b47f9173ccd2c22686b8fbf9d69852d6f46ac6
12a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)// RUN: %clang_cc1 -fsyntax-only -Woverloaded-virtual -verify %s 22a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 32a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)struct B1 { 42a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) virtual void foo(int); // expected-note {{declared here}} 52a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) virtual void foo(); // expected-note {{declared here}} 62a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)}; 72a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 86e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)struct S1 : public B1 { 92a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) void foo(float); // expected-warning {{hides overloaded virtual functions}} 10c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)}; 11a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) 122a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)struct S2 : public B1 { 132a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) void foo(); // expected-note {{declared here}} 142a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)}; 152a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 162a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)struct B2 { 172a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) virtual void foo(void*); // expected-note {{declared here}} 182a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)}; 192a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 202a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)struct MS1 : public S2, public B2 { 212a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) virtual void foo(int); // expected-warning {{hides overloaded virtual functions}} 222a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)}; 232a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 242a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)struct B3 { 252a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) virtual void foo(int); 262a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) virtual void foo(); 272a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)}; 282a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 292a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)struct S3 : public B3 { 302a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) using B3::foo; 312a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) void foo(float); 322a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)}; 332a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 342a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)struct B4 { 352a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) virtual void foo(); 362a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)}; 372a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 382a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)struct S4 : public B4 { 39a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) void foo(float); 40a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) void foo(); 412a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)}; 422a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 432a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)namespace PR9182 { 44a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)struct Base { 452a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) virtual void foo(int); 462a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)}; 472a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 48a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)void Base::foo(int) { } 492a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 502a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)struct Derived : public Base { 512a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) virtual void foo(int); 522a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) void foo(int, int); 532a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)}; 54c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)} 55c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)