From: Martin Sebor Date: Mon, 5 Feb 2018 22:45:04 +0000 (+0000) Subject: PR tree-optimization/83369 - Missing diagnostics during inlining X-Git-Url: https://git.libre-soc.org/?a=commitdiff_plain;h=48fe6bbb7137146df5d99707aae21f3aaa7d9ae2;p=gcc.git 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 --- diff --git a/gcc/ChangeLog b/gcc/ChangeLog index e5a8c11b303..12d238ebc3e 100644 --- a/gcc/ChangeLog +++ b/gcc/ChangeLog @@ -1,3 +1,9 @@ +2018-02-05 Martin Sebor + + PR tree-optimization/83369 + * tree-ssa-ccp.c (pass_post_ipa_warn::execute): Use %G to print + inlining context. + 2018-02-05 Martin Liska * doc/invoke.texi: Cherry-pick upstream r323995. diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog index 62ee8f2a26a..41dae445f1f 100644 --- a/gcc/testsuite/ChangeLog +++ b/gcc/testsuite/ChangeLog @@ -1,3 +1,8 @@ +2018-02-05 Martin Sebor + + PR tree-optimization/83369 + gcc.dg/Wnonnull.c: New test. + 2018-02-05 Richard Sandiford * 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 00000000000..be89a5a755c --- /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 + +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 5bae9a7fee5..5591097d018 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 (stmt), i + 1)) { tree fndecl = gimple_call_fndecl (stmt); if (fndecl && DECL_IS_BUILTIN (fndecl))