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