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
This commit is contained in:
Jakub Jelinek 2016-11-25 09:03:51 +01:00 committed by Prathamesh Kulkarni
parent 6d52e46695
commit 2131e489c9
2 changed files with 21 additions and 9 deletions

View File

@ -1,3 +1,10 @@
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

View File

@ -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;
}