| // RUN: %clang_cc1 -verify -fsyntax-only -std=c++2b -Wshadow-all %s |
| |
| namespace GH95707 { |
| struct Foo { |
| int a; // expected-note 2 {{previous declaration is here}} |
| |
| void f1(this auto &self, int a) { self.a = a; } |
| void f2(int a) { } // expected-warning {{declaration shadows a field of 'GH95707::Foo'}} |
| void f3() { |
| (void)[&](this auto &self, int a) { }; // expected-warning {{declaration shadows a field of 'GH95707::Foo'}} |
| } |
| }; |
| } // namespace GH95707 |
| |
| namespace GH163731 { |
| struct S1 { |
| int a; |
| void m(this S1 &self) { |
| auto lambda = [](int a) { return a; }; |
| } |
| }; |
| |
| struct S2 { |
| int a; |
| void m(this S2 &self) { |
| int a = 1; // expected-note {{previous declaration is here}} |
| auto lambda = [](int a) { // expected-warning {{declaration shadows a local variable}} |
| return a; |
| }; |
| } |
| }; |
| |
| struct S3 { |
| int a; |
| void m(this S3 &self) { |
| auto lambda = [self](int a) { return a + self.a; }; |
| } |
| }; |
| } |