From 78125561e39be43dc140d5648abf402c4f7cf1c0 Mon Sep 17 00:00:00 2001 From: Jeff Law Date: Wed, 3 Oct 2018 11:23:15 -0600 Subject: [PATCH] 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 --- gcc/ChangeLog | 10 +++++++++- gcc/gimple-fold.c | 10 ++++++++-- 2 files changed, 17 insertions(+), 3 deletions(-) diff --git a/gcc/ChangeLog b/gcc/ChangeLog index 6acb077b357..aa10aa07269 100644 --- a/gcc/ChangeLog +++ b/gcc/ChangeLog @@ -1,4 +1,12 @@ -2018-10-3 Aldy Hernandez +2018-10-02 Jeff Law + + * 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 * 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 fa1fc60876c..fe6bc08bdd9 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) { -- 2.30.2