From 17cb2cbbb3acab92c296081a55f7b0b23fae2676 Mon Sep 17 00:00:00 2001 From: jason Date: Tue, 9 Feb 2010 22:06:23 +0000 Subject: [PATCH] PR c++/42399 * pt.c (tsubst_copy_and_build): Propagate LAMBDA_EXPR_LOCATION. git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@156635 138bc75d-0d04-0410-961f-82ee72b054a4 --- gcc/cp/ChangeLog | 5 +++++ gcc/cp/pt.c | 2 ++ gcc/testsuite/ChangeLog | 3 +++ gcc/testsuite/g++.dg/cpp0x/lambda/lambda-errloc2.C | 19 +++++++++++++++++++ 4 files changed, 29 insertions(+) create mode 100644 gcc/testsuite/g++.dg/cpp0x/lambda/lambda-errloc2.C diff --git a/gcc/cp/ChangeLog b/gcc/cp/ChangeLog index 42c0e9f..8fcb181 100644 --- a/gcc/cp/ChangeLog +++ b/gcc/cp/ChangeLog @@ -1,5 +1,10 @@ 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 * decl2.c (change_return_type): New fn. * semantics.c (apply_lambda_return_type): Use it. diff --git a/gcc/cp/pt.c b/gcc/cp/pt.c index b903f77..1327d54 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 b91829c..e1394f4 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 0000000..3d53c13 --- /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" } +} -- 2.7.4