diff options
author | Martin Sebor <msebor@redhat.com> | 2018-02-05 22:45:04 +0000 |
---|---|---|
committer | Martin Sebor <msebor@gcc.gnu.org> | 2018-02-05 15:45:04 -0700 |
commit | 48fe6bbb7137146df5d99707aae21f3aaa7d9ae2 (patch) | |
tree | b9c392a9674f726368573b4c876aaf83d2050154 | |
parent | d66f032937c92a8fdc740187cf722715c342d6ad (diff) | |
download | gcc-48fe6bbb7137146df5d99707aae21f3aaa7d9ae2.zip gcc-48fe6bbb7137146df5d99707aae21f3aaa7d9ae2.tar.gz gcc-48fe6bbb7137146df5d99707aae21f3aaa7d9ae2.tar.bz2 |
PR tree-optimization/83369 - Missing diagnostics during inlining
gcc/ChangeLog:
PR tree-optimization/83369
* tree-ssa-ccp.c (pass_post_ipa_warn::execute): Use %G to print
inlining context.
gcc/testsuite/ChangeLog:
PR tree-optimization/83369
gcc.dg/Wnonnull.c: New test.
From-SVN: r257400
-rw-r--r-- | gcc/ChangeLog | 6 | ||||
-rw-r--r-- | gcc/testsuite/ChangeLog | 5 | ||||
-rw-r--r-- | gcc/testsuite/gcc.dg/Wnonnull.c | 41 | ||||
-rw-r--r-- | gcc/tree-ssa-ccp.c | 4 |
4 files changed, 54 insertions, 2 deletions
diff --git a/gcc/ChangeLog b/gcc/ChangeLog index e5a8c11..12d238e 100644 --- a/gcc/ChangeLog +++ b/gcc/ChangeLog @@ -1,3 +1,9 @@ +2018-02-05 Martin Sebor <msebor@redhat.com> + + PR tree-optimization/83369 + * tree-ssa-ccp.c (pass_post_ipa_warn::execute): Use %G to print + inlining context. + 2018-02-05 Martin Liska <mliska@suse.cz> * doc/invoke.texi: Cherry-pick upstream r323995. diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog index 62ee8f2..41dae44 100644 --- a/gcc/testsuite/ChangeLog +++ b/gcc/testsuite/ChangeLog @@ -1,3 +1,8 @@ +2018-02-05 Martin Sebor <msebor@redhat.com> + + PR tree-optimization/83369 + gcc.dg/Wnonnull.c: New test. + 2018-02-05 Richard Sandiford <richard.sandiford@linaro.org> * lib/lto.exp (lto_handle_diagnostics): Remove messages_by_file diff --git a/gcc/testsuite/gcc.dg/Wnonnull.c b/gcc/testsuite/gcc.dg/Wnonnull.c new file mode 100644 index 0000000..be89a5a --- /dev/null +++ b/gcc/testsuite/gcc.dg/Wnonnull.c @@ -0,0 +1,41 @@ +/* PR tree-optimization/83369 - Missing diagnostics during inlining + { dg-do compile } + { dg-options "-O2 -Wall" } */ + +#include <string.h> + +char buf[100]; + +struct Test +{ + const char* s1; + const char* s2; +}; + +__attribute ((nonnull (1, 2))) +inline char* +my_strcpy (char *restrict dst, const char *restrict src, size_t size) +{ + size_t len = strlen (src); /* { dg-warning "argument 1 null where non-null expected" } */ + if (len < size) + memcpy (dst, src, len + 1); /* { dg-warning "argument 2 null where non-null expected" } */ + else + { + memcpy (dst, src, size - 1); /* { dg-warning "argument 2 null where non-null expected" } */ + dst[size - 1] = '\0'; + } + return dst; +} + +void test (struct Test* test) +{ + if (test->s1) + my_strcpy (buf, test->s1, sizeof buf); + else if (test->s2) + my_strcpy (buf, test->s2, sizeof buf); + else + my_strcpy (buf, test->s2, sizeof buf); +} + +/* Verify that the inlining context is printed for -Wnonnull: + { dg-message "function .my_strcpy..*inlined from .test." "" { target *-*-* } 0 } */ diff --git a/gcc/tree-ssa-ccp.c b/gcc/tree-ssa-ccp.c index 5bae9a7..5591097 100644 --- a/gcc/tree-ssa-ccp.c +++ b/gcc/tree-ssa-ccp.c @@ -3458,8 +3458,8 @@ pass_post_ipa_warn::execute (function *fun) location_t loc = gimple_location (stmt); if (warning_at (loc, OPT_Wnonnull, - "argument %u null where non-null " - "expected", i + 1)) + "%Gargument %u null where non-null " + "expected", as_a <gcall *>(stmt), i + 1)) { tree fndecl = gimple_call_fndecl (stmt); if (fndecl && DECL_IS_BUILTIN (fndecl)) |