summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorjason <jason@138bc75d-0d04-0410-961f-82ee72b054a4>2014-11-10 05:00:05 +0000
committerjason <jason@138bc75d-0d04-0410-961f-82ee72b054a4>2014-11-10 05:00:05 +0000
commit6800de3ffc31e7cf6411a5146e45a143362ea405 (patch)
treeff5220d115fc17cb154fa70d89a23e681333642a
parentec97fa2d16621a49173af793becd19c6992bc9fb (diff)
downloadgcc-6800de3ffc31e7cf6411a5146e45a143362ea405.tar.gz
DR 799
* typeck.c (build_reinterpret_cast_1): reinterpret_cast to the same scalar type is an rvalue. git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@217276 138bc75d-0d04-0410-961f-82ee72b054a4
-rw-r--r--gcc/cp/ChangeLog4
-rw-r--r--gcc/cp/typeck.c2
-rw-r--r--gcc/testsuite/g++.dg/conversion/reinterpret1.C2
3 files changed, 6 insertions, 2 deletions
diff --git a/gcc/cp/ChangeLog b/gcc/cp/ChangeLog
index f92e002d19a..dd0dc2f76d9 100644
--- a/gcc/cp/ChangeLog
+++ b/gcc/cp/ChangeLog
@@ -1,5 +1,9 @@
2014-11-09 Jason Merrill <jason@redhat.com>
+ DR 799
+ * typeck.c (build_reinterpret_cast_1): reinterpret_cast to the
+ same scalar type is an rvalue.
+
DR 2007
* call.c (build_new_op_1): Don't do non-class lookup for =, -> or [].
diff --git a/gcc/cp/typeck.c b/gcc/cp/typeck.c
index 99f4b8830d2..d0f5ccdc07a 100644
--- a/gcc/cp/typeck.c
+++ b/gcc/cp/typeck.c
@@ -6898,7 +6898,7 @@ build_reinterpret_cast_1 (tree type, tree expr, bool c_cast_p,
|| TYPE_PTR_OR_PTRMEM_P (type))
&& same_type_p (type, intype))
/* DR 799 */
- return fold_if_not_in_template (build_nop (type, expr));
+ return rvalue (expr);
else if ((TYPE_PTRFN_P (type) && TYPE_PTRFN_P (intype))
|| (TYPE_PTRMEMFUNC_P (type) && TYPE_PTRMEMFUNC_P (intype)))
return fold_if_not_in_template (build_nop (type, expr));
diff --git a/gcc/testsuite/g++.dg/conversion/reinterpret1.C b/gcc/testsuite/g++.dg/conversion/reinterpret1.C
index aa55f6f4cf5..d4567822e2a 100644
--- a/gcc/testsuite/g++.dg/conversion/reinterpret1.C
+++ b/gcc/testsuite/g++.dg/conversion/reinterpret1.C
@@ -3,4 +3,4 @@
struct Y { Y(int &); };
int v;
-Y y1(reinterpret_cast<int>(v));
+Y y1(reinterpret_cast<int>(v)); // { dg-error "" }