aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJason Merrill <jason@redhat.com>2014-11-10 00:00:05 -0500
committerJason Merrill <jason@gcc.gnu.org>2014-11-10 00:00:05 -0500
commit6d1301f28c1830acfdffaef0d93e3741b095a31c (patch)
treeff5220d115fc17cb154fa70d89a23e681333642a
parente19264356f11adf0fe3371d34c1ae158cc2a6e44 (diff)
downloadgcc-6d1301f28c1830acfdffaef0d93e3741b095a31c.zip
gcc-6d1301f28c1830acfdffaef0d93e3741b095a31c.tar.gz
gcc-6d1301f28c1830acfdffaef0d93e3741b095a31c.tar.bz2
DR 799
DR 799 * typeck.c (build_reinterpret_cast_1): reinterpret_cast to the same scalar type is an rvalue. From-SVN: r217276
-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 f92e002..dd0dc2f 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 99f4b88..d0f5ccd 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 aa55f6f..d456782 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 "" }