aboutsummaryrefslogtreecommitdiff
path: root/gcc/cp/cvt.c
diff options
context:
space:
mode:
authorPaolo Carlini <paolo.carlini@oracle.com>2018-05-05 07:39:36 +0000
committerPaolo Carlini <paolo@gcc.gnu.org>2018-05-05 07:39:36 +0000
commit39d8c7d2c1104ee8e9e19dec0c3a4973805fdb9e (patch)
treef0105f418ff20ef1d0feecb79a1a34efbc1af87f /gcc/cp/cvt.c
parentc3f57fa1008774cd8a13d73f6747df927c32994e (diff)
downloadgcc-39d8c7d2c1104ee8e9e19dec0c3a4973805fdb9e.zip
gcc-39d8c7d2c1104ee8e9e19dec0c3a4973805fdb9e.tar.gz
gcc-39d8c7d2c1104ee8e9e19dec0c3a4973805fdb9e.tar.bz2
cvt.c (ocp_convert): Early handle the special case of a null_ptr_cst_p expr converted to a...
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
Diffstat (limited to 'gcc/cp/cvt.c')
-rw-r--r--gcc/cp/cvt.c15
1 files changed, 9 insertions, 6 deletions
diff --git a/gcc/cp/cvt.c b/gcc/cp/cvt.c
index d9e3cb5..9494f29 100644
--- a/gcc/cp/cvt.c
+++ b/gcc/cp/cvt.c
@@ -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)