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)