warn-overloaded-virtual.cpp revision 0266aa37802a486e65f9259014bb60848fc4be23
1// RUN: %clang_cc1 -fsyntax-only -Woverloaded-virtual -verify %s
2
3struct B1 {
4  virtual void foo(int); // expected-note {{declared here}}
5  virtual void foo(); // expected-note {{declared here}}
6};
7
8struct S1 : public B1 {
9  void foo(float); // expected-warning {{hides overloaded virtual functions}}
10};
11
12struct S2 : public B1 {
13  void foo(); // expected-note {{declared here}}
14};
15
16struct B2 {
17  virtual void foo(void*); // expected-note {{declared here}}
18};
19
20struct MS1 : public S2, public B2 {
21   virtual void foo(int); // expected-warning {{hides overloaded virtual functions}}
22};
23
24struct B3 {
25  virtual void foo(int);
26  virtual void foo();
27};
28
29struct S3 : public B3 {
30  using B3::foo;
31  void foo(float);
32};
33
34struct B4 {
35  virtual void foo();
36};
37
38struct S4 : public B4 {
39  void foo(float);
40  void foo();
41};
42
43namespace PR9182 {
44struct Base {
45  virtual void foo(int);
46};
47
48void Base::foo(int) { }
49
50struct Derived : public Base {
51  virtual void foo(int);
52  void foo(int, int);
53};
54}
55
56namespace PR9396 {
57class A {
58public:
59  virtual void f(int) {}
60};
61
62class B : public A {
63public:
64  static void f() {}
65};
66}
67