aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMartin Sebor <msebor@redhat.com>2019-01-04 03:13:33 +0000
committerMartin Sebor <msebor@gcc.gnu.org>2019-01-03 20:13:33 -0700
commitdf161fc28087971e5f6b0696c2ae7826a38d9a73 (patch)
treea8b55b78fc5535fbf204bc6173c437999fc14a0e
parent7880e17390e2e4af1cd8b2264d37b21960f2d1f0 (diff)
downloadgcc-df161fc28087971e5f6b0696c2ae7826a38d9a73.zip
gcc-df161fc28087971e5f6b0696c2ae7826a38d9a73.tar.gz
gcc-df161fc28087971e5f6b0696c2ae7826a38d9a73.tar.bz2
PR tree-optimization/88659 - ICE in maybe_warn_nonstring_arg
gcc/ChangeLog: * calls.c (maybe_warn_nonstring_arg): Avoid assuming maxlen is set. gcc/testsuite/ChangeLog: * gcc.dg/Wstringop-truncation-6.c: New test. From-SVN: r267569
-rw-r--r--gcc/ChangeLog9
-rw-r--r--gcc/calls.c2
-rw-r--r--gcc/testsuite/ChangeLog5
-rw-r--r--gcc/testsuite/gcc.dg/Wstringop-truncation-6.c42
4 files changed, 55 insertions, 3 deletions
diff --git a/gcc/ChangeLog b/gcc/ChangeLog
index 5a15470..8715d3b 100644
--- a/gcc/ChangeLog
+++ b/gcc/ChangeLog
@@ -1,3 +1,8 @@
+2019-01-03 Martin Sebor <msebor@redhat.com>
+
+ PR tree-optimization/88659
+ * calls.c (maybe_warn_nonstring_arg): Avoid assuming maxlen is set.
+
2019-01-03 Aaron Sawdey <acsawdey@linux.ibm.com>
* config/rs6000/rs6000-string.c (expand_block_move): Don't use
@@ -65,7 +70,7 @@
(maybe_set_strlen_range): Parts refactored into set_strlen_range.
Call set_strlen_range.
* tree-ssa-strlen.h (set_strlen_range): Add prototype.
-
+
PR middle-end/88663
* gimple-fold.c (get_range_strlen): Update prototype to no longer
need the flexp argument.
@@ -80,7 +85,7 @@
from get_range_strlen.
* gimple-ssa-sprintf.c (get_string_length): Update for the new
get_range_strlen API.
-
+
2019-01-02 Jan Hubicka <hubicka@ucw.cz>
PR lto/88130
diff --git a/gcc/calls.c b/gcc/calls.c
index 04aafde..2e5d411 100644
--- a/gcc/calls.c
+++ b/gcc/calls.c
@@ -1681,7 +1681,7 @@ maybe_warn_nonstring_arg (tree fndecl, tree exp)
bndrng[1] = maxlen;
bound = void_type_node;
}
- else
+ else if (maxlen)
{
/* Replace the bound on the operation with the upper bound
of the length of the string if the latter is smaller. */
diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog
index ba9ed48..1cfdfcd 100644
--- a/gcc/testsuite/ChangeLog
+++ b/gcc/testsuite/ChangeLog
@@ -1,3 +1,8 @@
+2019-01-03 Martin Sebor <msebor@redhat.com>
+
+ PR tree-optimization/88659
+ * gcc.dg/Wstringop-truncation-6.c: New test.
+
2019-01-02 Thomas Koenig <tkoenig@gcc.gnu.org>
PR fortran/48543
diff --git a/gcc/testsuite/gcc.dg/Wstringop-truncation-6.c b/gcc/testsuite/gcc.dg/Wstringop-truncation-6.c
new file mode 100644
index 0000000..b58f291
--- /dev/null
+++ b/gcc/testsuite/gcc.dg/Wstringop-truncation-6.c
@@ -0,0 +1,42 @@
+/* PR tree-optimization/88659 - ICE in maybe_warn_nonstring_arg
+ { dg-do compile }
+ { dg-options "-O0 -Wall" } */
+
+const char a[5] = "1234";
+
+int cst_idx_cst_bnd (void)
+{
+ return __builtin_strnlen (&a[1], 0);
+}
+
+int var_idx_cst_bnd (void)
+{
+ int i = 1;
+ return __builtin_strnlen (&a[i], 0);
+}
+
+int phi_idx_cst_bnd (int i)
+{
+ return __builtin_strnlen (&a[i ? 1 : 2], 0);
+}
+
+int unk_idx_cst_bnd (int i)
+{
+ return __builtin_strnlen (&a[i], 0);
+}
+
+int cst_idx_var_bnd (void)
+{
+ int n = 0;
+ return __builtin_strnlen (&a[1], n);
+}
+
+int cst_idx_phi_bnd (int n)
+{
+ return __builtin_strnlen (&a[1], n ? 1 : 2);
+}
+
+int cst_idx_unk_bnd (int n)
+{
+ return __builtin_strnlen (&a[1], n);
+}