From df161fc28087971e5f6b0696c2ae7826a38d9a73 Mon Sep 17 00:00:00 2001 From: Martin Sebor Date: Fri, 4 Jan 2019 03:13:33 +0000 Subject: [PATCH] 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 --- gcc/ChangeLog | 9 +++- gcc/calls.c | 2 +- gcc/testsuite/ChangeLog | 5 +++ gcc/testsuite/gcc.dg/Wstringop-truncation-6.c | 42 +++++++++++++++++++ 4 files changed, 55 insertions(+), 3 deletions(-) create mode 100644 gcc/testsuite/gcc.dg/Wstringop-truncation-6.c diff --git a/gcc/ChangeLog b/gcc/ChangeLog index 5a15470c327..8715d3b69df 100644 --- a/gcc/ChangeLog +++ b/gcc/ChangeLog @@ -1,3 +1,8 @@ +2019-01-03 Martin Sebor + + PR tree-optimization/88659 + * calls.c (maybe_warn_nonstring_arg): Avoid assuming maxlen is set. + 2019-01-03 Aaron Sawdey * 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 PR lto/88130 diff --git a/gcc/calls.c b/gcc/calls.c index 04aafde99f6..2e5d411f217 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 ba9ed481c5f..1cfdfcd5b04 100644 --- a/gcc/testsuite/ChangeLog +++ b/gcc/testsuite/ChangeLog @@ -1,3 +1,8 @@ +2019-01-03 Martin Sebor + + PR tree-optimization/88659 + * gcc.dg/Wstringop-truncation-6.c: New test. + 2019-01-02 Thomas Koenig 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 00000000000..b58f291afa8 --- /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); +} -- 2.30.2