Commit 2131e489 by Jakub Jelinek Committed by Prathamesh Kulkarni

re PR middle-end/78501 (SEGV in vrp_val_max)

2016-11-25  Jakub Jelinek  <jakub@redhat.com>
	    Prathamesh Kulkarni  <prathamesh.kulkarni@linaro.org>

	PR middle-end/78501
	* tree-vrp.c (extract_range_basic): Check for ptrdiff_type_node to be
	non null and it's precision matches precision of lhs's type.

Co-Authored-By: Prathamesh Kulkarni <prathamesh.kulkarni@linaro.org>

From-SVN: r242858
parent 6d52e466
2016-11-25 Jakub Jelinek <jakub@redhat.com>
Prathamesh Kulkarni <prathamesh.kulkarni@linaro.org>
PR middle-end/78501
* tree-vrp.c (extract_range_basic): Check for ptrdiff_type_node to be
non null and it's precision matches precision of lhs's type.
2016-11-24 Martin Sebor <msebor@redhat.com>
PR tree-optimization/78476
......@@ -4028,15 +4028,20 @@ extract_range_basic (value_range *vr, gimple *stmt)
}
return;
case CFN_BUILT_IN_STRLEN:
{
tree type = TREE_TYPE (gimple_call_lhs (stmt));
tree max = vrp_val_max (ptrdiff_type_node);
wide_int wmax = wi::to_wide (max, TYPE_PRECISION (TREE_TYPE (max)));
tree range_min = build_zero_cst (type);
tree range_max = wide_int_to_tree (type, wmax - 1);
set_value_range (vr, VR_RANGE, range_min, range_max, NULL);
}
return;
if (tree lhs = gimple_call_lhs (stmt))
if (ptrdiff_type_node
&& (TYPE_PRECISION (ptrdiff_type_node)
== TYPE_PRECISION (TREE_TYPE (lhs))))
{
tree type = TREE_TYPE (lhs);
tree max = vrp_val_max (ptrdiff_type_node);
wide_int wmax = wi::to_wide (max, TYPE_PRECISION (TREE_TYPE (max)));
tree range_min = build_zero_cst (type);
tree range_max = wide_int_to_tree (type, wmax - 1);
set_value_range (vr, VR_RANGE, range_min, range_max, NULL);
return;
}
break;
default:
break;
}
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment