xref: /aosp_15_r20/external/clang/test/FixIt/typo-location-bugs.cpp (revision 67e74705e28f6214e480b399dd47ea732279e315)
1*67e74705SXin Li // RUN: %clang_cc1 -fsyntax-only -verify %s
2*67e74705SXin Li // RUN: cp %s %t
3*67e74705SXin Li // RUN: not %clang_cc1 -fsyntax-only -fixit -x c++ %t
4*67e74705SXin Li // RUN: %clang_cc1 -fsyntax-only -pedantic -Werror -x c++ %t
5*67e74705SXin Li 
6*67e74705SXin Li namespace dcl_fct_default_p10 {
7*67e74705SXin Li struct A {
8*67e74705SXin Li   virtual void f(int a = 7); // expected-note{{'A::f' declared here}}
9*67e74705SXin Li };
10*67e74705SXin Li 
11*67e74705SXin Li struct B : public A {
12*67e74705SXin Li   void f(int a);
13*67e74705SXin Li };
14*67e74705SXin Li 
m()15*67e74705SXin Li void m() {
16*67e74705SXin Li   B* pb = new B;
17*67e74705SXin Li   A* pa = pb;
18*67e74705SXin Li   pa->f(); // OK, calls pa->B::f(7)
19*67e74705SXin Li   pb->f(); // expected-error{{too few arguments to function call, expected 1, have 0; did you mean 'A::f'?}}
20*67e74705SXin Li }
21*67e74705SXin Li }
22*67e74705SXin Li 
23*67e74705SXin Li namespace PR18608 {
24*67e74705SXin Li struct A {
25*67e74705SXin Li virtual void f() const;
26*67e74705SXin Li virtual void f(int x) const;  // expected-note{{'A::f' declared here}}
27*67e74705SXin Li };
28*67e74705SXin Li 
29*67e74705SXin Li struct B : public A {
30*67e74705SXin Li virtual void f() const;
31*67e74705SXin Li };
32*67e74705SXin Li 
test(B b)33*67e74705SXin Li void test(B b) {
34*67e74705SXin Li   b.f(1);  // expected-error{{too many arguments to function call, expected 0, have 1; did you mean 'A::f'?}}
35*67e74705SXin Li }
36*67e74705SXin Li }
37*67e74705SXin Li 
38*67e74705SXin Li namespace PR20626 {
39*67e74705SXin Li class A {
40*67e74705SXin Li public:
Foo()41*67e74705SXin Li   void Foo(){};  // expected-note{{'Foo' declared here}}
42*67e74705SXin Li };
43*67e74705SXin Li class B {};
44*67e74705SXin Li class C : public A, public B {
Run()45*67e74705SXin Li   void Run() {
46*67e74705SXin Li     B::Foo();  // expected-error{{no member named 'Foo' in 'PR20626::B'; did you mean simply 'Foo'?}}
47*67e74705SXin Li   }
48*67e74705SXin Li };
49*67e74705SXin Li }
50