Commit a5061eed by Paolo Carlini Committed by Paolo Carlini

re PR c++/51422 ([c++0x] ICE with invalid lambda expression)

/cp
2012-10-07  Paolo Carlini  <paolo.carlini@oracle.com>

	PR c++/51422
	* semantics.c (is_normal_capture_proxy): Return true for
	error_mark_node as DECL_VALUE_EXPR.

/testsuite
2012-10-07  Paolo Carlini  <paolo.carlini@oracle.com>

	PR c++/51422
	* g++.dg/cpp0x/lambda/lambda-ice8.C: New.

From-SVN: r192187
parent 40c5ed5b
2012-10-07 Paolo Carlini <paolo.carlini@oracle.com>
PR c++/51422
* semantics.c (is_normal_capture_proxy): Return true for
error_mark_node as DECL_VALUE_EXPR.
2012-10-05 Jakub Jelinek <jakub@redhat.com>
* cp-tree.h (SIZEOF_EXPR_TYPE_P): Define.
......
......@@ -3,8 +3,7 @@
building RTL. These routines are used both during actual parsing
and during the instantiation of template functions.
Copyright (C) 1998, 1999, 2000, 2001, 2002, 2003, 2004, 2005, 2006, 2007,
2008, 2009, 2010, 2011, 2012 Free Software Foundation, Inc.
Copyright (C) 1998-2012 Free Software Foundation, Inc.
Written by Mark Mitchell (mmitchell@usa.net) based on code found
formerly in parse.y and pt.c.
......@@ -9005,14 +9004,15 @@ is_capture_proxy (tree decl)
bool
is_normal_capture_proxy (tree decl)
{
tree val;
if (!is_capture_proxy (decl))
/* It's not a capture proxy. */
return false;
/* It is a capture proxy, is it a normal capture? */
val = DECL_VALUE_EXPR (decl);
tree val = DECL_VALUE_EXPR (decl);
if (val == error_mark_node)
return true;
gcc_assert (TREE_CODE (val) == COMPONENT_REF);
val = TREE_OPERAND (val, 1);
return DECL_NORMAL_CAPTURE_P (val);
......
2012-10-07 Paolo Carlini <paolo.carlini@oracle.com>
PR c++/51422
* g++.dg/cpp0x/lambda/lambda-ice8.C: New.
2012-10-07 Richard Sandiford <rdsandiford@googlemail.com>
Sandra Loosemore <sandra@codesourcery.com>
......
// PR c++/51422
// { dg-do compile { target c++11 } }
template<typename> struct A {};
void foo()
{
[i] { A<decltype(i)>(); }; // { dg-error "not declared|invalid" }
[i] { A<decltype(i)>(); }; // { dg-error "invalid" }
}
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