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}; 4274b47f9173ccd2c22686b8fbf9d69852d6f46ac6Argyrios Kyrtzidis 4374b47f9173ccd2c22686b8fbf9d69852d6f46ac6Argyrios Kyrtzidisnamespace PR9182 { 4474b47f9173ccd2c22686b8fbf9d69852d6f46ac6Argyrios Kyrtzidisstruct Base { 4574b47f9173ccd2c22686b8fbf9d69852d6f46ac6Argyrios Kyrtzidis virtual void foo(int); 4674b47f9173ccd2c22686b8fbf9d69852d6f46ac6Argyrios Kyrtzidis}; 4774b47f9173ccd2c22686b8fbf9d69852d6f46ac6Argyrios Kyrtzidis 4874b47f9173ccd2c22686b8fbf9d69852d6f46ac6Argyrios Kyrtzidisvoid Base::foo(int) { } 4974b47f9173ccd2c22686b8fbf9d69852d6f46ac6Argyrios Kyrtzidis 5074b47f9173ccd2c22686b8fbf9d69852d6f46ac6Argyrios Kyrtzidisstruct Derived : public Base { 5174b47f9173ccd2c22686b8fbf9d69852d6f46ac6Argyrios Kyrtzidis virtual void foo(int); 5274b47f9173ccd2c22686b8fbf9d69852d6f46ac6Argyrios Kyrtzidis void foo(int, int); 5374b47f9173ccd2c22686b8fbf9d69852d6f46ac6Argyrios Kyrtzidis}; 5474b47f9173ccd2c22686b8fbf9d69852d6f46ac6Argyrios Kyrtzidis} 550266aa37802a486e65f9259014bb60848fc4be23Argyrios Kyrtzidis 560266aa37802a486e65f9259014bb60848fc4be23Argyrios Kyrtzidisnamespace PR9396 { 570266aa37802a486e65f9259014bb60848fc4be23Argyrios Kyrtzidisclass A { 580266aa37802a486e65f9259014bb60848fc4be23Argyrios Kyrtzidispublic: 590266aa37802a486e65f9259014bb60848fc4be23Argyrios Kyrtzidis virtual void f(int) {} 600266aa37802a486e65f9259014bb60848fc4be23Argyrios Kyrtzidis}; 610266aa37802a486e65f9259014bb60848fc4be23Argyrios Kyrtzidis 620266aa37802a486e65f9259014bb60848fc4be23Argyrios Kyrtzidisclass B : public A { 630266aa37802a486e65f9259014bb60848fc4be23Argyrios Kyrtzidispublic: 640266aa37802a486e65f9259014bb60848fc4be23Argyrios Kyrtzidis static void f() {} 650266aa37802a486e65f9259014bb60848fc4be23Argyrios Kyrtzidis}; 660266aa37802a486e65f9259014bb60848fc4be23Argyrios Kyrtzidis} 6776398e5ad39ae719dcc650c7cddeb25379c02c34David Blaikie 6876398e5ad39ae719dcc650c7cddeb25379c02c34David Blaikienamespace ThreeLayer { 6976398e5ad39ae719dcc650c7cddeb25379c02c34David Blaikiestruct A { 7076398e5ad39ae719dcc650c7cddeb25379c02c34David Blaikie virtual void f(); 7176398e5ad39ae719dcc650c7cddeb25379c02c34David Blaikie}; 7276398e5ad39ae719dcc650c7cddeb25379c02c34David Blaikie 7376398e5ad39ae719dcc650c7cddeb25379c02c34David Blaikiestruct B: A { 7476398e5ad39ae719dcc650c7cddeb25379c02c34David Blaikie void f(); 7576398e5ad39ae719dcc650c7cddeb25379c02c34David Blaikie void f(int); 7676398e5ad39ae719dcc650c7cddeb25379c02c34David Blaikie}; 7776398e5ad39ae719dcc650c7cddeb25379c02c34David Blaikie 7876398e5ad39ae719dcc650c7cddeb25379c02c34David Blaikiestruct C: B { 7976398e5ad39ae719dcc650c7cddeb25379c02c34David Blaikie void f(int); 8076398e5ad39ae719dcc650c7cddeb25379c02c34David Blaikie using A::f; 8176398e5ad39ae719dcc650c7cddeb25379c02c34David Blaikie}; 8276398e5ad39ae719dcc650c7cddeb25379c02c34David Blaikie} 835f750680d421328225e597d6429a298027dc6360David Blaikie 845f750680d421328225e597d6429a298027dc6360David Blaikienamespace UnbalancedVirtual { 855f750680d421328225e597d6429a298027dc6360David Blaikiestruct Base { 865f750680d421328225e597d6429a298027dc6360David Blaikie virtual void func(); 875f750680d421328225e597d6429a298027dc6360David Blaikie}; 885f750680d421328225e597d6429a298027dc6360David Blaikie 895f750680d421328225e597d6429a298027dc6360David Blaikiestruct Derived1: virtual Base { 905f750680d421328225e597d6429a298027dc6360David Blaikie virtual void func(); 915f750680d421328225e597d6429a298027dc6360David Blaikie}; 925f750680d421328225e597d6429a298027dc6360David Blaikie 935f750680d421328225e597d6429a298027dc6360David Blaikiestruct Derived2: virtual Base { 945f750680d421328225e597d6429a298027dc6360David Blaikie}; 955f750680d421328225e597d6429a298027dc6360David Blaikie 965f750680d421328225e597d6429a298027dc6360David Blaikiestruct MostDerived: Derived1, Derived2 { 975f750680d421328225e597d6429a298027dc6360David Blaikie void func(int); 985f750680d421328225e597d6429a298027dc6360David Blaikie void func(); 995f750680d421328225e597d6429a298027dc6360David Blaikie}; 1005f750680d421328225e597d6429a298027dc6360David Blaikie} 1015f750680d421328225e597d6429a298027dc6360David Blaikie 1025f750680d421328225e597d6429a298027dc6360David Blaikienamespace UnbalancedVirtual2 { 1035f750680d421328225e597d6429a298027dc6360David Blaikiestruct Base { 1045f750680d421328225e597d6429a298027dc6360David Blaikie virtual void func(); 1055f750680d421328225e597d6429a298027dc6360David Blaikie}; 1065f750680d421328225e597d6429a298027dc6360David Blaikie 1075f750680d421328225e597d6429a298027dc6360David Blaikiestruct Derived1: virtual Base { 1085f750680d421328225e597d6429a298027dc6360David Blaikie virtual void func(); 1095f750680d421328225e597d6429a298027dc6360David Blaikie}; 1105f750680d421328225e597d6429a298027dc6360David Blaikie 1115f750680d421328225e597d6429a298027dc6360David Blaikiestruct Derived2: virtual Base { 1125f750680d421328225e597d6429a298027dc6360David Blaikie}; 1135f750680d421328225e597d6429a298027dc6360David Blaikie 1145f750680d421328225e597d6429a298027dc6360David Blaikiestruct Derived3: Derived1 { 1155f750680d421328225e597d6429a298027dc6360David Blaikie virtual void func(); 1165f750680d421328225e597d6429a298027dc6360David Blaikie}; 1175f750680d421328225e597d6429a298027dc6360David Blaikie 1185f750680d421328225e597d6429a298027dc6360David Blaikiestruct MostDerived: Derived3, Derived2 { 1195f750680d421328225e597d6429a298027dc6360David Blaikie void func(int); 1205f750680d421328225e597d6429a298027dc6360David Blaikie void func(); 1215f750680d421328225e597d6429a298027dc6360David Blaikie}; 1225f750680d421328225e597d6429a298027dc6360David Blaikie} 123f608aff66c5412ab583258f989417b4974ba507aRichard Trieu 124f608aff66c5412ab583258f989417b4974ba507aRichard Trieunamespace { 125f608aff66c5412ab583258f989417b4974ba507aRichard Trieu class A { 126f608aff66c5412ab583258f989417b4974ba507aRichard Trieu virtual int foo(bool) const; 127f608aff66c5412ab583258f989417b4974ba507aRichard Trieu // expected-note@-1{{type mismatch at 1st parameter ('bool' vs 'int')}} 128f608aff66c5412ab583258f989417b4974ba507aRichard Trieu virtual int foo(int, int) const; 129f608aff66c5412ab583258f989417b4974ba507aRichard Trieu // expected-note@-1{{different number of parameters (2 vs 1)}} 130f608aff66c5412ab583258f989417b4974ba507aRichard Trieu virtual int foo(int*) const; 131f608aff66c5412ab583258f989417b4974ba507aRichard Trieu // expected-note@-1{{type mismatch at 1st parameter ('int *' vs 'int')}} 132f608aff66c5412ab583258f989417b4974ba507aRichard Trieu virtual int foo(int) volatile; 133f608aff66c5412ab583258f989417b4974ba507aRichard Trieu // expected-note@-1{{different qualifiers (volatile vs const)}} 134f608aff66c5412ab583258f989417b4974ba507aRichard Trieu }; 135f608aff66c5412ab583258f989417b4974ba507aRichard Trieu 136f608aff66c5412ab583258f989417b4974ba507aRichard Trieu class B : public A { 137f608aff66c5412ab583258f989417b4974ba507aRichard Trieu virtual int foo(int) const; 138f608aff66c5412ab583258f989417b4974ba507aRichard Trieu // expected-warning@-1{{hides overloaded virtual functions}} 139f608aff66c5412ab583258f989417b4974ba507aRichard Trieu }; 140f608aff66c5412ab583258f989417b4974ba507aRichard Trieu} 141