gimple-fold.c (get_range_strlen): Only set *nonstr when an unterminated string is discovered.
* gimple-fold.c (get_range_strlen): Only set *nonstr when an unterminated string is discovered. Bubble up range even for unterminated strings. (gimple_fold_builtin_strlen): Do not fold if get_range_strlen indicates the string was not terminated via NONSTR. From-SVN: r264816
This commit is contained in:
parent
2e103ae213
commit
78125561e3
2 changed files with 17 additions and 3 deletions
|
@ -1,4 +1,12 @@
|
|||
2018-10-3 Aldy Hernandez <aldyh@redhat.com>
|
||||
2018-10-02 Jeff Law <law@redhat.com>
|
||||
|
||||
* gimple-fold.c (get_range_strlen): Only set *nonstr when
|
||||
an unterminated string is discovered. Bubble up range
|
||||
even for unterminated strings.
|
||||
(gimple_fold_builtin_strlen): Do not fold if get_range_strlen
|
||||
indicates the string was not terminated via NONSTR.
|
||||
|
||||
2018-10-03 Aldy Hernandez <aldyh@redhat.com>
|
||||
|
||||
* tree-vrp.c (extract_range_from_unary_expr): Special case all
|
||||
pointer conversions.
|
||||
|
|
|
@ -1344,8 +1344,13 @@ get_range_strlen (tree arg, tree length[2], bitmap *visited, int type,
|
|||
|
||||
/* If we potentially had a non-terminated string, then
|
||||
bubble that information up to the caller. */
|
||||
if (!val)
|
||||
*nonstr = data.decl;
|
||||
if (!val && data.decl)
|
||||
{
|
||||
*nonstr = data.decl;
|
||||
*minlen = data.len;
|
||||
*maxlen = data.len;
|
||||
return type == 0 ? false : true;
|
||||
}
|
||||
}
|
||||
|
||||
if (!val && fuzzy)
|
||||
|
@ -3596,6 +3601,7 @@ gimple_fold_builtin_strlen (gimple_stmt_iterator *gsi)
|
|||
tree nonstr;
|
||||
tree lenrange[2];
|
||||
if (!get_range_strlen (arg, lenrange, 1, true, &nonstr)
|
||||
&& !nonstr
|
||||
&& lenrange[0] && TREE_CODE (lenrange[0]) == INTEGER_CST
|
||||
&& lenrange[1] && TREE_CODE (lenrange[1]) == INTEGER_CST)
|
||||
{
|
||||
|
|
Loading…
Add table
Reference in a new issue