PR c++/68810 - wrong location for reinterpret_cast error.
authorJason Merrill <jason@redhat.com>
Mon, 29 Jan 2018 20:56:00 +0000 (15:56 -0500)
committerJason Merrill <jason@gcc.gnu.org>
Mon, 29 Jan 2018 20:56:00 +0000 (15:56 -0500)
* cvt.c (cp_convert_to_pointer): Always build a CONVERT_EXPR when
!dofold.

From-SVN: r257161

gcc/cp/ChangeLog
gcc/cp/cvt.c
gcc/testsuite/g++.dg/cpp0x/constexpr-reinterpret1.C

index e8b0e1e140aa1a77a7d14027615b62495101a1fa..973798769a47eca07913fb43eece49c378af9855 100644 (file)
@@ -1,3 +1,9 @@
+2018-01-29  Jason Merrill  <jason@redhat.com>
+
+       PR c++/68810 - wrong location for reinterpret_cast error.
+       * cvt.c (cp_convert_to_pointer): Always build a CONVERT_EXPR when
+       !dofold.
+
 2018-01-29  Marek Polacek  <polacek@redhat.com>
 
        PR c++/83996
index 3ab3e2e2b40f5bedc574fe93d272afe80f508750..f5da08bbee2435cfa80a838b71e60c743be958d3 100644 (file)
@@ -239,6 +239,11 @@ cp_convert_to_pointer (tree type, tree expr, bool dofold,
       gcc_assert (GET_MODE_SIZE (SCALAR_INT_TYPE_MODE (TREE_TYPE (expr)))
                  == GET_MODE_SIZE (SCALAR_INT_TYPE_MODE (type)));
 
+      /* FIXME needed because convert_to_pointer_maybe_fold still folds
+        conversion of constants.  */
+      if (!dofold)
+       return build1 (CONVERT_EXPR, type, expr);
+
       return convert_to_pointer_maybe_fold (type, expr, dofold);
     }
 
index d2ee2bac22368e61198adc7a907e6afeabe14937..d7d244f752daa2d7a0381100391b0e54e8688297 100644 (file)
@@ -16,7 +16,9 @@ public:
 
   constexpr static Inner & getInner()
   /* I am surprised this is considered a constexpr */
-  { return *((Inner *)4); } // { dg-error "reinterpret_cast" }
+  {
+    return *((Inner *)4); // { dg-error "reinterpret_cast" }
+  }
 };
 
 B B::instance;