diff options
author | Nicolas Lesser <blitzrakete@gmail.com> | 2019-05-05 12:35:12 +0000 |
---|---|---|
committer | Nicolas Lesser <blitzrakete@gmail.com> | 2019-05-05 12:35:12 +0000 |
commit | 0d07455a786444c22ac41e9a15f58ff2c994b1d3 (patch) | |
tree | b1d542a9420650605fa7a7aeda06606c4c85049b | |
parent | 3e0c2a51a0e7acafc37b86ce9838c6e1400054d5 (diff) |
[clang] fixing -ast-print for variadic parameter pack in lambda capture
Summary:
currently for:
```
template<typename ... T>
void f(T... t) {
auto l = [t...]{};
}
```
`clang -ast-print file.cpp`
outputs:
```
template <typename ...T> void f(T ...t) {
auto l = [t] {
}
;
}
```
notice that there is not `...` in the capture list of the lambda. this patch fixes this issue. and add test for it.
Patch by Tyker
Reviewers: rsmith
Reviewed By: rsmith
Subscribers: cfe-commits
Tags: #clang
Differential Revision: https://reviews.llvm.org/D61556
git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@359980 91177308-0d34-0410-b5e6-96231b3b80d8
-rw-r--r-- | lib/AST/StmtPrinter.cpp | 3 | ||||
-rw-r--r-- | test/AST/ast-printer-lambda.cpp | 36 |
2 files changed, 39 insertions, 0 deletions
diff --git a/lib/AST/StmtPrinter.cpp b/lib/AST/StmtPrinter.cpp index 7127022038..38eb344620 100644 --- a/lib/AST/StmtPrinter.cpp +++ b/lib/AST/StmtPrinter.cpp @@ -1895,6 +1895,9 @@ void StmtPrinter::VisitLambdaExpr(LambdaExpr *Node) { llvm_unreachable("VLA type in explicit captures."); } + if (C->isPackExpansion()) + OS << "..."; + if (Node->isInitCapture(C)) PrintExpr(C->getCapturedVar()->getInit()); } diff --git a/test/AST/ast-printer-lambda.cpp b/test/AST/ast-printer-lambda.cpp new file mode 100644 index 0000000000..27a361da5c --- /dev/null +++ b/test/AST/ast-printer-lambda.cpp @@ -0,0 +1,36 @@ +// RUN: %clang_cc1 -ast-print -std=c++17 %s | FileCheck %s + +struct S { +template<typename ... T> +void test1(int i, T... t) { +{ + auto lambda = [i]{}; + //CHECK: [i] { +} +{ + auto lambda = [=]{}; + //CHECK: [=] { +} +{ + auto lambda = [&]{}; + //CHECK: [&] { +} +{ + auto lambda = [t..., i]{}; + //CHECK: [t..., i] { +} +{ + auto lambda = [&t...]{}; + //CHECK: [&t...] { +} +{ + auto lambda = [this, &t...]{}; + //CHECK: [this, &t...] { +} +{ + auto lambda = [t..., this]{}; + //CHECK: [t..., this] { +} +} + +};
\ No newline at end of file |