summaryrefslogtreecommitdiff
path: root/gcc/cp
diff options
context:
space:
mode:
authorjason <jason@138bc75d-0d04-0410-961f-82ee72b054a4>2009-07-12 21:10:09 +0000
committerjason <jason@138bc75d-0d04-0410-961f-82ee72b054a4>2009-07-12 21:10:09 +0000
commit6ff64d86e5e63794fa292620a25212c292f904df (patch)
treea751c0382b5f576ef6622bc469bde0488d9cccf9 /gcc/cp
parent754f4ac00e75e9045c353e5b4294d753186f3582 (diff)
downloadgcc-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/ChangeLog3
-rw-r--r--gcc/cp/tree.c4
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);