diff options
author | Martin Sebor <msebor@redhat.com> | 2019-01-04 03:13:33 +0000 |
---|---|---|
committer | Martin Sebor <msebor@gcc.gnu.org> | 2019-01-03 20:13:33 -0700 |
commit | df161fc28087971e5f6b0696c2ae7826a38d9a73 (patch) | |
tree | a8b55b78fc5535fbf204bc6173c437999fc14a0e | |
parent | 7880e17390e2e4af1cd8b2264d37b21960f2d1f0 (diff) | |
download | gcc-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/ChangeLog | 9 | ||||
-rw-r--r-- | gcc/calls.c | 2 | ||||
-rw-r--r-- | gcc/testsuite/ChangeLog | 5 | ||||
-rw-r--r-- | gcc/testsuite/gcc.dg/Wstringop-truncation-6.c | 42 |
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); +} |