cvt.c (ocp_convert): Early handle the special case of a null_ptr_cst_p expr converted...
authorPaolo Carlini <paolo.carlini@oracle.com>
Sat, 5 May 2018 07:39:36 +0000 (07:39 +0000)
committerPaolo Carlini <paolo@gcc.gnu.org>
Sat, 5 May 2018 07:39:36 +0000 (07:39 +0000)
2018-05-05  Paolo Carlini  <paolo.carlini@oracle.com>

* cvt.c (ocp_convert): Early handle the special case of a
null_ptr_cst_p expr converted to a NULLPTR_TYPE_P type.

From-SVN: r259966

gcc/cp/ChangeLog
gcc/cp/cvt.c

index 6ae6707949141f38bf2b2e9fc8d2f2f855bdb9cc..f7969d40c8d495320de2bd49179c6b3052ab55df 100644 (file)
@@ -1,3 +1,8 @@
+2018-05-05  Paolo Carlini  <paolo.carlini@oracle.com>
+
+       * cvt.c (ocp_convert): Early handle the special case of a
+       null_ptr_cst_p expr converted to a NULLPTR_TYPE_P type.
+
 2018-05-03  Jason Merrill  <jason@redhat.com>
 
        PR c++/85600 - virtual delete failure.
index d9e3cb520c3f0ac140e6c7ddb059719e0c15207d..9494f292d8db72f09c4c17957473051cba285abd 100644 (file)
@@ -711,6 +711,15 @@ ocp_convert (tree type, tree expr, int convtype, int flags,
   if (error_operand_p (e))
     return error_mark_node;
 
+  if (NULLPTR_TYPE_P (type) && null_ptr_cst_p (e))
+    {
+      if (complain & tf_warning)
+       maybe_warn_zero_as_null_pointer_constant (e, loc);
+
+      if (!TREE_SIDE_EFFECTS (e))
+       return nullptr_node;
+    }
+
   if (MAYBE_CLASS_TYPE_P (type) && (convtype & CONV_FORCE_TEMP))
     /* We need a new temporary; don't take this shortcut.  */;
   else if (same_type_ignoring_top_level_qualifiers_p (type, TREE_TYPE (e)))
@@ -832,12 +841,6 @@ ocp_convert (tree type, tree expr, int convtype, int flags,
       /* Ignore any integer overflow caused by the conversion.  */
       return ignore_overflows (converted, e);
     }
-  if (NULLPTR_TYPE_P (type) && e && null_ptr_cst_p (e))
-    {
-      if (complain & tf_warning)
-       maybe_warn_zero_as_null_pointer_constant (e, loc);
-      return nullptr_node;
-    }
   if (POINTER_TYPE_P (type) || TYPE_PTRMEM_P (type))
     return cp_convert_to_pointer (type, e, dofold, complain);
   if (code == VECTOR_TYPE)