warn-overloaded-virtual.cpp revision 799ef666685d6c97d64d1970a6f68bf7923360c2
1799ef666685d6c97d64d1970a6f68bf7923360c2Argyrios Kyrtzidis// RUN: %clang_cc1 -fsyntax-only -Woverloaded-virtual -verify %s
2799ef666685d6c97d64d1970a6f68bf7923360c2Argyrios Kyrtzidis
3799ef666685d6c97d64d1970a6f68bf7923360c2Argyrios Kyrtzidisstruct B1 {
4799ef666685d6c97d64d1970a6f68bf7923360c2Argyrios Kyrtzidis  virtual void foo(int); // expected-note {{declared here}}
5799ef666685d6c97d64d1970a6f68bf7923360c2Argyrios Kyrtzidis  virtual void foo(); // expected-note {{declared here}}
6799ef666685d6c97d64d1970a6f68bf7923360c2Argyrios Kyrtzidis};
7799ef666685d6c97d64d1970a6f68bf7923360c2Argyrios Kyrtzidis
8799ef666685d6c97d64d1970a6f68bf7923360c2Argyrios Kyrtzidisstruct S1 : public B1 {
9799ef666685d6c97d64d1970a6f68bf7923360c2Argyrios Kyrtzidis  void foo(float); // expected-warning {{hides overloaded virtual functions}}
10799ef666685d6c97d64d1970a6f68bf7923360c2Argyrios Kyrtzidis};
11799ef666685d6c97d64d1970a6f68bf7923360c2Argyrios Kyrtzidis
12799ef666685d6c97d64d1970a6f68bf7923360c2Argyrios Kyrtzidisstruct S2 : public B1 {
13799ef666685d6c97d64d1970a6f68bf7923360c2Argyrios Kyrtzidis  void foo(); // expected-note {{declared here}}
14799ef666685d6c97d64d1970a6f68bf7923360c2Argyrios Kyrtzidis};
15799ef666685d6c97d64d1970a6f68bf7923360c2Argyrios Kyrtzidis
16799ef666685d6c97d64d1970a6f68bf7923360c2Argyrios Kyrtzidisstruct B2 {
17799ef666685d6c97d64d1970a6f68bf7923360c2Argyrios Kyrtzidis  virtual void foo(void*); // expected-note {{declared here}}
18799ef666685d6c97d64d1970a6f68bf7923360c2Argyrios Kyrtzidis};
19799ef666685d6c97d64d1970a6f68bf7923360c2Argyrios Kyrtzidis
20799ef666685d6c97d64d1970a6f68bf7923360c2Argyrios Kyrtzidisstruct MS1 : public S2, public B2 {
21799ef666685d6c97d64d1970a6f68bf7923360c2Argyrios Kyrtzidis   virtual void foo(int); // expected-warning {{hides overloaded virtual functions}}
22799ef666685d6c97d64d1970a6f68bf7923360c2Argyrios Kyrtzidis};
23799ef666685d6c97d64d1970a6f68bf7923360c2Argyrios Kyrtzidis
24799ef666685d6c97d64d1970a6f68bf7923360c2Argyrios Kyrtzidisstruct B3 {
25799ef666685d6c97d64d1970a6f68bf7923360c2Argyrios Kyrtzidis  virtual void foo(int);
26799ef666685d6c97d64d1970a6f68bf7923360c2Argyrios Kyrtzidis  virtual void foo();
27799ef666685d6c97d64d1970a6f68bf7923360c2Argyrios Kyrtzidis};
28799ef666685d6c97d64d1970a6f68bf7923360c2Argyrios Kyrtzidis
29799ef666685d6c97d64d1970a6f68bf7923360c2Argyrios Kyrtzidisstruct S3 : public B3 {
30799ef666685d6c97d64d1970a6f68bf7923360c2Argyrios Kyrtzidis  using B3::foo;
31799ef666685d6c97d64d1970a6f68bf7923360c2Argyrios Kyrtzidis  void foo(float);
32799ef666685d6c97d64d1970a6f68bf7923360c2Argyrios Kyrtzidis};
33799ef666685d6c97d64d1970a6f68bf7923360c2Argyrios Kyrtzidis
34799ef666685d6c97d64d1970a6f68bf7923360c2Argyrios Kyrtzidisstruct B4 {
35799ef666685d6c97d64d1970a6f68bf7923360c2Argyrios Kyrtzidis  virtual void foo();
36799ef666685d6c97d64d1970a6f68bf7923360c2Argyrios Kyrtzidis};
37799ef666685d6c97d64d1970a6f68bf7923360c2Argyrios Kyrtzidis
38799ef666685d6c97d64d1970a6f68bf7923360c2Argyrios Kyrtzidisstruct S4 : public B4 {
39799ef666685d6c97d64d1970a6f68bf7923360c2Argyrios Kyrtzidis  void foo(float);
40799ef666685d6c97d64d1970a6f68bf7923360c2Argyrios Kyrtzidis  void foo();
41799ef666685d6c97d64d1970a6f68bf7923360c2Argyrios Kyrtzidis};
42