From: Paolo Carlini Date: Mon, 2 Oct 2017 12:40:26 +0000 (+0000) Subject: re PR c++/79180 (Nested lambda-capture causes segfault for parameter pack) X-Git-Url: https://git.libre-soc.org/?a=commitdiff_plain;h=bac1187dadc70649c507da4a60ab8215fe534be7;p=gcc.git re PR c++/79180 (Nested lambda-capture causes segfault for parameter pack) 2017-10-02 Paolo Carlini PR c++/79180 * g++.dg/cpp0x/lambda/lambda-nested8.C: New. * g++.dg/torture/pr79180.C: Likewise. PR c++/71386 * g++.dg/cpp1y/lambda-generic-nested1.C: New. From-SVN: r253350 --- diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog index 0214693486f..405a4b0c39d 100644 --- a/gcc/testsuite/ChangeLog +++ b/gcc/testsuite/ChangeLog @@ -1,3 +1,12 @@ +2017-10-02 Paolo Carlini + + PR c++/79180 + * g++.dg/cpp0x/lambda/lambda-nested8.C: New. + * g++.dg/torture/pr79180.C: Likewise. + + PR c++/71386 + * g++.dg/cpp1y/lambda-generic-nested1.C: New. + 2017-10-02 Richard Biener * gcc.dg/graphite/graphite.exp: Add -fdump-tree-graphite-details. diff --git a/gcc/testsuite/g++.dg/cpp0x/lambda/lambda-nested8.C b/gcc/testsuite/g++.dg/cpp0x/lambda/lambda-nested8.C new file mode 100644 index 00000000000..5a6f47c1089 --- /dev/null +++ b/gcc/testsuite/g++.dg/cpp0x/lambda/lambda-nested8.C @@ -0,0 +1,23 @@ +// PR c++/79180 +// { dg-do run { target c++11 } } + +void +foo (int a) +{ + if (a != 127) + __builtin_abort (); +} + +template +void +bar (Args &&... args) +{ + [&]() { [&]() { foo (args...); } (); } (); +} + +int +main () +{ + int x = 127; + bar (x); +} diff --git a/gcc/testsuite/g++.dg/cpp1y/lambda-generic-nested1.C b/gcc/testsuite/g++.dg/cpp1y/lambda-generic-nested1.C new file mode 100644 index 00000000000..4cfd353fa77 --- /dev/null +++ b/gcc/testsuite/g++.dg/cpp1y/lambda-generic-nested1.C @@ -0,0 +1,34 @@ +// PR c++/71386 +// { dg-do run { target c++14 } } + +template +auto List(XS...xs) +{ + return [=](auto processList){return processList(xs...);}; +} + +auto l1 = List(42); + +int test (int a) +{ + if (a != 42) + __builtin_abort (); + return 0; +} + +auto foo = [](auto... xs1) + { + return [=]() + { + return l1([=](auto) + { + return test (xs1...); + }); + }; + }; + +int main() +{ + auto concat = l1(foo); + concat(); +} diff --git a/gcc/testsuite/g++.dg/torture/pr79180.C b/gcc/testsuite/g++.dg/torture/pr79180.C new file mode 100644 index 00000000000..2e3992ccd08 --- /dev/null +++ b/gcc/testsuite/g++.dg/torture/pr79180.C @@ -0,0 +1,23 @@ +// { dg-do run } +// { dg-options "-Wall -std=c++11" } + +void +foo (int a) +{ + if (a != 127) + __builtin_abort (); +} + +template +void +bar (Args &&... args) +{ + [&]() { [&]() { foo (args...); } (); } (); +} + +int +main () +{ + int x = 127; + bar (x); +}