warn-overloaded-virtual.cpp revision 76398e5ad39ae719dcc650c7cddeb25379c02c34
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
68namespace ThreeLayer {
69struct A {
70  virtual void f();
71};
72
73struct B: A {
74  void f();
75  void f(int);
76};
77
78struct C: B {
79  void f(int);
80  using A::f;
81};
82}
83