xref: /llvm-project/clang/test/SemaCXX/warn-overloaded-virtual.cpp (revision 7dd856a76b4e7cd1040da69b88501e1b94bbbe5f)
1 // RUN: %clang_cc1 -fsyntax-only -Woverloaded-virtual -verify %s
2 
3 struct B1 {
4   virtual void foo(int); // expected-note {{declared here}}
5   virtual void foo(); // expected-note {{declared here}}
6 };
7 
8 struct S1 : public B1 {
9   void foo(float); // expected-warning {{hides overloaded virtual functions}}
10 };
11 
12 struct S2 : public B1 {
13   void foo(); // expected-note {{declared here}}
14 };
15 
16 struct B2 {
17   virtual void foo(void*); // expected-note {{declared here}}
18 };
19 
20 struct MS1 : public S2, public B2 {
21    virtual void foo(int); // expected-warning {{hides overloaded virtual functions}}
22 };
23 
24 struct B3 {
25   virtual void foo(int);
26   virtual void foo();
27 };
28 
29 struct S3 : public B3 {
30   using B3::foo;
31   void foo(float);
32 };
33 
34 struct B4 {
35   virtual void foo();
36 };
37 
38 struct S4 : public B4 {
39   void foo(float);
40   void foo();
41 };
42 
43 namespace PR9182 {
44 struct Base {
45   virtual void foo(int);
46 };
47 
48 void Base::foo(int) { }
49 
50 struct Derived : public Base {
51   virtual void foo(int);
52   void foo(int, int);
53 };
54 }
55