Hi!

When adding this warning years ago, I forgot to verify number of arguments.

Fixed thusly, bootstrapped/regtested on powerpc64{,le}-linux, ok for trunk?

2019-03-05  Jakub Jelinek  <ja...@redhat.com>

        PR middle-end/89590
        * builtins.c (maybe_emit_free_warning): Punt if free doesn't have
        exactly one argument.

        * gcc.dg/pr89590.c: New test.

--- gcc/builtins.c.jj   2019-02-21 22:20:24.834100192 +0100
+++ gcc/builtins.c      2019-03-05 10:53:26.301255523 +0100
@@ -10604,6 +10604,9 @@ maybe_emit_sprintf_chk_warning (tree exp
 static void
 maybe_emit_free_warning (tree exp)
 {
+  if (call_expr_nargs (exp) != 1)
+    return;
+
   tree arg = CALL_EXPR_ARG (exp, 0);
 
   STRIP_NOPS (arg);
--- gcc/testsuite/gcc.dg/pr89590.c.jj   2019-03-05 10:55:44.597980407 +0100
+++ gcc/testsuite/gcc.dg/pr89590.c      2019-03-05 10:55:16.194447677 +0100
@@ -0,0 +1,11 @@
+/* PR middle-end/89590 */
+/* { dg-do compile } */
+/* { dg-options "-O2 -Wall -w" } */
+
+void free (void *);
+
+void
+foo (void)
+{
+  ((void (*)()) free) ();
+}

        Jakub

Reply via email to