[C++17] Reject shadowing of capture by parameter in lambda
authorNicolas Lesser <blitzrakete@gmail.com>
Thu, 25 Oct 2018 20:15:03 +0000 (20:15 +0000)
committerNicolas Lesser <blitzrakete@gmail.com>
Thu, 25 Oct 2018 20:15:03 +0000 (20:15 +0000)
commit3cde5e4a4c69bf21039a9d5fa65c929cdb9b993b
treebeee024adbfc22f4d839808eccfdac5c3519d707
parentf28e81f6aa3a815938100bc2efe1bf8887093ec8
[C++17] Reject shadowing of capture by parameter in lambda

Summary:
This change rejects the shadowing of a capture by a parameter in lambdas in C++17.

```
int main() {
  int a;
  auto f = [a](int a) { return a; };
}
```

results in:

```
main.cpp:3:20: error: a lambda parameter cannot shadow an explicitly captured entity
  auto f = [a](int a) { return a; };
                   ^
main.cpp:3:13: note: variable a is explicitly captured here
  auto f = [a](int a) { return a; };
            ^
```

Reviewers: rsmith

Reviewed By: rsmith

Subscribers: lebedev.ri, erik.pilkington, cfe-commits

Differential Revision: https://reviews.llvm.org/D53595

llvm-svn: 345308
clang/include/clang/Basic/DiagnosticSemaKinds.td
clang/include/clang/Sema/Sema.h
clang/lib/Sema/SemaLambda.cpp
clang/test/CXX/drs/dr22xx.cpp
clang/test/SemaCXX/warn-shadow-in-lambdas.cpp
clang/www/cxx_dr_status.html