diff options
author | jason <jason@138bc75d-0d04-0410-961f-82ee72b054a4> | 2009-07-12 21:10:09 +0000 |
---|---|---|
committer | jason <jason@138bc75d-0d04-0410-961f-82ee72b054a4> | 2009-07-12 21:10:09 +0000 |
commit | 6ff64d86e5e63794fa292620a25212c292f904df (patch) | |
tree | a751c0382b5f576ef6622bc469bde0488d9cccf9 /gcc/cp | |
parent | 754f4ac00e75e9045c353e5b4294d753186f3582 (diff) | |
download | gcc-6ff64d86e5e63794fa292620a25212c292f904df.tar.gz |
PR c++/36628
* tree.c (rvalue): Use lvalue_or_rvalue_with_address_p.
git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@149536 138bc75d-0d04-0410-961f-82ee72b054a4
Diffstat (limited to 'gcc/cp')
-rw-r--r-- | gcc/cp/ChangeLog | 3 | ||||
-rw-r--r-- | gcc/cp/tree.c | 4 |
2 files changed, 6 insertions, 1 deletions
diff --git a/gcc/cp/ChangeLog b/gcc/cp/ChangeLog index d3fceab5a6f..9c4cd015178 100644 --- a/gcc/cp/ChangeLog +++ b/gcc/cp/ChangeLog @@ -1,5 +1,8 @@ 2009-07-12 Jason Merrill <jason@redhat.com> + PR c++/36628 + * tree.c (rvalue): Use lvalue_or_rvalue_with_address_p. + PR c++/37206 * cp-tree.h (enum cp_lvalue_kind_flags): Add clk_rvalueref. * tree.c (lvalue_p_1): Return it. Remove diff --git a/gcc/cp/tree.c b/gcc/cp/tree.c index 698138808ce..a003b44e9de 100644 --- a/gcc/cp/tree.c +++ b/gcc/cp/tree.c @@ -532,7 +532,9 @@ rvalue (tree expr) if (!CLASS_TYPE_P (type) && cp_type_quals (type)) type = TYPE_MAIN_VARIANT (type); - if (!processing_template_decl && real_lvalue_p (expr)) + /* We need to do this for rvalue refs as well to get the right answer + from decltype; see c++/36628. */ + if (!processing_template_decl && lvalue_or_rvalue_with_address_p (expr)) expr = build1 (NON_LVALUE_EXPR, type, expr); else if (type != TREE_TYPE (expr)) expr = build_nop (type, expr); |