diff options
Diffstat (limited to 'gcc')
-rw-r--r-- | gcc/ChangeLog | 7 | ||||
-rw-r--r-- | gcc/builtins.c | 22 | ||||
-rw-r--r-- | gcc/testsuite/ChangeLog | 5 | ||||
-rw-r--r-- | gcc/testsuite/gcc.dg/pr94189.c | 11 |
4 files changed, 33 insertions, 12 deletions
diff --git a/gcc/ChangeLog b/gcc/ChangeLog index 25a27f8..fc35cea 100644 --- a/gcc/ChangeLog +++ b/gcc/ChangeLog @@ -1,3 +1,10 @@ +2020-03-17 Jakub Jelinek <jakub@redhat.com> + + PR middle-end/94189 + * builtins.c (expand_builtin_strnlen): Do return NULL_RTX if we would + emit a warning if it was enabled and don't depend on TREE_NO_WARNING + for code-generation. + 2020-03-16 Vladimir Makarov <vmakarov@redhat.com> PR target/94185 diff --git a/gcc/builtins.c b/gcc/builtins.c index e4a8694..53bae59 100644 --- a/gcc/builtins.c +++ b/gcc/builtins.c @@ -3142,27 +3142,25 @@ expand_builtin_strnlen (tree exp, rtx target, machine_mode target_mode) return NULL_RTX; } - if (lendata.decl - && !TREE_NO_WARNING (exp) - && ((tree_int_cst_lt (len, bound)) - || !exact)) + if (lendata.decl && (tree_int_cst_lt (len, bound) || !exact)) { location_t warnloc = expansion_point_location_if_in_system_header (loc); - if (warning_at (warnloc, OPT_Wstringop_overflow_, - exact - ? G_("%K%qD specified bound %E exceeds the size %E " - "of unterminated array") - : G_("%K%qD specified bound %E may exceed the size " - "of at most %E of unterminated array"), - exp, func, bound, len)) + if (!TREE_NO_WARNING (exp) + && warning_at (warnloc, OPT_Wstringop_overflow_, + exact + ? G_("%K%qD specified bound %E exceeds the size " + "%E of unterminated array") + : G_("%K%qD specified bound %E may exceed the " + "size of at most %E of unterminated array"), + exp, func, bound, len)) { inform (DECL_SOURCE_LOCATION (lendata.decl), "referenced argument declared here"); TREE_NO_WARNING (exp) = true; - return NULL_RTX; } + return NULL_RTX; } if (!len) diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog index ac9f077..879a67d 100644 --- a/gcc/testsuite/ChangeLog +++ b/gcc/testsuite/ChangeLog @@ -1,3 +1,8 @@ +2020-03-17 Jakub Jelinek <jakub@redhat.com> + + PR middle-end/94189 + * gcc.dg/pr94189.c: New test. + 2020-03-17 Martin Liska <mliska@suse.cz> PR lto/94157 diff --git a/gcc/testsuite/gcc.dg/pr94189.c b/gcc/testsuite/gcc.dg/pr94189.c new file mode 100644 index 0000000..f927d55 --- /dev/null +++ b/gcc/testsuite/gcc.dg/pr94189.c @@ -0,0 +1,11 @@ +/* PR middle-end/94189 */ +/* { dg-do compile } */ +/* { dg-options "-O2 -fcompare-debug" } */ + +const char a[] = { 'a', 'b', 'c', 'd' };/* { dg-message "declared here" } */ + +int +foo (void) +{ + return __builtin_strnlen (a, 5); /* { dg-warning "specified bound 5 exceeds the size 4 of unterminated array" } */ +} |