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