aboutsummaryrefslogtreecommitdiff
path: root/gcc
diff options
context:
space:
mode:
authorMartin Sebor <msebor@redhat.com>2018-02-05 22:45:04 +0000
committerMartin Sebor <msebor@gcc.gnu.org>2018-02-05 15:45:04 -0700
commit48fe6bbb7137146df5d99707aae21f3aaa7d9ae2 (patch)
treeb9c392a9674f726368573b4c876aaf83d2050154 /gcc
parentd66f032937c92a8fdc740187cf722715c342d6ad (diff)
downloadgcc-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
Diffstat (limited to 'gcc')
-rw-r--r--gcc/ChangeLog6
-rw-r--r--gcc/testsuite/ChangeLog5
-rw-r--r--gcc/testsuite/gcc.dg/Wnonnull.c41
-rw-r--r--gcc/tree-ssa-ccp.c4
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))