Author: rakete1111 Date: Sun May 5 05:35:12 2019 New Revision: 359980 URL: http://llvm.org/viewvc/llvm-project?rev=359980&view=rev Log: [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 Added: cfe/trunk/test/AST/ast-printer-lambda.cpp Modified: cfe/trunk/lib/AST/StmtPrinter.cpp Modified: cfe/trunk/lib/AST/StmtPrinter.cpp URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/lib/AST/StmtPrinter.cpp?rev=359980&r1=359979&r2=359980&view=diff ============================================================================== --- cfe/trunk/lib/AST/StmtPrinter.cpp (original) +++ cfe/trunk/lib/AST/StmtPrinter.cpp Sun May 5 05:35:12 2019 @@ -1895,6 +1895,9 @@ void StmtPrinter::VisitLambdaExpr(Lambda llvm_unreachable("VLA type in explicit captures."); } + if (C->isPackExpansion()) + OS << "..."; + if (Node->isInitCapture(C)) PrintExpr(C->getCapturedVar()->getInit()); } Added: cfe/trunk/test/AST/ast-printer-lambda.cpp URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/test/AST/ast-printer-lambda.cpp?rev=359980&view=auto ============================================================================== --- cfe/trunk/test/AST/ast-printer-lambda.cpp (added) +++ cfe/trunk/test/AST/ast-printer-lambda.cpp Sun May 5 05:35:12 2019 @@ -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 _______________________________________________ cfe-commits mailing list cfe-commits@lists.llvm.org https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits