diff options
author | Jeff Law <law@gcc.gnu.org> | 2018-10-03 11:23:15 -0600 |
---|---|---|
committer | Jeff Law <law@gcc.gnu.org> | 2018-10-03 11:23:15 -0600 |
commit | 78125561e39be43dc140d5648abf402c4f7cf1c0 (patch) | |
tree | 943f5b63b79fbb5461f5d36468ccd9ca70a4fb67 /gcc | |
parent | 2e103ae2138ede8a4db831dea30065fe0041bc58 (diff) | |
download | gcc-78125561e39be43dc140d5648abf402c4f7cf1c0.zip gcc-78125561e39be43dc140d5648abf402c4f7cf1c0.tar.gz gcc-78125561e39be43dc140d5648abf402c4f7cf1c0.tar.bz2 |
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
Diffstat (limited to 'gcc')
-rw-r--r-- | gcc/ChangeLog | 10 | ||||
-rw-r--r-- | gcc/gimple-fold.c | 10 |
2 files changed, 17 insertions, 3 deletions
diff --git a/gcc/ChangeLog b/gcc/ChangeLog index 6acb077..aa10aa0 100644 --- a/gcc/ChangeLog +++ b/gcc/ChangeLog @@ -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. diff --git a/gcc/gimple-fold.c b/gcc/gimple-fold.c index fa1fc60..fe6bc08 100644 --- a/gcc/gimple-fold.c +++ b/gcc/gimple-fold.c @@ -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) { |