aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMartin Sebor <msebor@redhat.com>2018-12-31 03:18:49 +0000
committerJeff Law <law@gcc.gnu.org>2018-12-30 20:18:49 -0700
commit80c2bad6b64c511ba93089216b9fadb7074e4e8f (patch)
treeeb814871f9b884368f98bab9758c7641296c936d
parent598f7235fb4e9d6c201999d66f1db2b247d74de3 (diff)
downloadgcc-80c2bad6b64c511ba93089216b9fadb7074e4e8f.zip
gcc-80c2bad6b64c511ba93089216b9fadb7074e4e8f.tar.gz
gcc-80c2bad6b64c511ba93089216b9fadb7074e4e8f.tar.bz2
gimple-fold.c (get_range_strlen): Minor logic cleanup.
* gimple-fold.c (get_range_strlen): Minor logic cleanup. Add comments on code's intent. Co-Authored-By: Jeff Law <law@redhat.com> From-SVN: r267483
-rw-r--r--gcc/ChangeLog3
-rw-r--r--gcc/gimple-fold.c26
2 files changed, 23 insertions, 6 deletions
diff --git a/gcc/ChangeLog b/gcc/ChangeLog
index 1ee865e..54585381 100644
--- a/gcc/ChangeLog
+++ b/gcc/ChangeLog
@@ -1,6 +1,9 @@
2018-12-30 Martin Sebor <msebor@redhat.com>
Jeff Law <law@redhat.com>
+ * gimple-fold.c (get_range_strlen): Minor logic cleanup. Add comments
+ on code's intent.
+
* gimple-fold.c (strlen_range_kind): New enum.
(get_range_strlen): Update signature to use strlen_range_kind
instead of type+fuzzy.
diff --git a/gcc/gimple-fold.c b/gcc/gimple-fold.c
index 76fa328..fb43552 100644
--- a/gcc/gimple-fold.c
+++ b/gcc/gimple-fold.c
@@ -1548,10 +1548,17 @@ get_range_strlen (tree arg, tree length[2], bitmap *visited,
if (!get_range_strlen (ops[i], length, visited, rkind,
flexp, eltsize, nonstr))
{
- if (rkind == SRK_LENRANGE_2)
- *maxlen = build_all_ones_cst (size_type_node);
- else
+ if (rkind != SRK_LENRANGE_2)
return false;
+ /* Set the upper bound to the maximum to prevent
+ it from being adjusted in the next iteration but
+ leave MINLEN and the more conservative MAXBOUND
+ determined so far alone (or leave them null if
+ they haven't been set yet). That the MINLEN is
+ in fact zero can be determined from MAXLEN being
+ unbounded but the discovered minimum is used for
+ diagnostics. */
+ *maxlen = build_all_ones_cst (size_type_node);
}
return true;
}
@@ -1576,10 +1583,17 @@ get_range_strlen (tree arg, tree length[2], bitmap *visited,
if (!get_range_strlen (arg, length, visited, rkind, flexp,
eltsize, nonstr))
{
- if (rkind == SRK_LENRANGE_2)
- *maxlen = build_all_ones_cst (size_type_node);
- else
+ if (rkind != SRK_LENRANGE_2)
return false;
+ /* Set the upper bound to the maximum to prevent
+ it from being adjusted in the next iteration but
+ leave MINLEN and the more conservative MAXBOUND
+ determined so far alone (or leave them null if
+ they haven't been set yet). That the MINLEN is
+ in fact zero can be determined from MAXLEN being
+ unbounded but the discovered minimum is used for
+ diagnostics. */
+ *maxlen = build_all_ones_cst (size_type_node);
}
}
return true;