From: Jason Merrill Date: Tue, 9 Feb 2010 22:06:23 +0000 (-0500) Subject: re PR c++/42399 ([c++0x] assigning lambda causes segfault from null dereference at... X-Git-Url: https://git.libre-soc.org/?a=commitdiff_plain;h=0bbe864d0d2de6fcb0e77ba8d47b6974f4a4f6cb;p=gcc.git re PR c++/42399 ([c++0x] assigning lambda causes segfault from null dereference at libiberty/splay-tree.c:148) PR c++/42399 * pt.c (tsubst_copy_and_build): Propagate LAMBDA_EXPR_LOCATION. From-SVN: r156635 --- diff --git a/gcc/cp/ChangeLog b/gcc/cp/ChangeLog index 42c0e9f44aa..8fcb181ac37 100644 --- a/gcc/cp/ChangeLog +++ b/gcc/cp/ChangeLog @@ -1,3 +1,8 @@ +2010-02-09 Jason Merrill + + PR c++/42399 + * pt.c (tsubst_copy_and_build): Propagate LAMBDA_EXPR_LOCATION. + 2010-02-09 Jason Merrill PR c++/42370 diff --git a/gcc/cp/pt.c b/gcc/cp/pt.c index b903f7735c5..1327d549f43 100644 --- a/gcc/cp/pt.c +++ b/gcc/cp/pt.c @@ -12674,6 +12674,8 @@ tsubst_copy_and_build (tree t, TREE_TYPE (r) = type; CLASSTYPE_LAMBDA_EXPR (type) = r; + LAMBDA_EXPR_LOCATION (r) + = LAMBDA_EXPR_LOCATION (t); LAMBDA_EXPR_DEFAULT_CAPTURE_MODE (r) = LAMBDA_EXPR_DEFAULT_CAPTURE_MODE (t); LAMBDA_EXPR_MUTABLE_P (r) = LAMBDA_EXPR_MUTABLE_P (t); diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog index b91829c5b9c..e1394f4a6f3 100644 --- a/gcc/testsuite/ChangeLog +++ b/gcc/testsuite/ChangeLog @@ -1,5 +1,8 @@ 2010-02-09 Jason Merrill + PR c++/42399 + * g++.dg/cpp0x/lambda/lambda-errloc2.C: New. + PR c++/42370 * g++.dg/cpp0x/lambda/lambda-warn2.C: New. diff --git a/gcc/testsuite/g++.dg/cpp0x/lambda/lambda-errloc2.C b/gcc/testsuite/g++.dg/cpp0x/lambda/lambda-errloc2.C new file mode 100644 index 00000000000..3d53c139fe6 --- /dev/null +++ b/gcc/testsuite/g++.dg/cpp0x/lambda/lambda-errloc2.C @@ -0,0 +1,19 @@ +// PR c++/42399 +// { dg-options "-std=c++0x" } + +struct A { + A(); + A(const A&) = delete; // { dg-error "deleted function" } +}; + +template +void f() +{ + T t; + [t] { return 0; }; // { dg-error "used here" } +} + +int main() +{ + f(); // { dg-message "instantiated" } +}