diff options
author | Paolo Carlini <paolo.carlini@oracle.com> | 2012-10-07 23:06:16 +0000 |
---|---|---|
committer | Paolo Carlini <paolo@gcc.gnu.org> | 2012-10-07 23:06:16 +0000 |
commit | a5061eed103e5e87e8416ac9e181423a8853ce0f (patch) | |
tree | c2cf834162555be1bbb9a7e9d64196509f3b95f4 /gcc/cp | |
parent | 40c5ed5b5a7f1fc4e05c36c3f9d069467390b5d3 (diff) | |
download | gcc-a5061eed103e5e87e8416ac9e181423a8853ce0f.zip gcc-a5061eed103e5e87e8416ac9e181423a8853ce0f.tar.gz gcc-a5061eed103e5e87e8416ac9e181423a8853ce0f.tar.bz2 |
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
Diffstat (limited to 'gcc/cp')
-rw-r--r-- | gcc/cp/ChangeLog | 6 | ||||
-rw-r--r-- | gcc/cp/semantics.c | 10 |
2 files changed, 11 insertions, 5 deletions
diff --git a/gcc/cp/ChangeLog b/gcc/cp/ChangeLog index 458b762..0113fa4 100644 --- a/gcc/cp/ChangeLog +++ b/gcc/cp/ChangeLog @@ -1,3 +1,9 @@ +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. diff --git a/gcc/cp/semantics.c b/gcc/cp/semantics.c index 17ac36f..7174927 100644 --- a/gcc/cp/semantics.c +++ b/gcc/cp/semantics.c @@ -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); |