aboutsummaryrefslogtreecommitdiff
path: root/gcc
diff options
context:
space:
mode:
authorJeff Law <law@gcc.gnu.org>2018-10-03 11:23:15 -0600
committerJeff Law <law@gcc.gnu.org>2018-10-03 11:23:15 -0600
commit78125561e39be43dc140d5648abf402c4f7cf1c0 (patch)
tree943f5b63b79fbb5461f5d36468ccd9ca70a4fb67 /gcc
parent2e103ae2138ede8a4db831dea30065fe0041bc58 (diff)
downloadgcc-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/ChangeLog10
-rw-r--r--gcc/gimple-fold.c10
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)
{