[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 llvm-svn: 359980
This commit is contained in:
parent
ee0571734f
commit
5125a02a03
|
@ -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());
|
||||
}
|
||||
|
|
|
@ -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] {
|
||||
}
|
||||
}
|
||||
|
||||
};
|
Loading…
Reference in New Issue