Commit 963afe1b by Jason Merrill Committed by Jason Merrill

re PR c++/52014 ([c++0x] Segfault When `decltype` Used in Nested Lambda Function…

re PR c++/52014 ([c++0x] Segfault When `decltype` Used in Nested Lambda Function Defined in Class Member Function)

	PR c++/52014
	* semantics.c (lambda_expr_this_capture): Don't capture 'this' in
	unevaluated context.

From-SVN: r197063
parent bbce8a8a
2013-03-23 Jason Merrill <jason@redhat.com>
PR c++/52014
* semantics.c (lambda_expr_this_capture): Don't capture 'this' in
unevaluated context.
2013-03-25 Paolo Carlini <paolo.carlini@oracle.com>
PR c++/56722
......
......@@ -9454,6 +9454,11 @@ lambda_expr_this_capture (tree lambda)
tree this_capture = LAMBDA_EXPR_THIS_CAPTURE (lambda);
/* In unevaluated context this isn't an odr-use, so just return the
nearest 'this'. */
if (cp_unevaluated_operand)
return lookup_name (this_identifier);
/* Try to default capture 'this' if we can. */
if (!this_capture
&& LAMBDA_EXPR_DEFAULT_CAPTURE_MODE (lambda) != CPLD_NONE)
......@@ -9523,11 +9528,6 @@ lambda_expr_this_capture (tree lambda)
if (!this_capture)
{
/* In unevaluated context this isn't an odr-use, so just return the
nearest 'this'. */
if (cp_unevaluated_operand)
return lookup_name (this_identifier);
error ("%<this%> was not captured for this lambda function");
result = error_mark_node;
}
......
// PR c++/52014
// { dg-require-effective-target c++11 }
template <class Iterator, class Func>
void for_each(const Iterator first, const Iterator last, Func func)
{
for (Iterator it = first; it != last; ++it) {
func(*it);
}
}
template <class T>
struct helper
{
typedef typename T::size_type type;
};
template <class T>
struct helper<T&>
{
typedef typename T::size_type type;
};
template <class T>
struct helper<T*>
{
typedef typename T::size_type type;
};
struct bar
{
struct foo
{
typedef int size_type;
} foo_;
void test()
{
int arr[] = { 1, 2, 3 };
for_each(arr, arr + 3, [&](helper<foo>::type i) {
for_each(arr, arr + 3, [&](helper<decltype(foo_)>::type j) { });
});
}
};
int main()
{
return 0;
}
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment